欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 關(guān)于51單片機(jī)程序切換 [打印本頁(yè)]

作者: 1900352116    時(shí)間: 2024-12-2 21:00
標(biāo)題: 關(guān)于51單片機(jī)程序切換
這是51單片機(jī)控制的兩個(gè)模塊,一個(gè)用于測(cè)光強(qiáng),另一個(gè)當(dāng)萬(wàn)年歷用。求一個(gè)按鍵程序,按一下切換一個(gè)模塊,不是按住和松開(kāi)來(lái)切換,

作者: szmcgy    時(shí)間: 2024-12-3 01:31
首先你定義一個(gè)數(shù)值變量
作者: szmcgy    時(shí)間: 2024-12-3 01:36
首先你定義一個(gè)數(shù)值變量
sbit key=P1^0;
unsigned char kaiguan=0;

if(key==0)
{
kaiguan=kaiguan+1;
while(!key);
}


if(kaiguan==1)
{
打開(kāi)測(cè)強(qiáng)光程序
}

if(kaiguan==2)
{
打開(kāi)萬(wàn)年歷程序
}
作者: lkc8210    時(shí)間: 2024-12-3 09:28
  1. #include <REG52.h>

  2. // 定義類(lèi)型別名
  3. typedef unsigned char u8;  // 0 到 255
  4. typedef unsigned int u16;   // 0 到 65535

  5. void Delay20ms(void)        //@11.0592MHz
  6. {
  7.         unsigned char data i, j;

  8.         i = 36;
  9.         j = 217;
  10.         do
  11.         {
  12.                 while (--j);
  13.         } while (--i);
  14. }


  15. // 定義按鍵和 LED 引腳
  16. sbit K1 = P3^2;    // 按鍵 1 連接到 P3.2
  17. bit mode = 0;
  18. void main()
  19. {
  20.     while(1) // 主循環(huán)
  21.     {
  22.                 if(K1==0)
  23.                 {
  24.                         Delay20ms();
  25.                         if(K1==0)
  26.                         {
  27.                                 mode = ~mode;
  28.                                 while(K1==0);
  29.                         }
  30.                 }
  31.                 if(mode==0)
  32.                 {
  33.                         //測(cè)光強(qiáng)
  34.                 }else{
  35.                         //萬(wàn)年歷
  36.                 }
  37.     }
  38. }
復(fù)制代碼

作者: 1900352116    時(shí)間: 2024-12-14 23:28
lkc8210 發(fā)表于 2024-12-3 09:28

但是要通過(guò)lcd顯示光強(qiáng)和萬(wàn)年歷,這個(gè)程序能實(shí)現(xiàn)嗎

作者: 1900352116    時(shí)間: 2024-12-14 23:41
lkc8210 發(fā)表于 2024-12-3 09:28

我試了但是萬(wàn)年歷能顯示就是不動(dòng),是個(gè)固定值
作者: 1900352116    時(shí)間: 2024-12-14 23:42
lkc8210 發(fā)表于 2024-12-3 09:28

萬(wàn)年歷顯示的時(shí)候,LCD上顯示不清楚
作者: 1900352116    時(shí)間: 2024-12-14 23:46
lkc8210 發(fā)表于 2024-12-3 09:28

這是主程序代碼
#include "main.h"
#include "delay.h"
#include "BH1750.h"
#include "lcd1602.h"
#include <REG52.H>
#include "DS1302.h"
#include "LCDC1602.h"

/********************* 宏定義 *******************/
#define RUN_CNT_MAX                        2
#define MENU_NUM_LIMIT                        3

/********************* 引腳定義 *******************/


/********************* 變量定義 *******************/
uchar menu = 0;
uint Light = 0;

/********************* 函數(shù)聲明 *******************/
//顯示界面  每個(gè)菜單的結(jié)構(gòu)
void Dis_menu();
//顯示 數(shù)據(jù)
void Dis_Dat();
//獲取數(shù)據(jù)
void Get_Dat();

#include <REG52.h>

// 定義類(lèi)型別名
typedef unsigned char u8;  // 0 到 255
typedef unsigned int u16;   // 0 到 65535

void Delay20ms(void)        //@11.0592MHz
{
        unsigned char data i, j;

        i = 36;
        j = 217;
        do
        {
                while (--j);
        } while (--i);
}


// 定義按鍵和 LED 引腳
sbit K1 = P3^0;    // 按鍵 1 連接到 P3.2
bit mode = 0;
void main()
{
    while(1) // 主循環(huán)
    {
                if(K1==0)
                {
                        DelayMs(20);
                        if(K1==0)
                        {
                                mode = ~mode;
                                while(K1==0);
                        }
                }
                if(mode==0)
                {            
                                        LCD_Init1();
                                        DS1302_Init();
                                        LCD_ShowString(1,1,"  -  -  ");//靜態(tài)字符初始化顯示
                                        LCD_ShowString(2,1,"  :  :  ");
                                       
                                        DS1302_SetTime();//設(shè)置時(shí)間
                                       
                                       
                                                {
                                                        DS1302_ReadTime();//讀取時(shí)間
                                                        LCD_ShowNum(1,1,DS1302_Time[0],2);//顯示年
                                                        LCD_ShowNum(1,4,DS1302_Time[1],2);//顯示月
                                                        LCD_ShowNum(1,7,DS1302_Time[2],2);//顯示日
                                                        LCD_ShowNum(2,1,DS1302_Time[3],2);//顯示時(shí)
                                                        LCD_ShowNum(2,4,DS1302_Time[4],2);//顯示分
                                                        LCD_ShowNum(2,7,DS1302_Time[5],2);//顯示秒
                                                }
                        }
                     
               else
                                {
                    DelayMs(100);//等待系統(tǒng)穩(wěn)定
                        LCD_Init();
                    Dis_menu();
                        Init_Bh1750();
                       
                        {
                                Get_Dat();
                        }            //萬(wàn)年歷
                }
    }
}

//獲取數(shù)據(jù)
void Get_Dat()
{
        static uint Run_Get_Cnt = RUN_CNT_MAX;
        if(Run_Get_Cnt++ > RUN_CNT_MAX)
        {
                Run_Get_Cnt = 0;
               
                Light = Get_Bh1750();
                Dis_Dat();
        }
}

//顯示 數(shù)據(jù)
void Dis_Dat()
{
        if(menu == 0)
        {
    LCD_Write_Number(6,0,Light,5);
        }
}

//顯示界面  每個(gè)菜單的結(jié)構(gòu)
void Dis_menu()
{
  LCD_Clear();
        if(menu == 0)
        {
                LCD_Write_String(0,0,"Light:     Lx");
        }
        else if(menu == 1)
        {
               
               
        }
        Dis_Dat();
}


作者: 123456uqwe    時(shí)間: 2024-12-15 11:00
首先你定義一個(gè)數(shù)值變量 sbit key=P1^0; unsigned char kaiguan=0;  if(key==0) { kaiguan=kaiguan+1; while(!key); }   if(kaiguan==1) { 打開(kāi)測(cè)強(qiáng)光程序 }  if(kaiguan==2) { 打開(kāi)萬(wàn)年歷程序 }
作者: 1900352116    時(shí)間: 2024-12-17 00:01
lkc8210 發(fā)表于 2024-12-3 09:28

大神,用這個(gè)代碼之后萬(wàn)年歷不動(dòng)了
作者: lkc8210    時(shí)間: 2024-12-17 14:18
1900352116 發(fā)表于 2024-12-17 00:01
大神,用這個(gè)代碼之后萬(wàn)年歷不動(dòng)了


你不斷初始化LCD,顯示當(dāng)然不清
你不斷寫(xiě)入1302,時(shí)間當(dāng)然不走

作者: 1900352116    時(shí)間: 2024-12-18 20:17
lkc8210 發(fā)表于 2024-12-17 14:18
你不斷初始化LCD,顯示當(dāng)然不清
你不斷寫(xiě)入1302,時(shí)間當(dāng)然不走

但是測(cè)光強(qiáng)有數(shù)值,切換萬(wàn)年歷就顯示不清,秒不動(dòng),要怎么改嗎
作者: 1900352116    時(shí)間: 2024-12-18 20:51
lkc8210 發(fā)表于 2024-12-17 14:18
你不斷初始化LCD,顯示當(dāng)然不清
你不斷寫(xiě)入1302,時(shí)間當(dāng)然不走

我在萬(wàn)年歷里加了一個(gè)循環(huán),但是它跳不出去了,不加循環(huán)萬(wàn)年歷又用不了
#include "main.h"
#include "delay.h"
#include "BH1750.h"
#include "lcd1602.h"
#include <REG52.H>
#include "DS1302.h"
#include "LCDC1602.h"

/********************* 宏定義 *******************/
#define RUN_CNT_MAX                        2
#define MENU_NUM_LIMIT                        3

/********************* 引腳定義 *******************/


/********************* 變量定義 *******************/
uchar menu = 0;
uint Light = 0;

/********************* 函數(shù)聲明 *******************/
//顯示界面  每個(gè)菜單的結(jié)構(gòu)
void Dis_menu();
//顯示 數(shù)據(jù)
void Dis_Dat();
//獲取數(shù)據(jù)
void Get_Dat();

#include <REG52.h>

// 定義類(lèi)型別名
typedef unsigned char u8;  // 0 到 255
typedef unsigned int u16;   // 0 到 65535

void Delay20ms(void)        //@11.0592MHz
{
        unsigned char data i, j;

        i = 36;
        j = 217;
        do
        {
                while (--j);
        } while (--i);
}


// 定義按鍵和 LED 引腳
sbit K1 = P3^0;    // 按鍵 1 連接到 P3.2
bit mode = 0;
void main()
{
    while(1) // 主循環(huán)
    {
                if(K1==0)
                {
                        DelayMs(20);
                        if(K1==0)
                        {
                                mode = ~mode;
                                while(K1==0);
                        }
                }
                if(mode==0)
                {            
                                        LCD_Init1();
                                        DS1302_Init();
                                        LCD_ShowString(1,1,"  -  -  ");//靜態(tài)字符初始化顯示
                                        LCD_ShowString(2,1,"  :  :  ");
                                       
                                        DS1302_SetTime();//設(shè)置時(shí)間
                                       
                                       
                                                {
                                                        DS1302_ReadTime();//讀取時(shí)間
                                                        LCD_ShowNum(1,1,DS1302_Time[0],2);//顯示年
                                                        LCD_ShowNum(1,4,DS1302_Time[1],2);//顯示月
                                                        LCD_ShowNum(1,7,DS1302_Time[2],2);//顯示日
                                                        LCD_ShowNum(2,1,DS1302_Time[3],2);//顯示時(shí)
                                                        LCD_ShowNum(2,4,DS1302_Time[4],2);//顯示分
                                                        LCD_ShowNum(2,7,DS1302_Time[5],2);//顯示秒
                                                }
                        }
                     
               else
                                {
                    DelayMs(100);//等待系統(tǒng)穩(wěn)定
                        LCD_Init();
                    Dis_menu();
                        Init_Bh1750();
                       
                        {
                                Get_Dat();
                        }            //萬(wàn)年歷
                }
    }
}

//獲取數(shù)據(jù)
void Get_Dat()
{
        static uint Run_Get_Cnt = RUN_CNT_MAX;
        if(Run_Get_Cnt++ > RUN_CNT_MAX)
        {
                Run_Get_Cnt = 0;
               
                Light = Get_Bh1750();
                Dis_Dat();
        }
}

//顯示 數(shù)據(jù)
void Dis_Dat()
{
        if(menu == 0)
        {
    LCD_Write_Number(6,0,Light,5);
        }
}

//顯示界面  每個(gè)菜單的結(jié)構(gòu)
void Dis_menu()
{
  LCD_Clear();
        if(menu == 0)
        {
                LCD_Write_String(0,0,"Light:     Lx");
        }
        else if(menu == 1)
        {
               
               
        }
        Dis_Dat();
}

作者: 1900352116    時(shí)間: 2024-12-18 21:15
lkc8210 發(fā)表于 2024-12-17 14:18
你不斷初始化LCD,顯示當(dāng)然不清
你不斷寫(xiě)入1302,時(shí)間當(dāng)然不走

萬(wàn)年歷要用while循環(huán),但是循環(huán)之后就不能切換程序,;兩個(gè)矛盾
作者: lkc8210    時(shí)間: 2024-12-19 11:45
1900352116 發(fā)表于 2024-12-18 21:15
萬(wàn)年歷要用while循環(huán),但是循環(huán)之后就不能切換程序,;兩個(gè)矛盾

你不斷初始化LCD,顯示當(dāng)然不清
你不斷寫(xiě)入1302,時(shí)間當(dāng)然不走
作者: 1900352116    時(shí)間: 2024-12-20 19:21
lkc8210 發(fā)表于 2024-12-19 11:45
你不斷初始化LCD,顯示當(dāng)然不清
你不斷寫(xiě)入1302,時(shí)間當(dāng)然不走

現(xiàn)在的問(wèn)題不是顯示不清,萬(wàn)年歷程序里有while循環(huán),但是用了循環(huán)就不能切換程序,兩個(gè)矛盾了
作者: zhouchuantao    時(shí)間: 2024-12-21 17:08
這是51單片機(jī)控制的兩個(gè)模塊,一個(gè)用于測(cè)光強(qiáng),另一個(gè)當(dāng)萬(wàn)年歷用。求一個(gè)按鍵程序,按一下切換一個(gè)模塊,不是按住和松開(kāi)來(lái)切換,

第一  全局變量 char flag

第二 定時(shí)器中斷函數(shù)
  設(shè)定變量 MS;
  按鍵檢測(cè)函數(shù);

第三  按鍵檢測(cè)函數(shù)
        只要有KEY按下 flag++;

main函數(shù)
if((MS == 500 ) &(flag ==0) ) //MS == 500ms刷新
{
         刷新萬(wàn)年厲;
         MS = 0;
}
else if(flag==1)
{
測(cè)強(qiáng)光
}
else
{
flag = 0;
}




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1