智能電子鐘LCD應(yīng)用電子專業(yè)綜合課程設(shè)計報告書_第1頁
智能電子鐘LCD應(yīng)用電子專業(yè)綜合課程設(shè)計報告書_第2頁
智能電子鐘LCD應(yīng)用電子專業(yè)綜合課程設(shè)計報告書_第3頁
智能電子鐘LCD應(yīng)用電子專業(yè)綜合課程設(shè)計報告書_第4頁
智能電子鐘LCD應(yīng)用電子專業(yè)綜合課程設(shè)計報告書_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、專業(yè)綜合課程設(shè)計報告題目:智能電子鐘(LCD)題目智能電子鐘(LCD)一、 設(shè)計要求:制作一個LCD顯示的智能電子鐘:(1) 計時:秒、分、時、日、月、年、星期。(2) 閏年自動判別。(3) 時間、年、月、日、星期交替顯示。(5) 自定任意時刻自動開/關(guān)屏。(6) 計時精度:誤差1秒/月(具有微調(diào)設(shè)置)。二、 方案論證:本實驗可采用并行時鐘芯片(DS12C887)和串行時鐘芯片(DS1302),DS1302要用戶自己安裝后備電池和串口通訊,要32.768KHz的晶振,而DS12C887自帶后備電池,并口通訊,無需外圍元件,并且DS12C887多了一個字節(jié)來記錄世紀(jì)使用的,處在RAM的32H單元

2、,但是其他的寄存器定義都一樣。由于本實驗用到了STC12C5A60S2直插40P封裝的單片機、nokia5110液晶屏、獨立式按鍵、四路2輸入與門并且都是直插的,而且在實驗室做PCB只能是單層板,為了節(jié)約空間和簡化電路于是就選用了串行時鐘芯片DS1302。三、 理論設(shè)計:用CAD軟件繪制的硬件原理圖電源和程序下載端口,此部分的USB可提供電源和下載端口適用于USB下載端口,DOWN端口適用于四角插針式下載、BAT為備用電源端口。CPU主控部分,此部分采用的是高速51系列的STC12C5A60S2的單片機,該芯片不僅運行速度快穩(wěn)定驅(qū)動能力更大,還為用戶提供了部集成8位/10位可調(diào)分辨率ADC模塊

3、(在此設(shè)計中有用到),1KB可擦寫EEPROM本設(shè)計中用其設(shè)計成可調(diào)鬧鐘功能存放鬧鐘值。此圖為串行數(shù)據(jù)nokia5110的LCD顯示器模塊,采用可控背光和可控電源有很好的節(jié)能效果。該顯示器能顯示漢字,字符,圖片、并且處理顯示數(shù)據(jù)速度快。此模塊為串行數(shù)據(jù)實時時鐘模塊,此模塊采用的是達拉斯公司生產(chǎn)的DS1302具有閏年補償。此圖為按鍵中斷模塊,在此模塊中每個獨立式按鍵都能申請外部中斷與時處理按鍵按下的值來執(zhí)行用戶的操作。此圖為蜂鳴器模塊此模塊用于鬧鐘鈴聲設(shè)計,和開機提示。此圖為PCB版圖此圖為PCB打印預(yù)覽軟件流程圖開始按鍵檢測,判斷按鍵是否按下yes其他鍵yes按下目錄鍵NO時間處理初始化時鐘功

4、能1(時間)內(nèi)部子程序,包括鍵值處理,加減上下,確認(rèn),背光控制,鬧鐘,時間日期的設(shè)置溫度處理讀數(shù)據(jù)功能2(溫度)電壓處理數(shù)據(jù)處理功能3(電壓)顯示鬧鐘處理功能4(鬧鐘)返回程序清單完整C程序源代碼/* 主程序:頂層程序 * * 顯示默認(rèn)功能:時間日期顯示; * 調(diào)用子程序; * */# include # include zimo.h /字模程序;# include nokia5110.h/5110驅(qū)動程序;# include ds1302.h /ds1302驅(qū)動程序;# include key.h /按鍵掃描程序;# include printf.h /顯示函數(shù);# include powe

5、r.h /電源模塊;# include main.h /引腳定義;# include delay.h /延時函數(shù);# include macroandconst.h/數(shù)據(jù)類型宏定義;# include ADC.H /ADC電壓測量# include ds18b20.h /溫度模塊;void main()system_inint();/系統(tǒng)初始化;/Set_RTC();while(1)checkclock();caidan(); /菜單顯示;if(menue=0)if(ok=1) LCD_clear(); /清屏幕while(menue=0) /由此進入時鐘功能ok=0;logo();Read_

6、RTC();/讀取時鐘;data_change();/時鐘數(shù)據(jù)處理tiaozheng_flag();date_time(); /顯示年月日時分秒;week();/星期處理;set_date_time();/設(shè)置改變時間和日期;powervcc();checkclock();LCD_clear(); /清屏幕else if(menue=1)/由此進入溫度檢測功能if(ok=1) LCD_clear(); /清屏幕while(menue=1)temperatuercheck();ok=0;LCD_clear(); /清屏幕elseif(menue=2) /由此進入電壓測量功能if(ok=1) LC

7、D_clear(); /清屏幕while(menue=2)power();/電量檢測 ok=0;LCD_clear(); /清屏幕else if(menue=3)/由此進入鬧鐘功能if(ok=1) LCD_clear(); /清屏幕while(menue=3)clock();ok=0;checkclock();LCD_clear(); /清屏幕else LCD_clear(); caidan();void extern0() interrupt 0 /*外部中斷0中斷函數(shù)定義;*/ key(); /* 子程序:底層程序 * * 功能:時間日期數(shù)據(jù)處理; * * */# include # in

8、clude macroandconst.h# include stc12c5a60s2.h# include nokia5110.hsbit SCK = P02;/DS1302時鐘;sbit SDA = P01;/DS1302數(shù)據(jù);sbit RST = P00;/ DS1302復(fù)位;uchar l_tmpDate=0,0,0,1,1,1,13;/秒分時日月周年08-05-15 12:00:00uchar l_tmpdisplay13;code uchar Write_rtc_address7=0x80,0x82,0x84,0x86,0x88,0x8a,0x8c; /秒分時日月周年最低位讀寫位c

9、ode uchar Read_RTC_address7=0x81,0x83,0x85,0x87,0x89,0x8b,0x8d; /*/* 寫一個字節(jié) */*/void Write_Ds1302_Byte(unsigned char temp) unsigned char i; for (i=0;i=1; /右移一位 SCK=1; /*/* 寫入DS1302 */*/void Write_Ds1302( unsigned char address,unsigned char dat ) RST=0;_nop_(); SCK=0;_nop_(); RST=1; _nop_(); /啟動 Write

10、_Ds1302_Byte(address);/發(fā)送地址 Write_Ds1302_Byte(dat);/發(fā)送數(shù)據(jù) RST=0; /恢復(fù)/*/* 讀出DS1302數(shù)據(jù) */*/unsigned char Read_Ds1302 ( uchar address ) unsigned char i,temp=0x00;RST=0;_nop_();_nop_(); SCK=0;_nop_();_nop_(); RST=1;_nop_();_nop_(); Write_Ds1302_Byte(address); for (i=0;i=1;/右移一位SCK=1; _nop_(); _nop_(); SCK

11、=0; RST=0;_nop_(); /以下為DS1302復(fù)位的穩(wěn)定時間 _nop_();RST=0;SCK=0;_nop_();_nop_();_nop_();_nop_();SCK=1;_nop_();_nop_();SDA=0;_nop_();_nop_();SDA=1;_nop_();_nop_();return (temp);/返回/*/* 讀時鐘數(shù)據(jù) */*/void Read_RTC(void) /讀取 日歷 unsigned char i,*p; p=Read_RTC_address; /地址傳遞 for(i=0;i7;i+) /分7次讀取 秒分時日月周年 l_tmpDatei

12、=Read_Ds1302(*p); p+; /*/* 設(shè)定時鐘數(shù)據(jù) */*/void Set_RTC(void) /設(shè)定 日歷uchar i,*p,tmp;for(i=0;i7;i+) /BCD處理 tmp=l_tmpDatei/10;l_tmpDatei=l_tmpDatei%10;l_tmpDatei=l_tmpDatei+tmp*16; Write_Ds1302(0x8E,0X00); /關(guān)閉寫保護; p=Write_rtc_address;/傳地址 for(i=0;i8)set=0;set+; /*up和down按鍵的檢測;加減標(biāo)志位*/if(keyup=0)Delay10ms();i

13、f(keyup=0) LCD_BLA=1;Delay10ms();while(keyup=0); key_flag+;if(keydown=0)Delay10ms();if(keydown=0) LCD_BLA=1;Delay10ms();while(keydown=0);key_flag-; if(keymenue=0)Delay10ms();if(keymenue=0) /菜單選擇標(biāo)志位; Delay10ms();while(keymenue=0); LCD_BLA=1; menue+; if(menue3)menue=0; if(keyok=0) Delay10ms(); if(keyo

14、k=0) /確認(rèn)標(biāo)志位; Delay10ms(); while(keyok=0); ok+; if(ok1)ok=0; set=0;LCD_BLA=0;TR0 = 0; if(set=2)TR0 = 0; EA=1;void set_date_time()if(set=2)/while(keyup=0|keydown=0);miao=l_tmpdisplay10*10+l_tmpdisplay11;miao=miao+key_flag;if(key_flag59)miao=0;miao=miao%10+(miao/10)*16;Write_Ds1302(0x8E,0x00);Write_Ds1

15、302(0x80,miao);Write_Ds1302(0x8E,0x80);if(set=3) / while(keyup=0|keydown=0); fen=l_tmpdisplay8*10+l_tmpdisplay9;fen=fen+key_flag;if(fen59)fen=0;if(key_flag0)&(fen23)shi=0;if(key_flag0)&(shi31)ri=1;if(key_flag0)&(ri12)yue=1;if(key_flag0)&(yue7)zhou=1;if(key_flag0)&(zhou79)nian=0;if(key_flag0)&(nian0)

16、nian=79;nian=nian%10+(nian/10)*16;Write_Ds1302(0x8E,0x00);Write_Ds1302(0x8C,nian);Write_Ds1302(0x8E,0x80);key_flag=0;void caidan() uchar counter; uchar function;/*光標(biāo)顯示位置控制*/if(menue=0)LCD_write_hanzi(0,4,10);Delay1ms(120);LCD_write_hanzi(0,0,3);Delay1ms(120);LCD_write_hanzi(0,2,10);LCD_write_hanzi(4

17、,0,10);else if(menue=1)LCD_write_hanzi(0,0,10);Delay1ms(120);LCD_write_hanzi(0,2,3);Delay1ms(120);LCD_write_hanzi(0,4,10);LCD_write_hanzi(4,0,10);else if(menue=2)LCD_write_hanzi(0,2,10);Delay1ms(120);LCD_write_hanzi(0,4,3);Delay1ms(120);LCD_write_hanzi(0,0,10);LCD_write_hanzi(4,0,10);else if(menue=3

18、) LCD_write_hanzi(0,4,10);Delay1ms(120);LCD_write_hanzi(0,0,10);Delay1ms(120);LCD_write_hanzi(0,2,10);LCD_write_hanzi(4,0,28);elseLCD_write_hanzi(0,4,10);Delay1ms(120);LCD_write_hanzi(0,0,3);Delay1ms(120);LCD_write_hanzi(0,2,10);LCD_write_hanzi(4,0,10);for(function=0;function2;function+)LCD_write_ha

19、nzi(function+1,0,function+4);LCD_write_hanzi(function+1,2,function+6);LCD_write_hanzi(function+1,4,function+8); if(set2) TR0 = 1;if(TF0=1)counter+;TF0=0;if(counter=100) counter=0;LCD_BLA=0;TR0 = 0;if(menue=0)ok=1; /*鬧鐘程序*/void clock()Read_RTC();/讀取時鐘;data_change();/時鐘數(shù)據(jù)處理if(set=2)/while(keyup=0|keyd

20、own=0);minute+=key_flag;if(key_flag59)minute=0;EA=0;/使用iap功能時關(guān)閉中斷;hour=R_EROM(1,2);/讀鬧鐘小時數(shù)據(jù);week2=R_EROM(1,3);/讀鬧鐘分?jǐn)?shù)據(jù); C_EROM(1);W_EROM(1,1,minute);/寫鬧鐘分?jǐn)?shù)據(jù);W_EROM(1,2,hour); /寫鬧鐘小時數(shù)據(jù);W_EROM(1,3,week2);/寫鬧鐘星期數(shù)據(jù);EA=1;/不使用iap功能時打開中斷; key_flag=0;if(set=3) / while(keyup=0|keydown=0); hour=hour+key_flag;i

21、f(hour23)hour=0;if(key_flag0)&(hour7)week2=1;if(key_flag0)&(week21)week2=7;EA=0;/使用iap功能時關(guān)閉中斷minute=R_EROM(1,1);hour=R_EROM(1,2);C_EROM(1);W_EROM(1,1,minute);W_EROM(1,2,hour);W_EROM(1,3,week2);EA=1;/不使用iap功能時打開中斷;key_flag=0;EA=0;/使用iap功能時關(guān)閉中斷 minute=R_EROM(1,1);hour=R_EROM(1,2);week2=R_EROM(1,3);EA=

22、1;/不使用iap功能時打開中斷; clocktable0=minute/10;/分十位; clocktable1=minute%10;/分個位 clocktable2=hour/10; /時十位 clocktable3=hour%10; /時個位 clocktable4=week2; /星期;LCD_write_hanzi(2,0,28);LCD_write_shu(1,2,clocktable2);LCD_write_shu(2,2,clocktable3);/時LCD_write_shu(3,2,64);LCD_write_shu(4,2,clocktable0);LCD_write_s

23、hu(5,2,clocktable1);/分;if(clocktable4=1)LCD_write_6x8shu(10,3,23);LCD_write_6x8shu(11,3,25);LCD_write_6x8shu(12,3,24);if(clocktable4=2)LCD_write_6x8shu(10,3,30);LCD_write_6x8shu(11,3,31);LCD_write_6x8shu(12,3,15);if(clocktable4=3)LCD_write_6x8shu(10,3,33);LCD_write_6x8shu(11,3,15);LCD_write_6x8shu(1

24、2,3,14);if(clocktable4=4)LCD_write_6x8shu(10,3,30);LCD_write_6x8shu(11,3,18);LCD_write_6x8shu(12,3,31);if(clocktable4=5)LCD_write_6x8shu(10,3,16);LCD_write_6x8shu(11,3,28);LCD_write_6x8shu(12,3,19);if(clocktable4=6)LCD_write_6x8shu(10,3,29);LCD_write_6x8shu(11,3,11);LCD_write_6x8shu(12,3,30);if(week

25、2=7)LCD_write_6x8shu(10,3,29);LCD_write_6x8shu(11,3,31);LCD_write_6x8shu(12,3,24);switch(set)case 0: LCD_write_6x8shu(10,4,96);LCD_write_6x8shu(11,4,96);LCD_write_6x8shu(12,4,96);LCD_write_6x8shu(13,4,96);break;case 1: LCD_write_6x8shu(10,4,96);LCD_write_6x8shu(11,4,96);LCD_write_6x8shu(12,4,96);LCD

26、_write_6x8shu(13,4,96);break;case 2:Delay100ms();LCD_write_shu(4,2,76);LCD_write_shu(5,2,76);Delay100ms(); LCD_write_6x8shu(10,4,96);LCD_write_6x8shu(11,4,23);LCD_write_6x8shu(12,4,45);LCD_write_6x8shu(13,4,50);break;case 3: Delay100ms();LCD_write_shu(1,2,76);LCD_write_shu(2,2,76);Delay100ms();LCD_w

27、rite_6x8shu(10,4,18);LCD_write_6x8shu(11,4,51);LCD_write_6x8shu(12,4,57);LCD_write_6x8shu(13,4,54);break;case 4:Delay100ms();LCD_write_6x8shu(10,3,98);LCD_write_6x8shu(11,3,98);LCD_write_6x8shu(12,3,98);Delay100ms();LCD_write_6x8shu(10,4,33);LCD_write_6x8shu(11,4,41);LCD_write_6x8shu(12,4,41);LCD_wr

28、ite_6x8shu(13,4,47);break;default:LCD_write_6x8shu(10,4,96);LCD_write_6x8shu(11,4,96);LCD_write_6x8shu(12,4,96);LCD_write_6x8shu(13,4,96);set=0;break;void checkclock()key();if(hour=(l_tmpdisplay6*10+l_tmpdisplay7)&(minute=(l_tmpdisplay8*10+l_tmpdisplay9)&(week2=l_tmpdisplay12)&(set=0) beep=0;else be

29、ep=1;/* 子程序:底層程序 * * 功能:部EEPROM IAP功能,存放鬧鐘值; * 調(diào)用子程序; * */#include # include stc12c5a60s2.h #define uchar unsigned char #define uint unsigned int /以下是ISP/IAP操作時間宏定義選項 #define EN_IAP 0x83 /系統(tǒng)時鐘 12MHz/*IAP功能使用時調(diào)用的3個函數(shù)*/ uchar R_EROM(uchar n,uint x); /讀第n扇區(qū),第x字節(jié)的數(shù)據(jù) void W_EROM(uchar n,uint x,uchar dat)

30、; /向第n扇區(qū),第x字節(jié)寫入數(shù)據(jù)dat void C_EROM(uchar n); /擦除第n扇區(qū)/*函數(shù):禁止IAP操作,清IAP相關(guān)寄存器*/ void Q0() IAP_CONTR = 0; IAP_CMD = 0; IAP_TRIG = 0; IAP_ADDRH = 0x80; IAP_ADDRL = 0; /*函數(shù):讀一字節(jié)入口:第n扇區(qū),第x字節(jié) 出口:dat*/uchar R_EROM(uchar n,uint x) uchar dat; uint addr; addr =(n-1)*0x0200 + x-1; IAP_CONTR = EN_IAP; IAP_CMD = 1;

31、/允許讀取EEPROM IAP_ADDRL = addr; IAP_ADDRH = addr 8; IAP_TRIG = 0x5a; IAP_TRIG = 0xa5; _nop_(); dat = IAP_DATA; Q0(); return dat; /*函數(shù):寫一字節(jié)入口:第n扇區(qū),第x字節(jié),待寫入數(shù)據(jù)dat*/void W_EROM(uchar n,uint x,uchar dat) uint addr; addr = (n-1)*0x0200 + x-1; IAP_CONTR = EN_IAP; IAP_CMD = 2; /允許編寫EEPROM IAP_ADDRL = addr; IA

32、P_ADDRH = addr 8; IAP_DATA = dat; IAP_TRIG = 0x5a; IAP_TRIG = 0xa5; _nop_(); Q0(); /*函數(shù):擦除某一扇區(qū)入口:第n扇區(qū)*/void C_EROM(uchar n) uint addr; addr = (n-1)*0x0200; IAP_CONTR = EN_IAP; IAP_CMD = 3; /允許擦除EEPROM IAP_ADDRL = addr; IAP_ADDRH = addr 8; IAP_TRIG = 0x5a; IAP_TRIG = 0xa5; _nop_(); Q0();/* 子程序:底層程序 * * 功能:顯示器處理,系統(tǒng)初始化; * * */# in

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論