




已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
帶溫度的LCD1602電子時(shí)鐘設(shè)計(jì)實(shí)驗(yàn) 信息科學(xué)與工程學(xué)院 專業(yè):信息管理與信息系統(tǒng)1班 姓名:張茹帆 學(xué)號(hào):201142597 姓名:任師師 學(xué)號(hào):201142595 帶溫度的LCD1602電子時(shí)鐘設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?學(xué)習(xí)利用AT89C52進(jìn)行任務(wù)設(shè)計(jì),練習(xí)使用52單片機(jī)內(nèi)部的 定時(shí)器進(jìn)行計(jì)時(shí)。學(xué)習(xí)ds1302時(shí)鐘芯片和ds18b20溫度傳感器的使用。學(xué)習(xí)用模塊化編程進(jìn)行較長(zhǎng)程序的編寫。二、實(shí)驗(yàn)要求 (1)利用lcd1602液晶顯示屏作為顯示模塊,用AT89C52進(jìn)行控制,用ds18b02測(cè)量顯示即時(shí)溫度,溫度報(bào)警,用ds1302時(shí)鐘芯片為單片機(jī)提供時(shí)間數(shù)據(jù)。具有定時(shí)功能。(2)要求時(shí)間和定時(shí)時(shí)間可調(diào),并且在鬧鈴報(bào)時(shí)的時(shí)候可以用按鍵進(jìn)行關(guān)閉。并且可以用按鍵關(guān)閉打開定時(shí)功能。(3)利用keil uVision4編譯軟件進(jìn)行編譯。(4)完成實(shí)驗(yàn)要求,寫出實(shí)驗(yàn)報(bào)告。三、軟件環(huán)境 Proteus仿真軟件,keil uVision4編譯軟件四、工作現(xiàn)象本時(shí)鐘具有顯示年月日時(shí)分秒星期、溫度和溫度報(bào)警的功能。實(shí)驗(yàn)用時(shí)鐘芯片ds1302來提供秒、分、時(shí)、星期、日期、月份和年份的數(shù)據(jù),顯示部分采用液晶顯示模塊lcd1602,右上方顯示星期,左下角顯示溫度,右下角顯示鬧鈴的開關(guān)狀態(tài)。用溫度傳感器ds18b20來測(cè)量溫度。另外,鬧鈴用D1(LED-RED)來報(bào)時(shí),用D2(LED-RED)做溫度報(bào)警發(fā)聲器,鬧鐘開啟用D3來顯示。具體各部分功能及操作下面將做介紹:ds1302給單片機(jī)at89c52提供年、月、日、時(shí)、分、秒、星期,ds18b20采集溫度的數(shù)據(jù),經(jīng)單片機(jī)的處理送到液晶顯示屏lcd1602上顯示,實(shí)驗(yàn)設(shè)置的報(bào)警溫度為30*c,由于程序有點(diǎn)長(zhǎng),已達(dá)到52單片機(jī)內(nèi)存的極限,所以沒加調(diào)整報(bào)警溫度的功能,并且在修正時(shí)間的過程中只能加,不能減?,F(xiàn)在開始介紹具體的操作步驟:key1為調(diào)整時(shí)間和日期的按鍵,按下key1鍵,lcd1602上的光標(biāo)按時(shí)分星期日月年的順序進(jìn)行移動(dòng),光標(biāo)所到處按key3鍵可以調(diào)整相應(yīng)的數(shù)據(jù)信息。Key2鍵是鬧鐘調(diào)整鍵,本實(shí)驗(yàn)只提供了設(shè)置時(shí)間來調(diào)整鬧鐘,不設(shè)計(jì)年月日和星期,按下key2鍵,光標(biāo)在時(shí)分之間切換,光標(biāo)所到處按key3調(diào)整相應(yīng)數(shù)據(jù)。Key3鍵用來開關(guān)鬧鐘,當(dāng)鬧鈴開啟時(shí),lcd1602的右下角會(huì)出現(xiàn)“ON”的字樣,同時(shí)發(fā)光二極管D3點(diǎn)亮當(dāng)鬧鈴關(guān)閉時(shí),lcd1602右下角則出現(xiàn)“OF”的字樣。Key4來關(guān)閉正在報(bào)時(shí)的鬧鐘,即鬧鐘響是按key4可關(guān)閉鬧鈴。五、實(shí)驗(yàn)電路圖 六、程序流程圖開始初始化LCD及DS1302進(jìn)入調(diào)節(jié)模式判斷設(shè)置按鍵是否按下將時(shí)間/日期寫入DS1302讀取DS1302中的時(shí)間、日期顯示時(shí)間、日期主程序流程圖圖定時(shí)閃爍S2按下定分閃爍S2按下S3按下時(shí)調(diào)節(jié)S3按下分調(diào)節(jié)定時(shí)數(shù)據(jù)寫入LCD1602調(diào)分?jǐn)?shù)據(jù)寫入LCD1602進(jìn)入主程序調(diào)時(shí)數(shù)據(jù)寫入LCD1602S2按下定時(shí)流程圖年調(diào)節(jié)S3按下S3按下年數(shù)據(jù)寫入Ds1302月數(shù)據(jù)寫入Ds1302日數(shù)據(jù)寫入Ds1302星期數(shù)據(jù)寫入Ds1302進(jìn)入主程序S1按下日調(diào)節(jié)月調(diào)節(jié)星期調(diào)節(jié)年閃爍S1按下月閃爍S1按下日閃爍S1按下時(shí)閃爍S1按下分閃爍S1按下星期閃爍S3按下時(shí)調(diào)節(jié)S3按下分調(diào)節(jié)時(shí)數(shù)據(jù)寫入Ds1302分?jǐn)?shù)據(jù)寫入Ds1302S3按下S3按下S1按下時(shí)間調(diào)節(jié)流程圖七、程序代碼:sbit rs=P20;sbit rw=P21;sbit e=P22;void lcdxcom(uchar com);void lcdinit();void lcdxshuju(uchar dat);void lcdx_time(uchar add,uchar date);void lcdx_day(uchar add,uchar date);#endif液晶lcd1602的.c函數(shù):#include#includelcd1602.h#includedelay.h#includeds1302.hvoid lcdxcom(uchar com) e=0; rs=0; rw=0; P0=com; lcddelay(10);/500us e=1; lcddelay(20); e=0;void lcdinit()lcddelay(300);lcdxcom(0x38);lcddelay(100);lcdxcom(0x38);lcddelay(100);lcdxcom(0x38);lcdxcom(0x38);lcdxcom(0x08);lcdxcom(0x01);1、delay延時(shí)函數(shù)的.h函數(shù):#ifndef _DELAY_H_#define _DELAY_H_#define uint unsigned int #define uchar unsigned charvoid lcddelay(uint z);void ds18b20delay(uint t);void msdelay(uint z);#endifDelay函數(shù)的.c函數(shù):#includedelay.h void lcddelay(uint t) uint j,x; for(x=t;x0;x-) for(j=19;j0;j-);void ds18b20delay(uint t) while(t-);void msdelay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);2、液晶lcd1602的.h函數(shù):#ifndef _LCD1602_H_#define _LCD1602_H_#include#define uint unsigned int #define uchar unsigned charstatic unsigned char shi,fen.miao,day;static unsigned char yue,week,nian;static uchar m,f,s,t,y,n,x;static uchar dshi=0,dfen=0,dmiao=0;static uchar b=0;sbit sck=P10;sbit io=P11;sbit rst=P12;sbit key1=P34;sbit key2=P35;sbit key3=P36;sbit key4=P37;sbit key5=P33;sbit p=P15;sbit a=P13;void pd(void);void zhuan(void);void wr_ds1302byte(uchar dat);void wr_ds1302(uchar add,uchar dat);uchar r_ds1302(uchar add);void setds1302(void);void ds1302r_time(void);uchar panduan(uchar yue,uint nian);void keyscan(void);void setbeep(void);void naozhong(void);void ockey(void);#endif時(shí)鐘芯片ds1302的.c函數(shù):#includeds1302.h#include#includedelay.h#includelcd1602.huchar timedata=10,6,12,31,23,59,50;/年周月日時(shí)分秒uchar xiedizhi=0x8c,0x8a,0x88,0x86,0x84,0x82,0x80;/寫地址數(shù)組uchar dudizhi=0x8d,0x8b,0x89,0x87,0x85,0x83,0x81;/讀地址數(shù)組lcdxcom(0x06);lcdxcom(0x0c);void lcdxshuju(uchar dat) e=0; rs=0; rs=1; rw=0; P0=dat; lcddelay(10); e=1; lcddelay(20); e=0; void lcdx_time(uchar add,uchar date)/寫時(shí)分秒函數(shù)uchar shi,ge;shi=date/10;ge=date%10;lcdxcom(0x80+0x40+add);/設(shè)置顯示位置lcdxshuju(0x30+shi);/送去液晶顯示十位lcdxshuju(0x30+ge);/顯示各位lcdxcom(0x0c);/設(shè)置開始顯示,不顯示光標(biāo) void lcdx_day(uchar add,uchar date)/寫時(shí)分秒函數(shù)uchar shi,ge;shi=date/10;ge=date%10;lcdxcom(0x80+add);/設(shè)置顯示位置lcdxshuju(0x30+shi);/送去液晶顯示十位lcdxshuju(0x30+ge);/顯示各位lcdxcom(0x0c);/設(shè)置開始顯示,不顯示光標(biāo)3、時(shí)鐘芯片ds1302的.h函數(shù):#ifndef _DS1302_H_#define _DS1302_H_#include#define uint unsigned int #define uchar unsigned char value=1; sck=0; if(io) value=value|0x80; sck=1; rst=0; _nop_(); sck=0; _nop_(); sck=1; io=1; return value; void setds1302(void)uchar i,j;for(i=0;i8;i+) j=timedatai/10; timedatai=timedatai%10; timedatai=timedatai+j*16; wr_ds1302(0x8e,0x00);/去除寫保護(hù) for(i=0;i7;i+) wr_ds1302(xiedizhii,timedatai); wr_ds1302(0x8e,0x00);/加除寫保護(hù) lcdxcom(0xc0+14); lcdxshuju(table30); lcdxshuju(table32);void ds1302r_time(void) uchar i; for(i=0;i7;i+) timedatai=r_ds1302(dudizhii)/16*10+r_ds1302(dudizhii)%16; uchar table3=ONF;void wr_ds1302byte(uchar dat)/寫一個(gè)字節(jié)的數(shù)據(jù) uchar i; for(i=0;i=1; sck=1; void wr_ds1302(uchar add,uchar dat)/寫數(shù)據(jù) rst=0; _nop_(); sck=0; _nop_(); rst=1; _nop_(); wr_ds1302byte(add); wr_ds1302byte(dat); rst=0; _nop_(); io=1; sck=1;uchar r_ds1302(uchar add) uchar i,value; rst=0; _nop_(); sck=0; _nop_(); rst=1; _nop_(); wr_ds1302byte(add); for(i=0;i8;i+) if(yue=4)|(yue=6)|(yue=9)|(yue=11)r=30;if(a=1)&(yue=2)r=29;if(a=0)&(yue=2)r=28;return r; void keyscan(void) uchar z; uchar num=0;msdelay(500); if(key1=0) msdelay(10);if(key1=0)ds1302r_time();lcdx_time(10,0);while(1) if(key1=0)msdelay(500); num+; if(num=1) lcdxcom(0x80+0x40+4); lcdxcom(0x0f); while(key3=1)&(key1=1); do lcdxcom(0x80+0x40+4); lcdxcom(0x0f); while(!key3) shi+; if(shi=24) shi=0; lcdx_time(4,shi); msdelay(300); while(key1); miao=timedata6; fen=timedata5; shi=timedata4; day=timedata3; yue=timedata2; week=timedata1; nian=timedata0;void zhuan(void) m=timedata6; f=timedata5; s=timedata4; t=timedata3; y=timedata2; x=timedata1; n=timedata0;void pd(void) lcdx_time(10,miao); if(f!=fen) lcdx_time(7,fen); if(s!=shi) lcdx_time(4,shi); if(t!=day) lcdx_day(11,day); if(y!=yue) lcdx_day(8,yue); if(n!=nian) lcdx_day(5,nian); if(x!=week) lcdx_day(14,week);uchar panduan(uchar yue,uint nian) uchar r,a;a=(nian%400)=0|(nian%100!=0)&(nian%4=0);if(yue=1)|(yue=3)|(yue=5)|(yue=7)|(yue=8)|(yue=10)|(yue=12)r=31; while(key3=1)&(key1=1); do lcdxcom(0x80+11); lcdxcom(0x0f); while(!key3) day+; z=panduan(yue,nian); if(day=(z+1) day=0; lcdx_day(11,day); msdelay(300); while(key1); if(num=5) lcdxcom(0x80+8); lcdxcom(0x0f); while(key3=1)&(key1=1); do lcdxcom(0x80+8); lcdxcom(0x0f); while(!key3) yue+; if(yue=13) yue=0; lcdx_day(8,yue); msdelay(300); while(key1); if(num=6) lcdxcom(0x80+5); lcdxcom(0x0f); while(key3=1)&(key1=1); doif(num=2) lcdxcom(0xc0+7); lcdxcom(0x0f); while(key3=1)&(key1=1); do lcdxcom(0xc0+7); lcdxcom(0x0f); while(!key3) fen+; if(fen=60) fen=0; lcdx_time(7,fen); msdelay(300); while(key1); if(num=3) lcdxcom(0x80+14); lcdxcom(0x0f); while(key3=1)&(key1=1); do lcdxcom(0x80+14); lcdxcom(0x0f); while(!key3) week+; if(week=8) week=1; lcdx_day(14,week); msdelay(300); while(key1); if(num=4) lcdxcom(0x80+11); lcdxcom(0x0f);while(1) if(key2=0) num+; if(num=1) lcdxcom(0xc0+4); lcdxcom(0x0f); while(key3=1)&(key2=1); do lcdxcom(0xc0+4); lcdxcom(0x0f); while(!key3) dshi+; if(dshi=24) dshi=0; lcdx_time(4,dshi); msdelay(300);while(key2=1);if(num=2)lcdxcom(0xc0+7); lcdxcom(0x0f); while(key3=1)&(key2=1); do lcdxcom(0xc0+7); lcdxcom(0x0f); while(!key3) dfen+; if(dfen=60) dfen=0; lcdx_time(7,dfen); msdelay(300); lcdxcom(0x80+5); lcdxcom(0x0f); while(!key3) nian+; if(nian=20) nian=10; lcdx_day(5,nian); msdelay(300); while(key1); if(num=7) timedata4=shi;timedata5=fen;timedata6=0;timedata3=day;timedata2=yue;timedata0=nian;timedata1=week;setds1302();num=0;break; void setbeep(void) uchar num=0; msdelay(500); if(key2=0)msdelay(10); if(key2=0) lcdx_time(4,dshi); lcdx_time(7,dfen); lcdx_time(10,0);lcdxshuju(table31); p=0;/定時(shí)開標(biāo)志 4、溫度傳感器ds18b20的.h函數(shù):#ifndef _DS18B20_H_#define _DS18B20_H_#include#define uint unsigned int #define uchar unsigned charsbit ds=P23;void ds1820init(void);void ds1820xbyte(uchar dat);uchar ds1820rbyte(void);uchar rwendu(void);#endif溫度傳感器ds18b20的.c函數(shù):#includeds18b20.h#includedelay.hvoid ds1820init(void)void ds1820xbyte(uchar dat) uchar i; for(i=0;i=1; uchar n; ds=1; ds18b20delay(8); ds=0; ds18b20delay(80); ds=1;while(key2=1);if(num=3)lcdx_time(4,shi);lcdx_time(7,fen); num=0; break;msdelay(300); void naozhong(void) if(b=1)&(dshi=shi)&(dfen=fen)&(miao=0)&(miao=1; ds=1;if(ds) a|=0x80; ds18b20delay(4); return a;uchar rwendu(void)uchar b,c; ds1820init(); ds1820xbyte(0xcc);/跳過rom ds1820xbyte(0x44);/啟動(dòng)溫度測(cè)量 ds18b20delay(300); ds1820init(); ds1820xbyte(0xcc); ds1820xbyte(0xbe); b=ds1820rbyte(); c=ds1820rbyte(); c4; return c;ds18b20delay(8); n=ds; ds18b20delay(4);void ds1820xbyte(uchar dat) uchar i; for(i=0;i=1; ds18b20delay(4); uchar ds1820rbyte(void) uchar i,a; for(i=0;i=30) report=0; else rep
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司文明網(wǎng)絡(luò)活動(dòng)方案
- 數(shù)字經(jīng)濟(jì)賦能農(nóng)村消費(fèi)市場(chǎng)的實(shí)證研究
- 公司春節(jié)做燈籠活動(dòng)方案
- 公司活動(dòng)攝影策劃方案
- 人造革技術(shù)升級(jí)改造項(xiàng)目可行性研究報(bào)告
- 公司文化積分活動(dòng)方案
- 公司登山春游活動(dòng)方案
- 鐵路運(yùn)輸協(xié)議書范本
- 公司組織圖書角活動(dòng)方案
- 掌握Python爬蟲技術(shù)實(shí)現(xiàn)海量信息的高效獲取與整 理
- 湘教版六年級(jí)音樂教案下冊(cè)
- 金融行業(yè)人才培養(yǎng)與發(fā)展計(jì)劃
- 2025年人衛(wèi)題庫1類(眼科.帶解析)
- 2025年新疆維吾爾阿克蘇地區(qū)沙雅縣小升初數(shù)學(xué)檢測(cè)卷含解析
- 《道路交通重大事故隱患排查指引(試行)》知識(shí)培訓(xùn)
- 關(guān)于八段錦的英語對(duì)話
- 核心制度:安全輸血制度
- 《中華人民共和國職業(yè)分類大典》(2022年版)各行業(yè)職業(yè)表格統(tǒng)計(jì)版(含數(shù)字職業(yè))
- 《銀行業(yè)金融機(jī)構(gòu)安全評(píng)估標(biāo)準(zhǔn)》
- 企業(yè)內(nèi)部培訓(xùn)體系搭建及實(shí)施效果評(píng)估報(bào)告
- 湖南省首屆財(cái)會(huì)知識(shí)大賽競(jìng)賽考試網(wǎng)絡(luò)答題題庫
評(píng)論
0/150
提交評(píng)論