經過兩天熬夜的艱苦奮戰(zhàn),在原程序基礎上進行升級,添加按鍵多功能操作
新增功能:1. K1模式轉換,可自由切換:主界面顯示,時間調整,鬧鐘設置,溫度上下限設定等; 2. K2選定需要調整的位數。
切換至時間調整時,通過K3-"加",K4-"減"按鍵調整數值。
切換至鬧鐘設置時,通過K3-"加",K4-"減"按鍵調整數值。
切換至溫度上下限設定時,通過K3-"加",K4-"減"按鍵調整數值。
準備擴展的新功能:鬧鐘音樂,喇叭開啟和關閉,。
操作說明:
開機進入主界面,顯示時鐘和溫度。按下K1時,進入模式選擇,(有時間調整,鬧鐘設置,溫度上下限設定等),當K1按下四次后,長響一聲,回到主界面。
當K1(模式選擇鍵)按下第一次,選擇在時間調整時,按下K2,選定需要調整的位數,選定的位數會一秒鐘不停的閃爍。然后按下K3 “加”或者K4 “減”按鍵,進行數值的加減,當K2按到五次時,返回時間調整界面。
再按下K1(模式選擇鍵)按下第二次,進入到下一個模式,鬧鐘設置。按下K2,選定需要調整的位數,選定的位數會一秒鐘不停的閃爍。然后按下K3 “加”或者K4 “減”按鍵,進行數值的加減,當K2按到五次時,返回鬧鐘設置界面。
再按下K1(模式選擇鍵)按下第三次,進入到下一個模式,溫度上下限設定。按下K2,選定需要調整的位數,選定的位數會一秒鐘不停的閃爍。然后按下K3 “加”或者K4 “減”按鍵,進行數值的加減,當K2按到五次時,返回溫度上下限設定界面。
當K1(模式選擇鍵)按下第四次,返回到時鐘和溫度主界面顯示。
采用的是stc89c51單片機,代碼:
	#include"reg51.h" #define uchar unsigned char #define uint unsigned int /****溫度 端口定義******/ sbit wx5=P2^4; sbit wx6=P2^5; sbit wx7=P2^6; sbit wx8=P2^7; sbit DQ=P3^6; uint temp, temp1,temp2, xs,H1,H2,L1,L2;       uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,    0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0X9c,0xc6,0x91,0xfc,0XE3};  /******延時程序*******/ void delay1(uint m)  {   uint i,j;  for(i=m;i>0;i--)  for(j=110;j>0;j--);  } void delay(unsigned int m)  {   while(m--);   } void Init_DS18B20()   {   unsigned char x=0;   DQ = 1;     //DQ復位 ds18b20通信端口   delay(8); //稍做延時   DQ = 0;     //單片機將DQ拉低   delay(80); //精確延時 大于 480us   DQ = 1;     //拉高總線    delay(4);   x=DQ;      //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗   delay(20);  } /***********ds18b20讀一個字節(jié)**************/ uchar ReadOneChar()  {   unsigned char i=0;   unsigned char dat = 0;   for (i=8;i>0;i--)   {   DQ = 0; // 高電平拉成低電平時讀周期開始   dat>>=1;   DQ = 1; // 給脈沖信號   if(DQ)   dat|=0x80;  //   delay(4);   }   return(dat);  } /*************ds18b20寫一個字節(jié)****************/ void WriteOneChar(unsigned char dat) {  unsigned char i=0;  for (i=8; i>0; i--)  {   DQ = 0;     //從高電平拉至低電平時,寫周期的開始   DQ = dat&0x01;  //數據的最低位先寫入   delay(5);    //60us到120us延時   DQ = 1;       dat>>=1;     //從最低位到最高位傳入  } } /**************讀取ds18b20當前溫度************/ void ReadTemperature() {  unsigned char a=0;  unsigned b=0;  unsigned t=0;  Init_DS18B20();  WriteOneChar(0xCC);  // 跳過讀序號列號的操作  WriteOneChar(0x44);  // 啟動溫度轉換  delay(1);      // this message is wery important  Init_DS18B20();  WriteOneChar(0xCC);  //跳過讀序號列號的操作  WriteOneChar(0xBE);  //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度  delay(1);  a=ReadOneChar();   //讀取溫度值低位   b=ReadOneChar();   //讀取溫度值高位    temp1=b<<4; ? ? ? ? ? //高8位中后三位數的值 ? ?temp1+=(a&0xf0)>>4;  //低8位中的高4位值加上高8位中后三位數的值  temp1室溫整數值  temp2=a&0x0f;     //小數的值  temp=((b*256+a)>>4); //當前采集溫度值除16得 實際溫度值  zhenshu    xs=temp2*0.0625*10;  //小數位,若為0.5則算為5來顯示 xs小數  xiaoshu  } /////////////////////////////////////////////////////////////////////// /****時鐘 端口定義******/ sbit wx1=P2^0; sbit wx2=P2^1; sbit wx3=P2^2; sbit wx4=P2^3; uchar qian,bai,shi,ge,miao1,miao2,count1,count2; uchar n1,n2,z1,z2;//設置鬧鐘變量 uchar code table1[]={0xc0,0xcf,0xa4,0x86,0x8b,    0x92,0x90,0xc7,0x80,0x82}; //////////////////////////////////////////// /***************按鍵調時程序***************/  sbit K1=P3^0;  sbit K2=P3^1;  sbit K3=P3^2;  sbit K4=P3^3;  sbit BEEP=P3^7;  //// 定義蜂鳴器口  uchar K1num,K2num,K3num,K4num,K5num,K6num,K7num; //////////////////////////////////////////  /**********報警聲音**************/  bi(uint t)  {   int c,n;   for(c=0;c 
	 
	
- 
                                電路圖
                                +關注
關注
10448文章
10749瀏覽量
550187 - 
                                51單片機
                                +關注
關注
277文章
5713瀏覽量
131629 - 
                                電子鐘
                                +關注
關注
7文章
189瀏覽量
37751 
原文標題:51單片機電子鐘制作
文章出處:【微信號:changxuemcu,微信公眾號:暢學單片機】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
單片機電子鐘源程序及電路圖資料
    
使用51單片機控制LED實現8X8點陣的電路圖和程序及資料說明
    
使用51單片機設計4X4矩陣鍵盤電子琴的電路圖和程序免費下載
    
使用51單片機設計矩陣按鍵數碼管顯示的超簡潔程序和電路圖免費下載
    
使用51單片機設計LCD1602顯示簡單數字時鐘的電路圖和程序免費下載
    
          
        
        
使用51單片機設計電子鐘制作的介紹電路圖和程序等資料說明
                
 
    
    
    
    
    
    
    
    
           
            
            
                
            
評論