久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 關于51單片機程序切換 [打印本頁]

作者: 1900352116    時間: 2024-12-2 21:00
標題: 關于51單片機程序切換
這是51單片機控制的兩個模塊,一個用于測光強,另一個當萬年歷用。求一個按鍵程序,按一下切換一個模塊,不是按住和松開來切換,

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

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


if(kaiguan==1)
{
打開測強光程序
}

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

  2. // 定義類型別名
  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) // 主循環
  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.                         //測光強
  34.                 }else{
  35.                         //萬年歷
  36.                 }
  37.     }
  38. }
復制代碼

作者: 1900352116    時間: 2024-12-14 23:28
lkc8210 發表于 2024-12-3 09:28

但是要通過lcd顯示光強和萬年歷,這個程序能實現嗎

作者: 1900352116    時間: 2024-12-14 23:41
lkc8210 發表于 2024-12-3 09:28

我試了但是萬年歷能顯示就是不動,是個固定值
作者: 1900352116    時間: 2024-12-14 23:42
lkc8210 發表于 2024-12-3 09:28

萬年歷顯示的時候,LCD上顯示不清楚
作者: 1900352116    時間: 2024-12-14 23:46
lkc8210 發表于 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;

/********************* 函數聲明 *******************/
//顯示界面  每個菜單的結構
void Dis_menu();
//顯示 數據
void Dis_Dat();
//獲取數據
void Get_Dat();

#include <REG52.h>

// 定義類型別名
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) // 主循環
    {
                if(K1==0)
                {
                        DelayMs(20);
                        if(K1==0)
                        {
                                mode = ~mode;
                                while(K1==0);
                        }
                }
                if(mode==0)
                {            
                                        LCD_Init1();
                                        DS1302_Init();
                                        LCD_ShowString(1,1,"  -  -  ");//靜態字符初始化顯示
                                        LCD_ShowString(2,1,"  :  :  ");
                                       
                                        DS1302_SetTime();//設置時間
                                       
                                       
                                                {
                                                        DS1302_ReadTime();//讀取時間
                                                        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);//顯示時
                                                        LCD_ShowNum(2,4,DS1302_Time[4],2);//顯示分
                                                        LCD_ShowNum(2,7,DS1302_Time[5],2);//顯示秒
                                                }
                        }
                     
               else
                                {
                    DelayMs(100);//等待系統穩定
                        LCD_Init();
                    Dis_menu();
                        Init_Bh1750();
                       
                        {
                                Get_Dat();
                        }            //萬年歷
                }
    }
}

//獲取數據
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();
        }
}

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

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


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

大神,用這個代碼之后萬年歷不動了
作者: lkc8210    時間: 2024-12-17 14:18
1900352116 發表于 2024-12-17 00:01
大神,用這個代碼之后萬年歷不動了


你不斷初始化LCD,顯示當然不清
你不斷寫入1302,時間當然不走

作者: 1900352116    時間: 2024-12-18 20:17
lkc8210 發表于 2024-12-17 14:18
你不斷初始化LCD,顯示當然不清
你不斷寫入1302,時間當然不走

但是測光強有數值,切換萬年歷就顯示不清,秒不動,要怎么改嗎
作者: 1900352116    時間: 2024-12-18 20:51
lkc8210 發表于 2024-12-17 14:18
你不斷初始化LCD,顯示當然不清
你不斷寫入1302,時間當然不走

我在萬年歷里加了一個循環,但是它跳不出去了,不加循環萬年歷又用不了
#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;

/********************* 函數聲明 *******************/
//顯示界面  每個菜單的結構
void Dis_menu();
//顯示 數據
void Dis_Dat();
//獲取數據
void Get_Dat();

#include <REG52.h>

// 定義類型別名
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) // 主循環
    {
                if(K1==0)
                {
                        DelayMs(20);
                        if(K1==0)
                        {
                                mode = ~mode;
                                while(K1==0);
                        }
                }
                if(mode==0)
                {            
                                        LCD_Init1();
                                        DS1302_Init();
                                        LCD_ShowString(1,1,"  -  -  ");//靜態字符初始化顯示
                                        LCD_ShowString(2,1,"  :  :  ");
                                       
                                        DS1302_SetTime();//設置時間
                                       
                                       
                                                {
                                                        DS1302_ReadTime();//讀取時間
                                                        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);//顯示時
                                                        LCD_ShowNum(2,4,DS1302_Time[4],2);//顯示分
                                                        LCD_ShowNum(2,7,DS1302_Time[5],2);//顯示秒
                                                }
                        }
                     
               else
                                {
                    DelayMs(100);//等待系統穩定
                        LCD_Init();
                    Dis_menu();
                        Init_Bh1750();
                       
                        {
                                Get_Dat();
                        }            //萬年歷
                }
    }
}

//獲取數據
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();
        }
}

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

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

作者: 1900352116    時間: 2024-12-18 21:15
lkc8210 發表于 2024-12-17 14:18
你不斷初始化LCD,顯示當然不清
你不斷寫入1302,時間當然不走

萬年歷要用while循環,但是循環之后就不能切換程序,;兩個矛盾
作者: lkc8210    時間: 2024-12-19 11:45
1900352116 發表于 2024-12-18 21:15
萬年歷要用while循環,但是循環之后就不能切換程序,;兩個矛盾

你不斷初始化LCD,顯示當然不清
你不斷寫入1302,時間當然不走
作者: 1900352116    時間: 2024-12-20 19:21
lkc8210 發表于 2024-12-19 11:45
你不斷初始化LCD,顯示當然不清
你不斷寫入1302,時間當然不走

現在的問題不是顯示不清,萬年歷程序里有while循環,但是用了循環就不能切換程序,兩個矛盾了
作者: zhouchuantao    時間: 2024-12-21 17:08
這是51單片機控制的兩個模塊,一個用于測光強,另一個當萬年歷用。求一個按鍵程序,按一下切換一個模塊,不是按住和松開來切換,

第一  全局變量 char flag

第二 定時器中斷函數
  設定變量 MS;
  按鍵檢測函數;

第三  按鍵檢測函數
        只要有KEY按下 flag++;

main函數
if((MS == 500 ) &(flag ==0) ) //MS == 500ms刷新
{
         刷新萬年厲;
         MS = 0;
}
else if(flag==1)
{
測強光
}
else
{
flag = 0;
}




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美精品一区二区三区在线 | 国产美女网站 | 91高清免费| 免费一二区 | 亚洲一区二区三区视频 | 精品成人| 在线观看www | www..99re| 2021天天干夜夜爽 | 亚洲精品中文字幕在线观看 | 色橹橹欧美在线观看视频高清 | 欧洲成人免费视频 | 日本不卡一区 | 欧美日韩精选 | 一级毛片视频 | 毛片一级片 | 久久久久久91 | 免费在线观看一区二区三区 | 91精品国产91久久久 | 在线观看欧美一区 | 国产在线小视频 | 精品国产乱码一区二区三 | 中文字幕在线观看www | 欧美精品一区久久 | 另类专区成人 | 中文字幕视频在线 | 日日干天天操 | 国产一区二区三区久久久久久久久 | 色吧色综合 | 99精品国自产在线观看 | 91色视频在线观看 | 伊人久久综合 | 日韩区| 五月激情六月婷婷 | 国产精品美女www爽爽爽 | 午夜小视频在线播放 | 国内精品视频在线观看 | 欧美一区二区 | 午夜精品久久久久久久久久久久久 | 日韩欧美三区 | 亚洲精品在线看 |