版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、摘要在寒假期間我用一周時間完成了這個液晶萬年歷,它可以顯示年月日、時分秒、以及溫度(可上下限報警),可以對時間進行加一或減一調整,并加入了閏、平年時間調整,方便可行,已經調試成功??紤]到成本和方便,本作品采用了STC89c52和DS18B20,計時用的是51單片機自帶的十六位定時器/計數器T0,盡管對時間進行了誤差調整但是還是有一定的誤差,考慮到學校后改用DS1302時鐘芯片,進一步減小誤差。溫度顯示精度達到0.1攝氏度。關鍵詞: 單片機 DS18B20 萬年歷 溫度1. 硬件工作介紹(1)上電自動復位及手動復位電路 STC89c52單片機的RST端外部復位有兩種操作方式:上電自動復位和按鍵手
2、動復位。本設計用上電自動復位以及手動復位下結合的方式外接電路(見附圖)。(2)時鐘振蕩電路作品中采用12M晶振,其連接方法如圖所示,其中電容的值都為22pF。(3)1602液晶顯示接口1602采用標準的16腳接口(見附圖),其中:第1腳:GND為地電源第2腳:VCC接5V正電源第3腳:V0為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。第5腳:RW為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和RW共同為低電平時可以
3、寫入指令或者顯示地址,當RS為低電平RW為高電平時可以讀忙信號,當RS為高電平RW為低電平時可以寫入數據。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數據線。 第15腳:VCC第16:GND(4)鍵盤鍵盤是通過S3(P3.2),S4(p3.3),S5(p3.4)對時鐘進行調整,其S3選擇要調整的對象如時,分,日,月等等,并在液晶屏上顯示所選的對象。S4對所選中的對象進行加一調整,而S5對所選對象進行減一調整。(5)蜂鳴器 對溫度進行測量,高低溫超限報警,正常溫度在15.0-36.0攝氏度,超過最高或低于最低溫度就會鳴叫報警。2. 軟件工作
4、介紹 由于C語言功能豐富,表達能力和可移植能力強,而且操作方便,簡單易懂,因此軟件部分由C語言編寫,程序的重點和難點是閏月的時間調整以及鍵盤對時間的調整,本程序還不是太完善,溫度顯示有規(guī)律性的微微閃爍,懇請老師指正。開始 LCD初始化 T0初始化 時間、溫度顯示 S3按下否? S4按下否? S5按下否? 否 否是 是 是 時間加一 N加一,選擇調整對象 時間減一 否 否到最大值否? N=6否?到最小值否? 是 是 是 時間清零 N清零 時間清零 主程序流程圖設計總結在制作的過程中,因為板子是在學校自己動手做的最小系統(tǒng)板,接插線還是比較簡單的,難的是硬件的調試,因為理論與實踐總是存在著差距,想出
5、來的東西沒有經過實踐的檢驗是不可靠的,任何一個小小的疏忽大意都能導致失敗。比如說對 hour, min , sec,day, moth的定義,一開始我用的unsigned char ,但是在調試減一時,減到零時再按下鍵盤就會出現亂碼,幾經調試,終于發(fā)現問題地所在并及時地解決了問題,之后再一次對硬件進行調試,終于成功了。從這一方面來說,我認識到做要比說難得多,做的過程中必定有很多的阻礙,但是一定要慢慢來,一點一點地找出問題,再一點一點地解決它,這樣的話,到達成功的彼岸也就僅僅是時間的問題了。我通過這次設計,特別是通過對程序的編寫,深層了解了單片機內部結構和外圍器件的應用。我學到的不僅僅是電子方面
6、的知識,更重要的是,我學到了作為一名電子設計者所必需的心理素質,那就是決心加上耐心!附錄1:程序代碼:#include <reg51.h>#define Lcd_Data P0 /定義數據端口#define _TH0_TL0_ (65536 - 50000) #define HI (_TH0_TL0_ / 256) /給高8位賦值#define LO (_TH0_TL0_ % 256) /給低8位賦值#define M 20 /(1000/50)1秒要20個中斷的累計 char hour = 0, min = 0, sec = 0,N=0,day=1,moth=1,week=7;
7、/初始化要顯示的值unsigned char SEG_TAB = 0x30,0x31,0x32, 0x33, 0x34, 0x35, 0x36, 0x37,0x38, 0x39;/0-9數字 unsigned int year=8;sbit RS = P2 5; /定義和LCD的連接端口sbit RW = P2 4;sbit E = P2 3;sbit Busy = P0 7;sbit S3 = P32;/定義開關s3選擇鍵sbit S4 = P33;/s4加一鍵sbit S5 = P34;/s5減一鍵sbit DQ = P20;/DS18B20sbit speak = P21; /蜂鳴器警報
8、/*/void delay1(unsigned int num)/短延時函數while( num- );/*/void Delay(unsigned char t)/長延時函數,延時 1MS*t Sunsigned char a;while(-t != 0)for(a = 0; a < 125; a+);/*/void Timer0Init(void) /初始化定時器0程序TMOD = 0x01; /設置模式1 定時器0 工作方式0TH0 = HI; /給TH0,TL0賦初始值TL0 = LO;TR0 = 1; /啟動定時器0ET0 = 1; /定時器中斷開EA = 1;/總中斷開/*/
9、void Read_Busy(void)/讀忙信號判斷doLcd_Data = 0xff;RS = 0;RW = 1;E = 0;Delay(2);E = 1; while(Busy);/*/ void Write_Comm(unsigned char lcdcomm) /寫指令函數Lcd_Data = lcdcomm;RS = 0;RW = 0;E = 0;Read_Busy();E = 1;/*/void Write_Data(unsigned char lcddata)/寫數據函數Lcd_Data = lcddata;RS = 1;RW = 0;E = 0;Read_Busy();E =
10、 1;/*/void Init_LCD(void)/初始化LCDDelay(400); /稍微延時,等待LCD進入工作狀態(tài)Write_Comm(0x01);/清顯示Write_Comm(0x02);/光標歸位Write_Comm(0x38);/8位2行5*8Write_Comm(0x06);/文字不動,光標右移Write_Comm(0x0c);/顯示開/關,光標開閃爍開Write_Comm(0x18);/左移/*/Init_DS18B20(void)/初始化ds1820unsigned char x = 0;DQ = 1; /DQ復位delay1(8); /稍做延時DQ = 0; /單片機將D
11、Q拉低delay1(80); /精確延時 大于 480usDQ = 1; /拉高總線delay1(14);x = DQ; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗 delay1(20);/*/ReadOneChar(void)/讀一個字節(jié)unsigned char i = 0;unsigned char dat = 0;for (i = 8; i > 0; i-) DQ = 0; / 給脈沖信號 dat >>= 1; DQ = 1; / 給脈沖信號 if(DQ) dat |= 0x80; delay1(4);return (dat);/*/WriteOneCh
12、ar(unsigned char dat)/寫一個字節(jié)unsigned char i = 0;for (i = 8; i > 0; i-) DQ = 0; DQ = dat&0x01; delay1(5); DQ = 1; dat>>=1;/*/Read_Disp_Temperature(void)/讀取并顯示溫度 unsigned int a = 0, b = 0, c = 0, t = 0; float tt = 0; Init_DS18B20();WriteOneChar(0xCC); / 跳過讀序號列號的操作WriteOneChar(0x44); / 啟動溫度
13、轉換Init_DS18B20();WriteOneChar(0xCC); /跳過讀序號列號的操作WriteOneChar(0xBE); /讀取溫度寄存器a = ReadOneChar();b = ReadOneChar();t = b;t <<= 8;t = t | a;tt = t * 0.0625; t = tt * 10 + 0.5; /放大10倍輸出并四舍五入a = t / 100; /十位b = t / 10 - a * 10; /個位 c = t - a * 100 - b * 10; /小數位 if(t>=360)|(t<=150) /溫度報警范圍 spe
14、ak=0; else speak=1; Write_Comm(0x8d); /lcd顯示溫度 Write_Data( SEG_TABa); Write_Data( SEG_TABb); Write_Data( '.'); Write_Data( SEG_TABc);/*/void main(void)/主函數-數字讀取和計算Init_LCD(); /初始化 LCD Timer0Init();/初始化定時器0 Write_Comm(0x83); /寫入":"字符 Write_Data(':'); Write_Comm(0x86); Write_
15、Data(':'); Write_Comm(0x89);/溫度提示字符 Write_Data('T'); Write_Data('e'); Write_Data('m'); Write_Data('p'); Write_Comm(0xc1);/第二行首地址 /寫入"20 - -"字符 Write_Data('2'); Write_Data('0'); Write_Comm(0xc5); Write_Data('-'); Write_Comm(0xc
16、8); Write_Data('-'); Write_Comm(0xcb); Write_Data('-'); while(1) Read_Disp_Temperature(); /溫度 if(S3=0) delay1(10); if(S3=0) N+; if(N>6) N=0; while(S3=0); Write_Comm(0xcf); Write_Data(SEG_TABN); /顯示切換鍵位所示的位置 N /0:秒,1:分,2:時,3:日,4:月,5:年 6:星期 if(S4=0)/時間調整-加 delay1(10); if(S4=0) if(N=
17、1) min+; if(min=60) min=0; Write_Comm(0x84); Write_Data(SEG_TABmin/10); Write_Comm(0x85); Write_Data(SEG_TABmin%10); if(N=2) hour +; if(hour=24) hour=0; Write_Comm(0x81); Write_Data(SEG_TABhour/10); Write_Comm(0x82); Write_Data(SEG_TABhour%10); if(N=3) day+; if(moth=2&&(year%4=0)&&da
18、y=30)day=1; /閏年2月天數計算 if(moth=2&&(year%4!=0)&&day=29)day=1; /平年2月 if(moth=4|moth=6|moth=9|moth=11)&&day=31)day=1;/4,6,9,11月計算 if(day=32)day=1;/1,3,5,7,8,10,12月天數計算 Write_Comm(0xC9); Write_Data(SEG_TABday/10); Write_Comm(0xCa); Write_Data(SEG_TABday%10); if(N=4) moth+; if(moth
19、=13)moth=1; Write_Comm(0xc6); Write_Data(SEG_TABmoth/10); Write_Comm(0xc7); Write_Data(SEG_TABmoth%10); if(N=5) year+; if(year=51)year=0; Write_Comm(0xc3); Write_Data(SEG_TAByear/10); Write_Comm(0xc4); Write_Data(SEG_TAByear%10); if(N=6)week+; if(week=8) week=1; Write_Comm(0xcc); Write_Data(SEG_TABy
20、ear/10); while(S4=0); if(S5=0)/時間調整-減 delay1(10); if(S5=0) if(N=1) min-;if(min<0) min=59; Write_Comm(0x84); Write_Data(SEG_TABmin/10); Write_Comm(0x85); Write_Data(SEG_TABmin%10); if(N=2) hour-;if(hour<0)hour=23; Write_Comm(0x81); Write_Data(SEG_TABhour/10); Write_Comm(0x82); Write_Data(SEG_TA
21、Bhour%10); if(N=3) day-; if(moth=2&&(year%4=0)&&day<1)day=29; if(moth=2&&(year%4!=0)&&day<1)day=28; if(moth=4|moth=6|moth=9|moth=11)&&day<1)day=30; if(day<1)day=31; Write_Comm(0xC9); Write_Data(SEG_TABday/10); Write_Comm(0xCa); Write_Data(SEG_TABda
22、y%10); if(N=4) moth-; if(moth=0)moth=12; Write_Comm(0xc6); Write_Data(SEG_TABmoth/10); Write_Comm(0xc7); Write_Data(SEG_TABmoth%10); if(N=5) year-; if(year<0)year=50; Write_Comm(0xc3); Write_Data(SEG_TAByear/10); Write_Comm(0xc4); Write_Data(SEG_TAByear%10); if(N=6) week-; if(week=0) week=7; Writ
23、e_Comm(0xcc); Write_Data(SEG_TABweek); while(S5=0); /*/void IsrTimer0(void) interrupt 1 using 1 /定時器0中斷服務程序static unsigned char count = 0;/定義靜態(tài)變量countTR0 = 0; /時間誤差調整 TL0 += (_TH0_TL0_ + 9) % 256; TH0 += (_TH0_TL0_ + 9) / 256 + (char)CY; TR0 = 1;count+;if(count = M)/1秒種時間到count = 0;sec+;if(sec = 60)
24、/1分鐘時間到min+;sec = 0;if(min = 60)/1小時時間到hour+;min = 0;if(hour = 24)/24小時時間到 day+; week+;hour = 0;min = 0;sec = 0;if(week=8) week=1; if(moth=2&&(year%4=0)&&day=30)|(moth=2&&(year%4!=0)&&day=29)|(moth=4|moth=6|moth=9|moth=11)&&day=31)|(day=32) /一個月到 moth+; day=1; if(moth=13) /一年到 year+; moth=1; Write_Comm(0x81); /時間顯示 Write_Data(SEG_TABhour/10); Write_Comm(0x82); Write_Data(SEG_TABhour%10); Write_Comm(0x83); Write_Data(':'); Write_Com
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國陽極磷銅球行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球手持式激光焊接機冷水機行業(yè)調研及趨勢分析報告
- 2025-2030全球把握膠帶行業(yè)調研及趨勢分析報告
- 2025至2031年中國下水褲子行業(yè)投資前景及策略咨詢研究報告
- 2025至2030年中國鍍金嗩吶數據監(jiān)測研究報告
- 二零二五年度小規(guī)格紙張印刷服務合同3篇
- 2025至2030年中國白瓦楞盒數據監(jiān)測研究報告
- 2025至2030年中國水冷型發(fā)動機數據監(jiān)測研究報告
- 二零二五版手機游戲推廣代理服務合同2篇
- 2024網絡安全防護服務委托合同
- 第三單元名著導讀《經典常談》知識清單 統(tǒng)編版語文八年級下冊
- 第十七章-阿法芙·I·梅勒斯的轉變理論
- 焊接機器人在汽車制造中應用案例分析報告
- 合成生物學在生物技術中的應用
- 中醫(yī)門診病歷
- 廣西華銀鋁業(yè)財務分析報告
- 無違法犯罪記錄證明申請表(個人)
- 大學生勞動教育PPT完整全套教學課件
- 繼電保護原理應用及配置課件
- 《殺死一只知更鳥》讀書分享PPT
- 蓋洛普Q12解讀和實施完整版
評論
0/150
提交評論