版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
南華大學計算機技術綜合課程設計報告學院:湘南學院題目:單片機LCD時鐘顯示和溫度丈量學生姓名:專業(yè)班級:指導老師:教研室主任:2012年6月29日一、歸納:本次設計的LCD時鐘顯示和溫度丈量系統(tǒng)是由中央控制器、溫度檢測器、時鐘系統(tǒng)、顯示器及鍵盤部分組成??刂破鞑杉{單片機STC89C51RC,溫度檢測部分采納DS18B20溫度傳感器,時鐘系統(tǒng)用時鐘芯片DS1302,用LCD液晶1602作為顯示器,用蜂鳴器組成鬧鈴模塊。單片機經過時鐘芯片
DS1302獲取時間數據,對數據辦理后顯示時間;溫度傳感器
DS18B20收集溫度信號送該給單片機辦理;單片機再把時間數據和溫度數據送液晶顯示器1602顯示;鍵盤是用來調整時間的。二、方案設計及方案論證時鐘顯示和溫度丈量的整體設計思路依據系統(tǒng)的設計功能要求,本時鐘顯示和溫度丈量系統(tǒng)的設計一定采納單片機軟件系統(tǒng)實現,用單片機的自動控制能力配合按鍵控制,來控制時鐘、溫度的調整及顯示。獲取時鐘顯示和溫度丈量數據信息,單片機對其進行一系列的辦理,最后經過液晶顯示出來。時鐘顯示和溫度丈量系統(tǒng)方案論證時鐘系統(tǒng)方案選擇方案1:經過單片機內部的準時器/計數器,用軟件實現,直接用單片機的準時器編程以實現時鐘;方案2:用特意的時鐘芯片實現時鐘的記時,再把時間數據送入單片機,由單片機控制顯示。固然用軟件實現時鐘硬件線路簡單,但是程序運轉的每一步都需要時間,多一步或少一步程序都會影響記時的正確度,瞄準時器準時也不是十分正確,時鐘精度很低,對于我們實現所需要的功能造成軟件編程特別復雜。用專用時鐘芯片硬件成真相對較高,但它的精度很高,軟件編程很簡單。綜上所述,選擇方案2。本次設計采納擁有涓細電流充電能力的低功耗實時時鐘電路DS1302。它可以對年、月、日、周日、時、分、秒進行計時,且擁有閏年補償等多種功能。它采納主電源和備用電源雙電源供電。它的工作電壓范圍~,在時,小于300nA。它內部含有31個字節(jié)的靜態(tài)RAM,可供給用戶接見。?DS1302可以對年、月、日、周日、時、分、秒進行計時,可以達到我們設計的基本的要求。內部的寄存器為我們調時,鬧鐘準時供給了寄存空間。備用用電源也實現了當系統(tǒng)斷電后,時鐘依舊可以保持。并且它是串行接口,與單片機通訊所需要的接口少。顯示系統(tǒng)的方案比較方案1:用數碼管或LED顯示。方案2:用液晶1602顯示。方案3:用液晶12864顯示。時鐘和溫度的顯示可以用數碼管或LED,并且價格低價。但是數碼管的只好顯示簡單的設計的系統(tǒng),與我們設計要求也不吻合。有很多東西需要顯示,仍是用顯示功能更好的液晶顯示器比較好,它能顯示更多的數據,用12864顯示略想復雜,用1602液晶顯示可以完整知足本次設計的數據顯示要求。溫度系統(tǒng)方案選擇方案1:用熱敏電阻等測溫元件測出電壓,再變換成對應的溫度。需要比很多的外面元件支持,且硬件電路復雜,制作成真相對較高。方案2:用DS18B20直接測溫。DS18B20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,它能直接讀出被測溫度,并且可依據實質要求經過簡單的編程實現9~12位的數字值讀數方式。經比較,我們選擇方案2。溫度實現只好經過外面的溫度傳感器來實現。經上網查閱,DS18b20體積小,只有3只腳,電路接法簡單。精度為°C,也吻合我們設計的要求。DS18B20也是我們平時使用的型號,所以溫度傳感器用DS18B20。鍵盤控制方案選擇方案1:購買集成鍵盤,采納矩陣形式連接。方案2:購買單個復位開關做成鍵盤。固然集成鍵盤雅觀,與單片機的接口少,但是它的成本比較高。單片機的IO口對于我們的設計綽綽有余。平時我們采納價格低價單個復位開關做成鍵盤。時鐘顯示和溫度丈量系統(tǒng)整體設計初步確立設計系統(tǒng)由單片機主控模塊、時鐘模塊、測溫模塊、鬧鈴模塊、顯示模塊、鍵盤接口模塊共6個模塊組成,電路系統(tǒng)框圖以下列圖所示。1602DS18B20主顯示系統(tǒng)溫度收集系統(tǒng)控器蜂鳴器件鬧鈴系統(tǒng)DS1320STC89C51時間收集系統(tǒng)鍵盤控制系統(tǒng)圖1:電路系統(tǒng)框圖三、硬件電路單元設計1、單片機最小系統(tǒng)設計復位電路:復位電路有兩種方式:上電復位和按鈕復位,我們主要用按鈕復位方式。以下列圖所示:圖2:復位電路晶振電路晶振電路采用條件:晶振12M,電容20pF到30pF,本電路采用20pF。晶振電路原理以下列圖:圖3:晶振電路2、時鐘系統(tǒng)設計DS1302時鐘電路晶振采納,原理圖以下:圖4:基于ds1302時鐘系統(tǒng)設計電路3、溫度系統(tǒng)設計DS18B20溫度傳感DQ端接單片機口,電路原理圖以下:圖5:基于DS18b20溫度系統(tǒng)設計電路4、液晶顯示系統(tǒng)設計1602液晶顯示電路由1K電阻和10K的精美電阻組成,控制端接、、口,數據端接P2口,電路圖以下:圖6:液晶1602顯示電路把15腳的10K電阻改成1K電阻5、蜂鳴器系統(tǒng)設計蜂鳴器鬧鈴電路由蜂鳴器跟1K限流電阻組成,電路圖以下:圖7:蜂鳴器電路6、電源模塊本系統(tǒng)采納USB供電,用發(fā)光二極管顯示通電情況,電源電源電路以下:圖8:電源電路7、時間調治模塊本系統(tǒng)采納3個按鍵調治時間。S1是菜單鍵,選綱要調治的位;S2按一下表示加一;S3按一下表示減一。電路以下:圖9:時鐘調治電路四、軟件調試1、程序流程圖以下:圖10:程序流程圖2、程序見附錄五、硬件調試1、原理圖以下:圖11:總原理圖2、PCB圖以下:圖12:PCB圖此中紅色部分為跳線;3、實物測試板子制作完成后上電測試發(fā)現電源燈沒有顯示,用萬用表丈量此后發(fā)現精美電阻接線錯誤,致使VCC與GND直接連通。修正此后發(fā)現電源指示燈仍是沒有亮,丈量USB兩端電壓為,卸掉USB口,插上排針用杜邦線連接單片機的VCC和GND此后,電源燈可以點亮,液晶可以驅動,但是亮度不夠。丈量液晶兩端的電壓發(fā)現只有,用導線將液晶背光的VCC直接接上電源VCC后,液晶亮度正常。將程序下載此后經過幾次調試和更正,最后實現了想要達到的收效。六、總結與領悟在開始本次課程設計前花銷了十多天的時間認真學習了單片機,經過書籍和視頻的學習,對單片機有了進一步的掌握并學會C51編程的一些方法。這對于完成本次課程設計供給了很大的幫助。此后次的課程設計中,我真真切正的意識到,在寫程序時,邏輯思想要清楚,要有耐心。同時要奇妙的利用C語言的可移植性,這對寫程序有很大的幫助。參照文件:1.郭天祥單片機學習板配套資料2.《51單片機C語言教程》郭天祥主編電子工業(yè)第一版社3.《C語言程序設計》尹業(yè)安,白燕主編國防科技大學第一版社4.《單片機原理與應用及C51程序設計》謝維成楊加國主編清華大學第一版社程序以下:#include<>#include<>#defineucharunsignedchar#defineuintunsignedint#defineLCDIOP2sbitDQ=P1^3;write_com(0x01);write_com(0x80);//設置初始化數據指針,是在讀指令的操作里進行的delay(5);write_com(0x80);//初始化顯示時間(tabletable1中的內容)for(num=0;num<15;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<15;num++){write_date(table1[num]);delay(5);}}voidWrite1302(uchardat)
//寫
8bit
數據{uchari;SCLK=0;
//拉低
SCLK,為脈沖上升沿寫入數據做好準備delay1(2);for(i=0;i<8;i++)
//略微等待,使硬件做好準備//連續(xù)寫8個二進制位數據{DATA=dat&0x01;
//拿出
dat
的第
0位數據寫入
1302delay(2);SCLK=1;
//略微等待,使硬件做好準備//上升沿寫入數據delay1(2);SCLK=0;dat>>=1;
//略微等待,使硬件做好準備//重新拉低SCLK,形成脈沖//將dat的各數據位右移1位,準備寫入下一個數據位}}voidWriteSet1302(ucharCmd,uchardat)//向cmd相應地址中寫入一個字節(jié)的數據{RST=0;//嚴禁數據傳達SCLK=0;//保證寫數居前SCLK被拉低RST=1;//啟動數據傳輸delay1(2);//略微等待,使硬件做好準備Write1302(Cmd);//寫入命令字Write1302(dat);//寫數據SCLK=1;//將時鐘電平置于已知狀態(tài)RST=0;//嚴禁數據傳達}ucharRead1302(void)//讀8bit數據{uchari,dat;delay(2);//略微等待,使硬件做好準備for(i=0;i<8;i++)//連續(xù)讀8個二進制位數據{dat>>=1;
//將
dat
的各數據位右移
1位,由于先讀出的是字節(jié)的最低位if(DATA==1)dat|=0x80;SCLK=1;
//若是讀出的數據是1//將1拿出,寫在dat的最高位//將SCLK置于高電平,為降落沿讀出delay1(2);SCLK=0;
//略微等待//拉低
SCLK,形成脈沖降落沿delay1(2);
//略微等待}returndat;
//將讀出的數據返回}ucharReadSet1302(ucharCmd)//從cmd相應地址中讀一個字節(jié)的數據{uchardat;RST=0;SCLK=0;
//拉低RST//保證寫數居前
SCLK
被拉低RST=1;
//啟動數據傳輸Write1302(Cmd);
//寫入命令字dat=Read1302( );SCLK=1;
//讀出數據//將時鐘電平置于已知狀態(tài)RST=0;
//嚴禁數據傳達returndat;
//將讀出的數據返回}voidInit_DS1302(void){WriteSet1302(0x8E,0x00);//依據寫狀態(tài)寄存器命令字,寫入不保護指令WriteSet1302(0x80,((0/10)<<4|(0%10)));//依據寫秒寄存器命令字,寫入秒的初始值WriteSet1302(0x82,((45/10)<<4|(45%10)));//依據寫分寄存器命令字,寫入分的初始值WriteSet1302(0x84,((8/10)<<4|(8%10)));//依據寫小時寄存器命令字,寫入小時的初始值WriteSet1302(0x86,((29/10)<<4|(29%10)));//依據寫日寄存器命令字,寫入日的初始值WriteSet1302(0x88,((6/10)<<4|(6%10)));//依據寫月寄存器命令字,寫入月的初始值WriteSet1302(0x8c,((12/10)<<4|(12%10)));//依據寫年寄存器命令字,寫入年的初始值WriteSet1302(0x8a,((1/10)<<4|(1%10)));//依據寫禮拜寄存器命令字,寫入禮拜的初始值}voidDisplaySecond(ucharx){
//顯示秒uchari,j;i=x/10;j=x%10;write_com(0xc7);write_date(0x30+i);write_date(0x30+j);}voidDisplayMinute(ucharx){
//顯示分uchari,j;i=x/10;j=x%10;write_com(0xc4);write_date(0x30+i);write_date(0x30+j);}voidDisplayHour(ucharx)
//顯示小時{uchari,j;i=x/10;j=x%10;write_com(0xc1);write_date(0x30+i);write_date(0x30+j);}voidDisplayDay(ucharx)//顯示日期、天{uchari,j;i=x/10;j=x%10;write_com(0x89);write_date(0x30+i);write_date(0x30+j);}voidDisplayMonth(ucharx)//顯示日期、月{uchari,j;i=x/10;j=x%10;write_com(0x86);write_date(0x30+i);write_date(0x30+j);}voidDisplayYear(ucharx)//顯示日期、年{uchari,j;i=x/10;j=x%10;write_com(0x83);write_date(0x30+i);write_date(0x30+j);}voidDisplayWeek(ucharx)//顯示禮拜{uchari;x=x*3;write_com(0x8c);for(i=0;i<3;i++){write_date(table2[x]);x++;}}voidread_date(void){ReadValue=ReadSet1302(0x81);second=((ReadValue&0x70)>>4)*10
+(ReadValue&0x0F);
//從DS1302讀取時間秒ReadValue=ReadSet1302(0x83);minute=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);
//從DS1302讀取時間分ReadValue=ReadSet1302(0x85);hour=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);
//從
DS1302讀取時間小時ReadValue=ReadSet1302(0x87);day=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);
//從
DS1302讀取日期日ReadValue=ReadSet1302(0x89);month=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);DS1302讀取日期月ReadValue=ReadSet1302(0x8d);year=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);
//從
//從DS1302讀取日期年ReadValue=ReadSet1302(0x8b);week=ReadValue&0x07;
//從
DS1302
讀禮拜DisplaySecond(second);
//顯示秒、分、小時、天、月、年、禮拜DisplayMinute(minute);DisplayHour(hour);DisplayDay(day);DisplayMonth(month);DisplayYear(year);DisplayWeek(week);}voidturn_val(charnewval,ucharflag,ucharnewaddr,uchars1num)//刷新時間(將改變的時間顯示到LCD上){newval=ReadSet1302(newaddr);//讀取當前時間newval=((newval&0x70)>>4)*10+(newval&0x0f);//將bcd碼變換成十進制if(flag)//判斷是加一仍是減一{newval++;switch(s1num){case1:if(newval>99)newval=0;DisplayYear(newval);break;case2:if(newval>12)newval=1;DisplayMonth(newval);break;case3:if(newval>31)newval=1;DisplayDay(newval);break;case4:if(newval>6)newval=0;DisplayWeek(newval);break;case5:if(newval>23)newval=0;DisplayHour(newval);break;case6:if(newval>59)newval=0;DisplayMinute(newval);break;case7:if(newval>59)newval=0;DisplaySecond(newval);break;default:break;}}else{newval--;switch(s1num){case1:if(newval==0)newval=99;DisplayYear(newval);break;case2:if(newval==0)newval=12;DisplayMonth(newval);break;case3:if(newval==0)newval=31;DisplayDay(newval);break;case4:if(newval<0)newval=6;DisplayWeek(newval);break;case5:if(newval<0)newval=23;DisplayHour(newval);break;case6:if(newval<0)newval=59;DisplayMinute(newval);break;case7:if(newval<0)newval=59;DisplaySecond(newval);break;default:break;}}WriteSet1302((newaddr-1),((newval/10)<<4)|(newval%10));//將新數據寫入寄存器}voidkey_scan(void)
//鍵盤掃描程序{ucharmiao,s1num=0;if(menu==0){delay(5);if(menu==0){while(!menu);s1num++;while(1){if(menu==0){delay(5);if(menu==0){while(!menu);s1num++;}}rd=0;miao=ReadSet1302(0x81);second=miao;WriteSet1302(0x80,miao|0x80);write_com(0x0f);//光標閃射if(s1num==1){year=ReadSet1302(0x8d);write_com(0x80+4);//年光標if(add==0){delay(3);if(add==0){while(!add);turn_val(year,1,0x8d,1);}}if(dec==0){delay(3);if(dec==0){while(!dec);turn_val(year,0,0x8d,1);}}}if(s1num==2){month=ReadSet1302(0x89);write_com(0x80+7);//月光標if(add==0){delay(3);if(add==0){while(!add);turn_val(month,1,0x89,2);}}if(dec==0){delay(3);if(dec==0){while(!dec);turn_val(month,0,0x89,2);}}}if(s1num==3){day=ReadSet1302(0x87);write_com(0x80+10);//日光標if(add==0){delay(3);if(add==0){while(!add);turn_val(day,1,0x87,3);}}if(dec==0){delay(3);if(dec==0){while(!dec);turn_val(day,0,0x87,3);//寫入日寄存器}}}if(s1num==4){week=ReadSet1302(0x8b);write_com(0x80+14);//禮拜光標if(add==0){delay(3);if(add==0){while(!add);turn_val(week,1,0x8b,4);}}if(dec==0){delay(3);if(dec==0){while(!dec);turn_val(week,0,0x8b,4);}}}if(s1num==5){hour=ReadSet1302(0x85);write_com(0x80+0x40+2);//歲月標if(add==0){delay(3);if(add==0){while(!add);turn_val(hour,1,0x85,5);}}if(dec==0){delay(3);if(dec==0){while(!dec);turn_val(hour,0,0x85,5);}}}if(s1num==6)//調時間分{minute=ReadSet1302(0x83);write_com(0x80+0x40+5);if(add==0){delay(5);if(add==0){while(!add);turn_val(minute,1,0x83,6);//寫入分寄存器}}if(dec==0){delay(3);if(dec==0){while(!dec);turn_val(minute,0,0x83,6);//寫入分寄存器}}}if(s1num==7)//調時間秒{second=ReadSet1302(0x81);write_com(0x80+0x40+8);//秒光標if(add==0){delay(3);if(add==0){while(!add);if(second==0x60)second=0x00;turn_val(second,1,0x81,7);}}if(dec==0){delay(3);if(dec==0){while(!dec);turn_val(second,0,0x81,7);}}}if(s1num==8){miao=ReadSet1302(0x81);second=miao;WriteSet1302(0x80,second&0x7f);s1num=0;//s1num清零write_com(0x0c);//光標不閃耀break;}}}}}voiddelay_18B20(unsignedinti)//延時1微秒{while(i--);}voidds1820rst( )//ds1820復位{unsignedcharx=0;DQ=1;
//DQ
復位delay_18B20(4);
//延時DQ=0;
//DQ
拉低delay_18B20(100);//精確延時大于480usDQ=1;
//拉高delay_18B20(40);}uchards1820rd( )///讀數據{unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//給脈沖信號dat>>=1;DQ=1;//給脈沖信號if(DQ)dat|=0x80;delay_18B20(10);}return(dat);}voidds1820wr(ucharwdata)//寫數據{unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=wdata&0x01;delay_18B20(10);DQ=1;wdata>>=1;}}read_temp( )//讀取溫度值并變換{uchara,b;ds1820rst( );ds1820wr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 薪資差距與生活品質分析-洞察分析
- 網絡通信庫改進-洞察分析
- 藥物牙周治療研究-洞察分析
- 《客情關系維護》課件
- 2024年株洲市婦幼保健院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2024年柘城縣中醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 具體項目合作協(xié)議書(2篇)
- 《級安全教育內容》課件
- 2024年05月吉林韓亞銀行長春分行社會招考筆試歷年參考題庫附帶答案詳解
- 2024年陜教新版九年級歷史下冊階段測試試卷
- 內科護理學消化系統(tǒng)試習題及答案
- 用人單位職業(yè)病危害現狀評價技術導則
- 中建一局質量考核評價辦法
- 民辦非企業(yè)單位會計報表(會民非表010203)
- 口腔頜面系統(tǒng)解剖骨
- 川骨香-川古香手撕鴨配方及制作方法
- 深圳市排水管網維護管理質量
- 變電站二次設計規(guī)范
- 能見度不良時船舶航行須知
- 實習證明、實習證明表(模板)2頁
- 目視化管理實施計劃方案
評論
0/150
提交評論