

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 題目:基于單片機的電子鐘設計 </p><p><b> 摘要</b></p><p> 隨著科技的發(fā)展,單片機的應用正在不斷深入,涉及到日常生活的方方面面。本設計是基于單片機AT89S51為控制核心,以液晶為顯示的數(shù)字時鐘。本數(shù)字時鐘設計
2、的原理相對簡單,所以硬件電路也相對簡單,難點和重點主要放在C語言的編程上,使用到定時器的子程序、延時程序、時分秒的控制程序、液晶模塊和單片機模塊的初始化程序、液晶顯示的程序等,各個函數(shù)交叉調用,配合主程序的運行。</p><p> 關鍵字:LCD1602 AT89S51 定時器</p><p><b> Abstract</b></p><p
3、> With the development of technology, SCM applications are deepening, involving all aspects of daily life. The design is based on the MCU AT89S52 for the control of the core, the liquid crystal display digital clock.
4、 The digital clock design principle is relatively simple, the hardware circuit is relatively simple, difficult, and focused mainly on the C programming language, use the timer subroutine, delay procedures, minutes and se
5、conds of the control program, the LCD module and microcontroller m</p><p> Keywords: LCD1602 AT89S51 timer</p><p><b> 目錄</b></p><p><b> 1 實驗任務1</b></p
6、><p><b> 2 設計方案1</b></p><p> 2.1 硬件設計1</p><p> 2.1.1原理框圖1</p><p> 2.1.2 控制模塊1</p><p> 2.1.3 顯示模塊3</p><p> 2.1.4按鍵電路5</
7、p><p> 2.2 軟件設計5</p><p> 2.2.1基本資源的使用5</p><p> 2.2.2程序設計的基本思路5</p><p> 3 仿真與調試結果 5</p><p><b> 4 心得體會6</b></p><p><b>
8、 附錄7</b></p><p> 附錄1 實物圖及說明7</p><p> 附錄2 程序流程圖9</p><p> 附錄3 程序清單9</p><p><b> 1 實驗任務</b></p><p> 設計一個多功能LCD電子鐘。要求</p><
9、p> ?。?)能顯示年、月、日、星期、時、分、秒;</p><p> ?。?)能對年、月、日、星期、時、分、秒進行預置;</p><p><b> 2 設計方案</b></p><p><b> 2.1 硬件設計</b></p><p><b> 2.1.1原理框圖</b
10、></p><p> 2.1.2 控制模塊</p><p> a. LCD液晶屏顯示電路</p><p><b> b.晶振電路</b></p><p><b> c.復位電路</b></p><p> 2.1.3 顯示模塊</p><p&
11、gt; 1602LCD主要技術參數(shù):</p><p> 顯示容量:16×2個字符</p><p> 芯片工作電壓:4.5—5.5V</p><p> 工作電流:2.0mA(5.0V)</p><p> 模塊最佳工作電壓:5.0V</p><p> 字符尺寸:2.95×4.35(W
12、5;H)mm</p><p><b> 引腳功能說明:</b></p><p> 1602LCD采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如下表所示:</p><p> 第1腳:VSS為地電源。</p><p> 第2腳:VDD接5V正電源。</p><p> 第3
13、腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調整對比度。</p><p> 第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。</p><p> 第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS
14、為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。</p><p> 第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。</p><p> 第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。</p><p> 第15腳:背光源正極。</p><p> 第16腳:背光源負極。</p>
15、;<p> 硬件連接原理圖如下:</p><p><b> 2.1.4按鍵電路</b></p><p> S0設置鬧鐘(按鍵1次設置秒,2次設置分,3次設置時,4次設置星期,5次設置日期,6次設置月份,7次設置年份);</p><p> S1增加一(設置中對所選擇變量加一);</p><p> S
16、2減少一(設置中對所選擇變量減一);</p><p><b> 2.2 軟件設計</b></p><p> 2.2.1基本資源的使用 </p><p> 本次實驗采用了AT89S52型單片機,1602LCD液晶顯示屏。為了實現(xiàn)時鐘,用到了單片機的外部中斷,計時器中斷,及I/O端口。</p><p> 2.2.2程
17、序設計的基本思路</p><p> 主程序包括閏年判定,鍵盤識別控制及液晶屏顯示3個子程序,實現(xiàn)時鐘的顯示,調節(jié)功能。另外,還有延時,初始化等子程序。利用定時器0來控制時間,實現(xiàn)分鐘,小時,年月的計算。</p><p><b> 3 仿真與調試結果</b></p><p> 本實驗采用Keil 4和Protues 聯(lián)合仿真調試</p
18、><p><b> 仿真結果:</b></p><p> 經(jīng)過多次的反復測試與分析,掌握了硬件的設計與分析的能力,對所學的知識得到很大的提高與鞏固。</p><p><b> 最終實現(xiàn)功能:</b></p><p> (1)能顯示陽歷年、月、日、星期、小時、分、秒</p><
19、p> (2)顯示模塊采用LCD液晶顯示,要求能用按鍵調整日期、時間。</p><p><b> 4 心得體會</b></p><p> 本次電子時鐘的實驗課程設計,學習將理論和實踐相結合,對數(shù)字器件及集成電路有較深入的認識,初步掌握綜合運用所學知識分析和設計一般數(shù)字系統(tǒng)的基本方法,增強動手解決實際問題的能力。認識到了自身的許多缺點和不足,初步接觸到了如何將
20、硬件和軟件相連接來實現(xiàn)一定的自動化。在試驗板的焊接過程中,更深地意識到焊接技術的重要性。使我明白現(xiàn)實生活中電子鐘的工作原理,鍛煉了查找資料的能力。同時也了解到了仿真成功后,實物圖連接與仿真圖無誤,還是可能會存在實際電路無法正常工作的情況,使用器件,芯片前應先做好對器件,芯片的了解工作,知道每一引腳的用途,正確的連接方法,焊接前做好準備工作,設計好電路圖,到焊接時可以事半功倍,焊接時也要小心翼翼,最后,也要不斷調試,完善電路。</p
21、><p><b> 附錄 </b></p><p><b> 附錄1實物圖及說明</b></p><p> 說明1:上2圖為上電后,時鐘開始顯示,每進一日,時鐘開始判斷有無月份進一,年份進一等情況,同時實現(xiàn)閏年的判斷。</p><p> 說明2:此時進入時鐘調節(jié)模式,第一次按下調節(jié)時間按鍵后,顯
22、示秒鐘調節(jié),可進行加一減一,之后是分鐘調節(jié),以此類推,時鐘,星期,日,月,年,此圖顯示為月調節(jié)。年份調節(jié)后,返回時鐘顯示,正常顯示時間。</p><p><b> 附錄2 程序流程圖</b></p><p><b> Y</b></p><p><b> N</b></p><
23、;p> .................... ........................... </p><p><b> 附錄3 程序清單</b></p><p> #include<reg52.h></p><p> #define uchar unsigned char</p>&
24、lt;p> #define uint unsigned int</p><p> sbit key0=P2^0; //時間設置</p><p> sbit key1=P2^1; //加一</p><p> sbit key2=P2^2; //減一 </p><p> sbit lcdrw=P2^5
25、;</p><p> sbit lcdrs=P2^6;</p><p> sbit lcden=P2^7;</p><p> uint s,f,m,n,t,shis,shig,fens,feng,mias,miag,</p><p> nian1,nian2,nian3,nian4,yues,yueg,ris,rig,rp;</
26、p><p> int nian,yue,ri,shi,fen,mia,a;</p><p> uchar code tab[]="MonTusWedThuFriSatSun";</p><p> void delay(uint x)//延時函數(shù)</p><p><b> {</b></
27、p><p><b> uint i,j;</b></p><p> for(i=0;i<x;i++)</p><p> for(j=0;j<110;j++);</p><p><b> }</b></p><p> void write_cmd(uchar
28、cmd) //讀命令</p><p><b> {</b></p><p><b> lcdrs=0;</b></p><p><b> P0=cmd;</b></p><p><b> delay(5);</b></p><
29、;p><b> lcden=1;</b></p><p><b> delay(5);</b></p><p><b> lcden=0;</b></p><p><b> }</b></p><p> void write_data(uc
30、har dat) //讀數(shù)據(jù)</p><p><b> {</b></p><p><b> lcdrs=1;</b></p><p><b> P0=dat;</b></p><p><b> delay(5);</b></p>
31、<p><b> lcden=1;</b></p><p><b> delay(5);</b></p><p><b> lcden=0;</b></p><p><b> }</b></p><p> void init()&l
32、t;/p><p><b> {</b></p><p> shi=23;fen59;mia=55; //時間顯示初值</p><p> nian=2014;yue=2;ri=27;</p><p> t=0;f=1;m=0;</p><p> TMOD=0x01;<
33、;/p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p> EA=1;ET0=1;TR0=1;a=0;</p><p><b> lcdrw=0;</b></p><p> write_cmd(0x3
34、8);</p><p> write_cmd(0x0c);</p><p> write_cmd(0x06);</p><p> write_cmd(0x01);</p><p><b> }</b></p><p> void display()//時鐘顯示函數(shù)</p&g
35、t;<p><b> {</b></p><p> write_cmd(0x81);</p><p> nian1=nian/1000;</p><p> nian2=(nian%1000)/100;</p><p> nian3=(nian%100)/10;</p><p&g
36、t; nian4=nian%10;</p><p> yues=yue/10;</p><p> yueg=yue%10;</p><p> ris=ri/10;</p><p> rig=ri%10;</p><p> write_data(nian1+0x30);</p><p>
37、; write_data(nian2+0x30);</p><p> write_data(nian3+0x30);</p><p> write_data(nian4+0x30);</p><p> write_data(0x2d);</p><p> write_data(yues+0x30);</p><p
38、> write_data(yueg+0x30);</p><p> write_data(0x2d);</p><p> write_data(ris+0x30);</p><p> write_data(rig+0x30);</p><p> write_cmd(0x80+0x0c);</p><p>
39、; for(n=a;n<3+a;n++)</p><p><b> {</b></p><p> write_data(tab[n]);</p><p> delay(10);</p><p><b> }</b></p><p> shis=shi/10;
40、</p><p> shig=shi%10;</p><p> fens=fen/10;</p><p> feng=fen%10;</p><p> mias=mia/10;</p><p> miag=mia%10;</p><p> write_cmd(0x80+0x44);&
41、lt;/p><p> write_data(shis+0x30);</p><p> write_data(shig+0x30);</p><p> write_data(0x3a);</p><p> write_data(fens+0x30);</p><p> write_data(feng+0x30);&
42、lt;/p><p> write_data(0x3a);</p><p> write_data(mias+0x30);</p><p> write_data(miag+0x30); </p><p><b> }</b></p><p> void key() //按鍵
43、控制函數(shù)</p><p><b> {</b></p><p><b> if(!key0)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p><b&g
44、t; if(!key0)</b></p><p><b> {</b></p><p> while(!key0);</p><p><b> s++;</b></p><p><b> if(s==1)</b></p><p>&
45、lt;b> {</b></p><p><b> TR0=0;</b></p><p><b> f=0;</b></p><p> display();</p><p> write_cmd(0x80+0x40+0x0b);</p><p>
46、write_cmd(0x0f);</p><p><b> }</b></p><p><b> if(s==2)</b></p><p><b> {</b></p><p> display();</p><p> write_cmd(0x
47、80+0x40+0x08);</p><p><b> }</b></p><p><b> if(s==3)</b></p><p><b> {</b></p><p> display();</p><p> write_cmd(0x80
48、+0x40+0x05);</p><p><b> }</b></p><p><b> if(s==4)</b></p><p><b> {</b></p><p> display();</p><p> write_cmd(0x80+0
49、x0d);</p><p><b> }</b></p><p><b> if(s==5)</b></p><p><b> {</b></p><p> display();</p><p> write_cmd(0x80+0x0a);&l
50、t;/p><p><b> }</b></p><p><b> if(s==6)</b></p><p><b> {</b></p><p> display();</p><p> write_cmd(0x80+0x07);</p>
51、;<p><b> }</b></p><p><b> if(s==7)</b></p><p><b> {</b></p><p> display();</p><p> write_cmd(0x80+0x04);</p><
52、p><b> }</b></p><p><b> if(s==8)</b></p><p><b> {</b></p><p><b> TR0=1;</b></p><p> write_cmd(0x0c);</p>&
53、lt;p> display();</p><p><b> f=1;</b></p><p><b> }</b></p><p><b> if(s==9)</b></p><p><b> s=0;</b></p><
54、;p><b> }</b></p><p><b> }</b></p><p><b> if(!key1)</b></p><p><b> {</b></p><p><b> delay(5);</b><
55、;/p><p><b> if(!key1)</b></p><p><b> {</b></p><p> while(!key1);</p><p><b> if(s!=0)</b></p><p><b> {</b>
56、</p><p><b> if(s==1)</b></p><p><b> {</b></p><p><b> mia++;</b></p><p> if(mia==60)</p><p><b> mia=0;</b&
57、gt;</p><p> display();</p><p> write_cmd(0x80+0x40+0x0b);</p><p><b> }</b></p><p><b> if(s==2)</b></p><p><b> {</b>
58、;</p><p><b> fen++;</b></p><p> if(fen==60)</p><p><b> fen=0;</b></p><p> display();</p><p> write_cmd(0x80+0x40+0x08);</p&
59、gt;<p><b> }</b></p><p><b> if(s==3)</b></p><p><b> {</b></p><p><b> shi++;</b></p><p> if(shi==24)</p>
60、;<p><b> shi=0;</b></p><p> display();</p><p> write_cmd(0x80+0x40+0x05);</p><p><b> }</b></p><p><b> if(s==4)</b></p
61、><p><b> {</b></p><p><b> a=a+3;</b></p><p><b> if(a>18)</b></p><p><b> a=0;</b></p><p> display();<
62、;/p><p> write_cmd(0x80+0x0d);</p><p><b> }</b></p><p><b> if(s==5)</b></p><p><b> {</b></p><p><b> ri++;</b
63、></p><p> if(ri==32)</p><p><b> ri=1;</b></p><p> display();</p><p> write_cmd(0x80+0x0a);</p><p><b> }</b></p><
64、p><b> if(s==6)</b></p><p><b> {</b></p><p><b> yue++;</b></p><p> if(yue==13)</p><p><b> yue=1;</b></p>&
65、lt;p> display();</p><p> write_cmd(0x80+0x07);</p><p><b> }</b></p><p><b> if(s==7)</b></p><p><b> {</b></p><p>
66、;<b> nian++;</b></p><p> if(nian>9999)</p><p><b> nian=0;</b></p><p> display();</p><p> write_cmd(0x80+0x04);</p><p><b
67、> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> if(!key2)</b></p><p>&l
68、t;b> {</b></p><p><b> delay(5);</b></p><p><b> if(!key2)</b></p><p><b> {</b></p><p> while(!key2);</p><p&g
69、t;<b> if(s!=0)</b></p><p><b> {</b></p><p><b> if(s==1)</b></p><p><b> {</b></p><p><b> mia--;</b></
70、p><p><b> if(mia<0)</b></p><p><b> mia=59;</b></p><p> display();</p><p> write_cmd(0x80+0x40+0x0b);</p><p><b> }</b&
71、gt;</p><p><b> if(s==2)</b></p><p><b> {</b></p><p><b> fen--;</b></p><p><b> if(fen<0)</b></p><p>&
72、lt;b> fen=59;</b></p><p> display();</p><p> write_cmd(0x80+0x40+0x08);</p><p><b> }</b></p><p><b> if(s==3)</b></p><p&
73、gt;<b> {</b></p><p><b> shi--;</b></p><p><b> if(shi<0)</b></p><p><b> shi=23;</b></p><p> display();</p>
74、<p> write_cmd(0x80+0x40+0x05);</p><p><b> }</b></p><p><b> if(s==4)</b></p><p><b> {</b></p><p><b> a=a-3;</b&g
75、t;</p><p><b> if(a<0)</b></p><p><b> a=18;</b></p><p> display();</p><p> write_cmd(0x80+0x0d);</p><p><b> }</b>
76、;</p><p><b> if(s==5)</b></p><p><b> {</b></p><p><b> ri--;</b></p><p><b> if(ri<0)</b></p><p><b
77、> ri=31;</b></p><p> display();</p><p> write_cmd(0x80+0x0a);</p><p><b> }</b></p><p><b> if(s==6)</b></p><p><b&g
78、t; {</b></p><p><b> yue--;</b></p><p> if(yue==0)</p><p><b> yue=12;</b></p><p> display();</p><p> write_cmd(0x80+0x07
79、);</p><p><b> }</b></p><p><b> if(s==7)</b></p><p><b> {</b></p><p><b> nian--;</b></p><p> if(nian<
80、;0)</p><p> nian=9999;</p><p> display();</p><p> write_cmd(0x80+0x04);</p><p><b> }</b></p><p><b> }</b></p><p>
81、<b> }</b></p><p><b> }</b></p><p><b> } </b></p><p> int panding(int s) //閏年判定函數(shù)</p><p><b> {</b></p>
82、;<p> if(s%100==0)</p><p><b> {</b></p><p> if(s%400==0)</p><p> return(1);</p><p><b> else</b></p><p> return(2);<
83、/p><p><b> }</b></p><p><b> else</b></p><p> if(s%4==0)</p><p> return(1);</p><p><b> else</b></p><p>
84、return(2);</p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p><b> init(); </b></p><p><b> while(1
85、)</b></p><p><b> {</b></p><p> rp=panding(nian);</p><p><b> key();</b></p><p><b> if(f==1)</b></p><p><b&g
86、t; {</b></p><p> display();</p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p> void timer() i
87、nterrupt 1 //定時器0</p><p><b> {</b></p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> t++;</b></p><p
88、><b> if(t==20)</b></p><p><b> {</b></p><p><b> t=0;</b></p><p><b> mia++;</b></p><p> if(mia==60)</p><
89、;p><b> {</b></p><p><b> mia=0;</b></p><p><b> fen++;</b></p><p> if(fen==60)</p><p><b> {</b></p><p&g
90、t;<b> fen=0;</b></p><p><b> shi++;</b></p><p> if(shi==24)</p><p><b> {</b></p><p><b> shi=0;</b></p><p&
91、gt;<b> a=a+3;</b></p><p><b> if(a>18)</b></p><p><b> a=0;</b></p><p><b> ri++;</b></p><p><b> if(rp==1)<
92、;/b></p><p><b> {</b></p><p> if(yue==2)</p><p> if(ri==30)</p><p><b> {</b></p><p><b> ri=1;</b></p>&l
93、t;p><b> yue++;</b></p><p> if(yue==13)</p><p><b> {</b></p><p><b> yue=1;</b></p><p><b> nian++;</b></p>
94、<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p>&l
95、t;p> if(yue==2)</p><p> if(ri==29)</p><p><b> {</b></p><p><b> ri=1;</b></p><p><b> yue++;</b></p><p> if(yue=
96、=13)</p><p><b> {</b></p><p><b> yue=1;</b></p><p><b> nian++;</b></p><p><b> }</b></p><p><b> }
97、</b></p><p><b> }</b></p><p> if(yue%2==1)</p><p><b> {</b></p><p><b> if(yue<8)</b></p><p><b> {&l
98、t;/b></p><p> if(ri==32)</p><p><b> {</b></p><p><b> ri=1;</b></p><p><b> yue++;</b></p><p> if(yue==13)</p&
99、gt;<p><b> {</b></p><p><b> yue=1;</b></p><p><b> nian++;</b></p><p><b> }</b></p><p><b> }</b>&
100、lt;/p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(ri==31)</p><p><b> {</b></p>&
101、lt;p><b> ri=1;</b></p><p><b> yue++;</b></p><p> if(yue==13)</p><p><b> {</b></p><p><b> yue=1;</b></p>&
102、lt;p><b> nian++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
103、<p><b> else</b></p><p><b> {</b></p><p><b> if(yue<7)</b></p><p><b> {</b></p><p><b> if(yue>2)&l
104、t;/b></p><p> if(ri==31)</p><p><b> {</b></p><p><b> ri=1;</b></p><p><b> yue++;</b></p><p> if(yue==13)</p&
105、gt;<p><b> {</b></p><p><b> yue=1;</b></p><p><b> nian++;</b></p><p><b> }</b></p><p><b> }</b>
106、</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(ri==32)</p><p><b> {</b></p>
107、<p><b> ri=1;</b></p><p><b> yue++;</b></p><p> if(yue==13)</p><p><b> {</b></p><p><b> yue=1;</b></p>
108、<p><b> nian++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> }</p><p&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論