經(jīng)過(guò)兩天熬夜的艱苦奮戰(zhàn),在原程序基礎(chǔ)上進(jìn)行升級(jí),添加按鍵多功能操作
新增功能:1. K1模式轉(zhuǎn)換,可自由切換:主界面顯示,時(shí)間調(diào)整,鬧鐘設(shè)置,溫度上下限設(shè)定等; 2. K2選定需要調(diào)整的位數(shù)。
切換至?xí)r間調(diào)整時(shí),通過(guò)K3-"加",K4-"減"按鍵調(diào)整數(shù)值。
切換至鬧鐘設(shè)置時(shí),通過(guò)K3-"加",K4-"減"按鍵調(diào)整數(shù)值。
切換至溫度上下限設(shè)定時(shí),通過(guò)K3-"加",K4-"減"按鍵調(diào)整數(shù)值。
準(zhǔn)備擴(kuò)展的新功能:鬧鐘音樂(lè),喇叭開(kāi)啟和關(guān)閉,。
操作說(shuō)明:
開(kāi)機(jī)進(jìn)入主界面,顯示時(shí)鐘和溫度。按下K1時(shí),進(jìn)入模式選擇,(有時(shí)間調(diào)整,鬧鐘設(shè)置,溫度上下限設(shè)定等),當(dāng)K1按下四次后,長(zhǎng)響一聲,回到主界面。
當(dāng)K1(模式選擇鍵)按下第一次,選擇在時(shí)間調(diào)整時(shí),按下K2,選定需要調(diào)整的位數(shù),選定的位數(shù)會(huì)一秒鐘不停的閃爍。然后按下K3 “加”或者K4 “減”按鍵,進(jìn)行數(shù)值的加減,當(dāng)K2按到五次時(shí),返回時(shí)間調(diào)整界面。
再按下K1(模式選擇鍵)按下第二次,進(jìn)入到下一個(gè)模式,鬧鐘設(shè)置。按下K2,選定需要調(diào)整的位數(shù),選定的位數(shù)會(huì)一秒鐘不停的閃爍。然后按下K3 “加”或者K4 “減”按鍵,進(jìn)行數(shù)值的加減,當(dāng)K2按到五次時(shí),返回鬧鐘設(shè)置界面。
再按下K1(模式選擇鍵)按下第三次,進(jìn)入到下一個(gè)模式,溫度上下限設(shè)定。按下K2,選定需要調(diào)整的位數(shù),選定的位數(shù)會(huì)一秒鐘不停的閃爍。然后按下K3 “加”或者K4 “減”按鍵,進(jìn)行數(shù)值的加減,當(dāng)K2按到五次時(shí),返回溫度上下限設(shè)定界面。
當(dāng)K1(模式選擇鍵)按下第四次,返回到時(shí)鐘和溫度主界面顯示。
采用的是stc89c51單片機(jī),代碼:
#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}; /******延時(shí)程序*******/ 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復(fù)位 ds18b20通信端口 delay(8); //稍做延時(shí) DQ = 0; //單片機(jī)將DQ拉低 delay(80); //精確延時(shí) 大于 480us DQ = 1; //拉高總線 delay(4); x=DQ; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗 delay(20); } /***********ds18b20讀一個(gè)字節(jié)**************/ uchar ReadOneChar() { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; // 高電平拉成低電平時(shí)讀周期開(kāi)始 dat>>=1; DQ = 1; // 給脈沖信號(hào) if(DQ) dat|=0x80; // delay(4); } return(dat); } /*************ds18b20寫(xiě)一個(gè)字節(jié)****************/ void WriteOneChar(unsigned char dat) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; //從高電平拉至低電平時(shí),寫(xiě)周期的開(kāi)始 DQ = dat&0x01; //數(shù)據(jù)的最低位先寫(xiě)入 delay(5); //60us到120us延時(shí) DQ = 1; dat>>=1; //從最低位到最高位傳入 } } /**************讀取ds18b20當(dāng)前溫度************/ void ReadTemperature() { unsigned char a=0; unsigned b=0; unsigned t=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作 WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換 delay(1); // this message is wery important Init_DS18B20(); WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作 WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度 delay(1); a=ReadOneChar(); //讀取溫度值低位 b=ReadOneChar(); //讀取溫度值高位 temp1=b<<4; ? ? ? ? ? //高8位中后三位數(shù)的值 ? ?temp1+=(a&0xf0)>>4; //低8位中的高4位值加上高8位中后三位數(shù)的值 temp1室溫整數(shù)值 temp2=a&0x0f; //小數(shù)的值 temp=((b*256+a)>>4); //當(dāng)前采集溫度值除16得 實(shí)際溫度值 zhenshu xs=temp2*0.0625*10; //小數(shù)位,若為0.5則算為5來(lái)顯示 xs小數(shù) xiaoshu } /////////////////////////////////////////////////////////////////////// /****時(shí)鐘 端口定義******/ 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;//設(shè)置鬧鐘變量 uchar code table1[]={0xc0,0xcf,0xa4,0x86,0x8b, 0x92,0x90,0xc7,0x80,0x82}; //////////////////////////////////////////// /***************按鍵調(diào)時(shí)程序***************/ 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; ////////////////////////////////////////// /**********報(bào)警聲音**************/ bi(uint t) { int c,n; for(c=0;c
-
電路圖
+關(guān)注
關(guān)注
10409文章
10735瀏覽量
542027 -
51單片機(jī)
+關(guān)注
關(guān)注
277文章
5710瀏覽量
126999 -
電子鐘
+關(guān)注
關(guān)注
7文章
189瀏覽量
37408
原文標(biāo)題:51單片機(jī)電子鐘制作
文章出處:【微信號(hào):changxuemcu,微信公眾號(hào):暢學(xué)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
單片機(jī)電子鐘源程序及電路圖資料

使用51單片機(jī)設(shè)計(jì)計(jì)數(shù)器的程序和電路圖的詳細(xì)資料免費(fèi)下載

使用51單片機(jī)設(shè)計(jì)的電子鐘程序和資料合集免費(fèi)下載

使用51單片機(jī)控制LED實(shí)現(xiàn)8X8點(diǎn)陣的電路圖和程序及資料說(shuō)明

使用51單片機(jī)設(shè)計(jì)4X4矩陣鍵盤(pán)電子琴的電路圖和程序免費(fèi)下載

使用51單片機(jī)設(shè)計(jì)的紅外解碼器電路圖和程序免費(fèi)下載

使用51單片機(jī)設(shè)計(jì)電子琴的電路圖和程序免費(fèi)下載

使用51單片機(jī)設(shè)計(jì)矩陣按鍵數(shù)碼管顯示的超簡(jiǎn)潔程序和電路圖免費(fèi)下載

使用51單片機(jī)設(shè)計(jì)交通燈的電路圖和C語(yǔ)言程序免費(fèi)下載

使用51單片機(jī)設(shè)計(jì)簡(jiǎn)易電子琴的電路圖和代碼免費(fèi)下載

使用51單片機(jī)進(jìn)行電子鐘設(shè)計(jì)的電路圖和程序免費(fèi)下載

使用單片機(jī)設(shè)計(jì)的電子鐘程序免費(fèi)下載

使用51單片機(jī)設(shè)計(jì)LCD1602顯示簡(jiǎn)單數(shù)字時(shí)鐘的電路圖和程序免費(fèi)下載

評(píng)論