版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 單片機(jī)原理及應(yīng)用 課程設(shè)計(jì)</p><p><b> 姓名 : </b></p><p><b> 學(xué)號(hào) : </b></p><p><b> 班級(jí) : </b></p&g
2、t;<p><b> 電子時(shí)鐘設(shè)計(jì)</b></p><p><b> 功能要求:</b></p><p> 時(shí)鐘計(jì)時(shí)器要求用單片機(jī)及16位LCD數(shù)碼顯示時(shí)、分、秒,以24小時(shí)計(jì)時(shí)方式運(yùn)行,使用按鍵開(kāi)關(guān)可以實(shí)現(xiàn)時(shí)、分、秒調(diào)整。</p><p><b> 方案論證:</b></
3、p><p> 為實(shí)現(xiàn)LCD顯示器的數(shù)字顯示,系統(tǒng)沒(méi)有其他復(fù)雜的處理任務(wù),所以采用動(dòng)態(tài)掃描法實(shí)現(xiàn)LCD的顯示。單片機(jī)采用AT89S52系列,這種單片機(jī)有足夠的空余硬件資源,可以實(shí)現(xiàn)其他的擴(kuò)展功能。電子時(shí)鐘系統(tǒng)的總體設(shè)計(jì)框圖如下:</p><p> 時(shí)鐘系統(tǒng)的總體設(shè)計(jì)框圖</p><p> 3.系統(tǒng)硬件電路的設(shè)計(jì):</p><p> 電子時(shí)鐘
4、的硬件電路原理圖、PCB圖、3D電路板圖和Proteus仿真電路圖如下圖所示,該電路采用AT89S52單片機(jī)最小化應(yīng)用設(shè)計(jì),采用LCD液晶顯示器;P0口輸出段碼數(shù)據(jù),P2.0~P2.2做掃描輸出,P1.0,P1.1和P1.2口接3個(gè)按鈕開(kāi)關(guān),用于調(diào)試及功能設(shè)計(jì);采用12MHz晶振,可提高秒計(jì)時(shí)的精確性;PCB電路板布線規(guī)則為線粗:0.5mm,有效間距:0.3mm,采用底面布線。</p><p><b>
5、 時(shí)鐘電路原理圖</b></p><p><b> PCB圖</b></p><p><b> 3D電路版圖</b></p><p> 4.系統(tǒng)程序的設(shè)計(jì):</p><p> 主程序中計(jì)時(shí)采用定時(shí)器T0中斷完成,秒表使用定時(shí)器T1完成,主程序循環(huán)調(diào)用顯示子程序和查鍵子程序,當(dāng)端
6、口有開(kāi)關(guān)按下時(shí),轉(zhuǎn)入相應(yīng)功能子程序;時(shí)間顯示子程序顯示每次顯示28個(gè)內(nèi)存單元的字符和十進(jìn)制BCD碼數(shù)據(jù),首地址在調(diào)用顯示子程序時(shí)先指定。</p><p><b> 5.軟、硬件調(diào)試:</b></p><p> 軟件調(diào)試在Kiel C51編譯器下進(jìn)行,最后可結(jié)合硬件實(shí)時(shí)調(diào)試;硬件調(diào)試可結(jié)合示波器測(cè)試晶振及P0、P2端口的波形情況進(jìn)行綜合硬件測(cè)試分析。</p&g
7、t;<p> 6. 單片機(jī)源程序:</p><p> ;*************C文件程序**************</p><p> #include "reg51.h"</p><p> #include "clock.h"</p><p><b> main(
8、)</b></p><p><b> {</b></p><p> lcdinit();</p><p> uartint();</p><p> t0_init();</p><p><b> while(1)</b></p><p
9、> { keyscan();</p><p> FloatToASCII();</p><p> display();</p><p><b> }</b></p><p><b> }</b></p><p> ;***************H文件程序
10、******************</p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> uchar aa[]={"time:16-37-00"};</p><p> uchar bb[]={"D
11、ate:2009-11-05"};</p><p> uint tim=0;</p><p> uint sec=58;</p><p> uint min=59;</p><p> uint hour=23;</p><p> uint year=2009;</p><p>
12、; uint month=11;</p><p> uint day=5;</p><p> uint addr;</p><p> sbit rs=P2^0;</p><p> sbit rw=P2^1;</p><p> sbit en=P2^2;</p><p> sbit
13、key0=P1^0; //調(diào)整位切換</p><p> sbit key1=P1^1; //加控制</p><p> sbit key2=P1^2; //減控制</p><p> sbit key3=P1^3; //顯示模式轉(zhuǎn)換</p><p> uint mode=1; //mode=1為時(shí)鐘顯示,mode=2 為計(jì)時(shí)
14、顯示</p><p> uint station=0; //mode=1:station=1為時(shí)調(diào)整,station=2為分調(diào)整,station=3為秒調(diào)整,station=4為年調(diào)整,station=5為月調(diào)整,station=6為日調(diào)整</p><p> void wrcommand(uchar dat);</p><p> void wrdata(uc
15、har dat);</p><p> void delay(uint dat);</p><p> void lcd_string(uchar *p,char flag);</p><p> void wrcommand (uchar dat)</p><p><b> {</b></p><
16、p> delay(300);</p><p><b> rs=0;</b></p><p><b> rw=0;</b></p><p><b> en=1;</b></p><p><b> P0=dat;</b></p>
17、<p><b> en=0;</b></p><p><b> }</b></p><p> void wrdata(uchar dat)</p><p><b> {</b></p><p> delay(300);</p><p>
18、;<b> rs=1;</b></p><p><b> rw=0;</b></p><p><b> en=1;</b></p><p><b> P0=dat;</b></p><p><b> en=0;</b><
19、;/p><p><b> }</b></p><p> void delay(uint dat)</p><p><b> {</b></p><p> while(dat--);</p><p><b> }</b></p><
20、;p> void lcdinit()</p><p> { wrcommand(0x01);</p><p> wrcommand(0x38);</p><p> wrcommand(0x06);</p><p> wrcommand(0x0c);</p><p><b> }</b
21、></p><p> void lcd_string(uchar *p,char flag)</p><p> { if(flag==1)</p><p> { addr=0x80;</p><p> while(*p!='\0')</p><p><b> {<
22、/b></p><p> wrcommand(addr);</p><p> wrdata(*p);</p><p><b> addr++;</b></p><p><b> p++;</b></p><p><b> }</b><
23、;/p><p><b> }</b></p><p> if(flag==2)</p><p><b> {</b></p><p> addr=0xc0;</p><p> while(*p!='\0')</p><p> {
24、 wrcommand(addr);</p><p> wrdata(*p);</p><p><b> addr++;</b></p><p><b> p++;</b></p><p><b> }</b></p><p><b>
25、 }</b></p><p><b> }</b></p><p> void t0_init(void)</p><p><b> {</b></p><p> TMOD=0x01;</p><p><b> ET0=1;</b>
26、;</p><p><b> TH0=0X3C;</b></p><p><b> TL0=0XB0;</b></p><p><b> TR0=1;</b></p><p><b> EA=1;</b></p><p>&
27、lt;b> }</b></p><p> void t0(void) interrupt 1 using 2</p><p> { tim=tim+1;</p><p> if(tim==20)</p><p><b> {tim=0;</b></p><p>
28、sec=sec+1;</p><p> if(sec==60)</p><p><b> {sec=0;</b></p><p> min=min+1;</p><p> if(min==60)</p><p><b> {min=0;</b></p>
29、<p> hour=hour+1;</p><p> if(hour==24)</p><p><b> {hour=0;</b></p><p> day=day+1;</p><p> if(month==2)</p><p> //if(year%1000==0)&
30、lt;/p><p> if(day==29)</p><p><b> {</b></p><p><b> day=1;</b></p><p> month=month+1;</p><p> //if(month==13)</p><p>
31、<b> //{</b></p><p> //month=1;</p><p> //year=year+1;</p><p><b> //}</b></p><p><b> //}</b></p><p> //if(!(y
32、ear%1000==0))</p><p> //if(day==30)</p><p><b> //{</b></p><p><b> //day=1;</b></p><p> //month=month+1;</p><p> //if(month==1
33、3)</p><p> //{//month=1;</p><p> //year=year+1;</p><p><b> //}</b></p><p><b> }</b></p><p><b> //e
34、lse</b></p><p> if(month==4||month==6||month==9||month==11)</p><p> if(day==31)</p><p><b> {</b></p><p><b> day=1;</b></p><
35、p> month=month+1;</p><p> if(month==13)</p><p><b> {</b></p><p><b> month=1;</b></p><p> year=year+1;</p><p><b> }&l
36、t;/b></p><p><b> }</b></p><p><b> //else</b></p><p> if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)</p><p>
37、if(day==32)</p><p><b> {</b></p><p><b> day=1;</b></p><p> month=month+1;</p><p> if(month==13)</p><p> {month=1;</p>
38、<p> year=year+1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><
39、b> }</b></p><p><b> }</b></p><p><b> TH0=0X3C;</b></p><p><b> TL0=0XB0;</b></p><p><b> }</b></p>&l
40、t;p> void display()</p><p> { lcd_string(aa,1);</p><p> lcd_string(bb,2);</p><p><b> }</b></p><p> void uartint()</p><p> { SCON =
41、 0x50; //串口方式1,允許接收</p><p> TMOD = 0x20; //定時(shí)器1 定時(shí)方式2</p><p> TH1 = 0xE8; //11.0592MHz 1200 波特率</p><p> TL1 = 0xE8;</p><p><b> TI = 1;</b></p>&l
42、t;p><b> TR1 = 1;</b></p><p><b> }</b></p><p> void FloatToASCII()</p><p> { aa[0]='T';</p><p> aa[1]='i';</p>&l
43、t;p> aa[2]='m';</p><p> aa[3]='e';</p><p> aa[4]=':';</p><p> aa[5]=hour/10+'0';</p><p> aa[6]=hour%10+'0';</p>&
44、lt;p> aa[7]=':';</p><p> aa[8]=min/10+'0';</p><p> aa[9]=min%10+'0';</p><p> aa[10]=':';</p><p> aa[11]=sec/10+'0';</
45、p><p> aa[12]=sec%10+'0';</p><p> bb[0]='D';</p><p> bb[1]='a';</p><p> bb[2]='t';</p><p> bb[3]='e';</p>
46、<p> bb[4]=':';</p><p> bb[5]=year/1000+'0';</p><p> bb[6]=year%1000/100+'0';</p><p> bb[7]=year%100/10+'0';</p><p> bb[8]=yea
47、r%10+'0';</p><p> bb[9]='/';</p><p> bb[10]=month/10+'0';</p><p> bb[11]=month%10+'0';</p><p> bb[12]='/';</p><p&
48、gt; bb[13]=day/10+'0';</p><p> bb[14]=day%10+'0';</p><p><b> }</b></p><p> void keyscan()</p><p> { if(key0==0)</p><p>
49、 {delay(50);</p><p> if(key0==0)</p><p> {station++;</p><p><b> TR0=0;</b></p><p><b> }</b></p><p> if(station==7)</p>
50、<p> {station=0;</p><p><b> TR0=1;</b></p><p><b> }</b></p><p> while(key0==0);</p><p><b> }</b></p><p>
51、if(key1==0)</p><p> { delay(50);</p><p> if(key1==0)</p><p> if(mode==1)</p><p> switch(station)</p><p><b> {</b></p><p> c
52、ase 1:hour++;</p><p> if(hour==24)</p><p><b> hour=0;</b></p><p><b> break;</b></p><p> case 2:min++;</p><p> if(min==60)</
53、p><p><b> min=0;</b></p><p><b> break;</b></p><p> case 3:sec++;</p><p> if(sec==60)</p><p><b> sec=0;</b></p>
54、<p><b> break;</b></p><p> case 4:year++;</p><p><b> break;</b></p><p> case 5:month++;</p><p> if(month==13)</p><p><
55、;b> month=1;</b></p><p><b> break;</b></p><p> case 6:day++;</p><p> if(day==32)</p><p><b> day=1;</b></p><p><b&g
56、t; break;</b></p><p> default:break;</p><p><b> }</b></p><p><b> }</b></p><p> if(key2==0)</p><p> { delay(300);</p
57、><p> if(key2==0)</p><p> if(mode==1)</p><p> switch(station)</p><p> { case 1:if(hour==0)</p><p><b> hour=23;</b></p><p><b
58、> else</b></p><p><b> hour--;</b></p><p><b> break;</b></p><p> case 2:if(min==0)</p><p><b> min=59;</b></p>&l
59、t;p><b> else</b></p><p><b> min--;</b></p><p><b> break;</b></p><p> case 3:if(sec==0)</p><p><b> sec=59;</b><
60、;/p><p><b> else </b></p><p><b> sec--;</b></p><p><b> break;</b></p><p> case 4:year--;</p><p><b> break;&l
61、t;/b></p><p> case 5:month--;</p><p> if(month==0)</p><p><b> month=12;</b></p><p><b> break;</b></p><p> case 6:day--;<
62、/p><p> if(day==0)</p><p><b> day=31;</b></p><p><b> break;</b></p><p> default:break;</p><p><b> }</b></p>&l
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)原理及應(yīng)用課程設(shè)計(jì)電子時(shí)鐘設(shè)計(jì)
- 《單片機(jī)原理及應(yīng)用》電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)--電子時(shí)鐘
- 單片機(jī)原理及應(yīng)用課程設(shè)計(jì)--基于單片機(jī)的電子時(shí)鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-單片機(jī)課程設(shè)計(jì)---電子時(shí)鐘
- 電子時(shí)鐘單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)——電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)——電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)--電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)-電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)--電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)--電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)----電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)-電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)--電子時(shí)鐘設(shè)計(jì)
- 單片機(jī)應(yīng)用電子時(shí)鐘課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)--單片機(jī)模擬電子時(shí)鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--- 單片機(jī)電子時(shí)鐘設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論