版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 物理機(jī)電學(xué)院課程設(shè)計(jì)報(bào)告</p><p> 課程名稱: 單片機(jī)原理 </p><p> 專業(yè)班級: 10電本(2)班 </p><p> 學(xué)生姓名: </p><p> 學(xué) 號:
2、 </p><p> 指導(dǎo)教師: </p><p> 完成時間: </p><p> 報(bào)告成績: </p><p><b> 單
3、片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p><b> 目錄</b></p><p> 一、設(shè)計(jì)任務(wù)與要求- 1 -</p><p> 1.1 設(shè)計(jì)任務(wù)- 1 -</p><p> 1.2 數(shù)字時鐘的設(shè)計(jì)- 1 -</p><p> 二、方案設(shè)計(jì)與論證- 2 -</
4、p><p> 方案一:- 2 -</p><p> 方案二:- 2 -</p><p> 三、硬件電路設(shè)計(jì)- 4 -</p><p> 3.1最小系統(tǒng)部分。- 4 -</p><p> 3.2 外圍電路部分。- 5 -</p><p> 四、軟件設(shè)計(jì)- 6 -</p&g
5、t;<p> 4.1 程序框圖- 6 -</p><p> 4.2 實(shí)驗(yàn)程序(見附錄2)- 6 -</p><p> 五、仿真過程與仿真結(jié)果- 7 -</p><p> 5.1 仿真原理圖:- 7 -</p><p> 5.2 仿真結(jié)果- 7 -</p><p> 六、安裝與調(diào)試-
6、 8 -</p><p> 6.1 安裝:- 8 -</p><p> 6.2 實(shí)物圖:- 8 -</p><p> 6.3 調(diào)試:- 9 -</p><p> 6.4 調(diào)試結(jié)果:- 9 -</p><p> 七、結(jié)論與心得- 10 -</p><p> 八、參考文獻(xiàn)-
7、11 -</p><p> 附錄1:主要器件清單:- 12 -</p><p> 附錄2:實(shí)驗(yàn)程序- 13 -</p><p><b> 單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p><b> 一、設(shè)計(jì)任務(wù)與要求</b></p><p><b> 1.1
8、 設(shè)計(jì)任務(wù)</b></p><p> 通過課程設(shè)計(jì)的教學(xué)實(shí)踐,進(jìn)一步學(xué)習(xí)、掌握單片機(jī)應(yīng)用系統(tǒng)的有關(guān)知識,加深了解單片機(jī)的工作原理。初步掌握簡單單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)、制作、調(diào)試的方法。提高動手實(shí)踐能力、提高科學(xué)的思維能力。</p><p> 1.2 數(shù)字時鐘的設(shè)計(jì)</p><p><b> 設(shè)計(jì)基本要求:</b></p&g
9、t;<p> ?。?)能顯示小時、分鐘、秒;</p><p> ?。?)具有時間設(shè)置功能;</p><p> ?。?)在進(jìn)入系統(tǒng)時顯示自己的學(xué)號并閃爍兩下; </p><p><b> 擴(kuò)展要求:</b></p><p> 具備鬧鐘功能,有聲音提示。</p><p><b&
10、gt; 二、方案設(shè)計(jì)與論證</b></p><p> 本設(shè)計(jì)基于單片機(jī)技術(shù)原理,以單片機(jī)芯片AT89S51作為核心控制器,通過硬件電路的制作以及軟件程序的編制,計(jì)制作出一個多功能數(shù)字時鐘系統(tǒng)。單片機(jī)擴(kuò)展的LED顯示器用來顯示秒、分、時計(jì)數(shù)單元中的值。整個設(shè)計(jì)包括兩大部分: 硬件部分和軟件部分,以單片機(jī)為核心, 配以一定的外圍電路和軟件。硬件是整個系統(tǒng)的基礎(chǔ), 軟件部分則要合理、充分地支持和使用系
11、統(tǒng)的硬件, 從而完成系統(tǒng)所要完成的任務(wù)。 </p><p> 該時鐘系統(tǒng)主要由時鐘模塊、液晶顯示模塊、鍵盤控制模塊組成。設(shè)計(jì)以硬件軟件化為指導(dǎo)思想充分發(fā)揮單片機(jī)功能大部分功能通過軟件編程來實(shí)現(xiàn),路簡單明了,統(tǒng)穩(wěn)定性高。</p><p><b> 方案一:</b></p><p> 利用AT89S52單片機(jī)內(nèi)部的定時/計(jì)數(shù)器進(jìn)行中斷定時
12、,合軟件延時實(shí)現(xiàn)時、分、秒的計(jì)時。該方案節(jié)省硬件成本且能使讀者在定時/計(jì)數(shù)器的使用、中斷及程序設(shè)計(jì)方面得到鍛煉與提高,對單片機(jī)的指令系統(tǒng)能有更深入的了解,而對學(xué)好單片機(jī)技術(shù)這門課程起到一定的作用。</p><p><b> 方案二:</b></p><p> 利用DS2302(其引腳如圖2.1.1 所示)時鐘芯片連接AT89S51單片機(jī),提供當(dāng)前日期和時間數(shù)據(jù),
13、并將實(shí)時的日期數(shù)據(jù)在字符型液晶顯示器LCD1602(其引腳如圖 2.1.2 所示,顯示編碼如圖 2.1.3所示)上顯示出來。</p><p> 圖2.1.1 DS2302引腳圖</p><p> 圖2.1.2 LCD1602引腳圖 圖2.1.3 LCD1602編碼顯示</p><p><b> 分析:</b><
14、/p><p> 方案一直接利用AT89S51單片機(jī)內(nèi)部定時/計(jì)數(shù)器進(jìn)行中斷定時,和軟件延時實(shí)現(xiàn)時、分、秒的計(jì)時。此方法雖然可以有效的節(jié)約成本,但產(chǎn)生的誤差也較大,</p><p> 不能達(dá)到精確定時的目的。</p><p> 相比于方案一,方案二由于利用標(biāo)準(zhǔn)的時鐘芯片進(jìn)行設(shè)計(jì),可以有效的減小產(chǎn)生的誤差,達(dá)到準(zhǔn)確定時的目的。</p><p>
15、 想比較之下,選擇方案二進(jìn)行設(shè)計(jì)較合適。</p><p><b> 三、硬件電路設(shè)計(jì)</b></p><p> 將硬件部分分為最小系統(tǒng)部分和外圍電路部分。</p><p> 3.1最小系統(tǒng)部分。</p><p><b> 3.1.1原理圖</b></p><p>&
16、lt;b> 圖3.1.1 </b></p><p> 3.1.2 PCB圖</p><p><b> 圖3.1.2 </b></p><p> 3.2 外圍電路部分。</p><p><b> 3.2.1原理圖</b></p><p><b&
17、gt; 圖3.2.1 </b></p><p> 3.2.2 PCB圖</p><p><b> 圖3.2.2 </b></p><p><b> 四、軟件設(shè)計(jì)</b></p><p><b> 4.1 程序框圖</b></p><p&
18、gt; 圖4.1.1b 按鍵掃描程序框</p><p> 圖4.1.1a 主程序框圖 </p><p> 4.2 實(shí)驗(yàn)程序(見附錄2)</p><p> 五、仿真過程與仿真結(jié)果</p><p> 5.1 仿真原理圖:</p><p><b>
19、 圖5.1.1</b></p><p><b> 5.2 仿真結(jié)果</b></p><p> a.星期: b.日期:</p><p> c.時間:d.鬧鐘:</p><p><b> 圖5.1.2 </b></p><p><b> 六、安裝與
20、調(diào)試</b></p><p><b> 6.1 安裝:</b></p><p> a.在keil軟件中新建工程,芯片選擇AT89S51,保存工程;打開數(shù)字鐘C語言程序,保存,編譯無誤后生成HEX文件。</p><p> b.打開STC-ISP-燒寫軟件并選擇好芯片型號,COM口,波特率等;取出最小系統(tǒng)模塊,將串口連接電腦USB
21、接口,連接好啊電源,并將下載跳線短接;</p><p> c.在燒寫軟件中選擇好第一步中生成的HEX文件,點(diǎn)擊下載按鈕,將數(shù)字鐘程序燒寫進(jìn)最小系統(tǒng)板的單片機(jī)中;</p><p> d.程序燒寫完成后,將最小系統(tǒng)模塊與外圍電路模塊對應(yīng)原理圖用杜邦線一一連接起來,接上電源(注意電源正負(fù)極),進(jìn)行調(diào)試。</p><p><b> 6.2 實(shí)物圖:</
22、b></p><p><b> 圖6.2.1</b></p><p><b> 6.3 調(diào)試:</b></p><p> a.確認(rèn)無誤后接上電源,發(fā)現(xiàn)1602液晶顯示屏亮但無顯示,通過調(diào)節(jié)電位器W后改變1602的對比度后,問題解決。</p><p> b.調(diào)節(jié)W后液晶屏有現(xiàn)顯示,但不能
23、正?,F(xiàn)實(shí)時鐘。重新檢查連線并無錯誤,回仿真圖進(jìn)行仿真調(diào)試也一切正常。經(jīng)反復(fù)查證是DS2302時鐘芯片無參考電壓以致不能正常工作所致,通過在DS2302時鐘芯片的3個引出腳分別外接1K上拉電阻并連接電源VCC。重新接上電源后,問題解決。</p><p> c.通過外圍電路的4個按鍵調(diào)節(jié)系統(tǒng)時間,日期,星期,鬧鐘。測試各個系統(tǒng)功能是否正常</p><p><b> 6.4 調(diào)試結(jié)
24、果:</b></p><p> 經(jīng)過反復(fù)調(diào)試與論證,本數(shù)字時鐘系統(tǒng)能夠正確的顯示時間,日期,星期等基本要求,且時間誤差在1S以內(nèi);在進(jìn)入系統(tǒng)時可以顯示自己的學(xué)號并閃爍2次;可以進(jìn)行時間,日期,星期調(diào)節(jié),并具有鬧鐘設(shè)定功能。</p><p><b> 七、結(jié)論與心得</b></p><p> 歷時一個星期的實(shí)訓(xùn)結(jié)束了,從最開始的
25、選定任務(wù),到仿真,畫原理圖,畫PCB,制板,焊接,調(diào)試,檢測——。一路走來,看著自己的作品一步步的從“理想”變?yōu)椤艾F(xiàn)實(shí)”。那種喜悅心情是無法用語言形容的!其實(shí)最重要的不是結(jié)果,而是過程。結(jié)果是生硬的,而過程永遠(yuǎn)值得我們慢慢回味。在這幾天的實(shí)訓(xùn)過程當(dāng)中,有歡笑過,也有失落過。這其中的點(diǎn)點(diǎn)滴滴現(xiàn)在仔細(xì)回味起來不免苦笑一番。</p><p> 經(jīng)過一個星期的實(shí)訓(xùn)令我受益良多。上個學(xué)期學(xué)習(xí)了《單片機(jī)原理》,學(xué)語法,背指
26、令。但由于自己沒有開發(fā)板,不能將理論付諸實(shí)踐。只有在實(shí)驗(yàn)課上才有幾次動手的機(jī)會,但也只有為數(shù)不多的幾次罷了。且能像這次這樣自己親自動手制版更是機(jī)會難得。這次實(shí)踐讓我對C51開發(fā)板的硬件結(jié)構(gòu)有了進(jìn)一步的連接,同時也認(rèn)識了DS2302時鐘芯片和LCD1602液晶顯示屏的引腳及功能。進(jìn)一步熟悉了ISIS軟件和ALTIUM軟件是的使用。特別是仿真軟件的使用,以前我只能簡單的按照老師給的那一套步驟,自己一點(diǎn)都不知道變通。而在這次實(shí)訓(xùn)中遇到了些許問
27、題,通過虛心請教其他的同學(xué),經(jīng)過同學(xué)們的熱心幫助,我的問題一個個都迎刃而解了。這才發(fā)現(xiàn)其實(shí)這套軟件的功能其實(shí)非常強(qiáng)大,不是我過去簡簡單單的那一套路而已,這其中的許多功能還有待開發(fā)。</p><p> 這次實(shí)訓(xùn)也讓我體會到團(tuán)隊(duì)協(xié)作的重要性。遇到問題大家一起討論,最終取得最好的解決方案。自己有不懂的問題虛心向他人請教,開始覺得不好意思,覺得別人會不耐煩,但其實(shí)發(fā)現(xiàn)大家都是很熱情的,都會耐心的把方法講解給我聽,直到我
28、會為止。想當(dāng)初如果自己因?yàn)榉N種原因不把自己的問題去請教他人,那么自己不懂的到現(xiàn)在還是不懂。自己也就不能學(xué)到那么多東西了。</p><p> 雖然這次實(shí)訓(xùn)讓我學(xué)到了很多,但也發(fā)現(xiàn)了自己在很多方面的不足。比如C程序不能自己獨(dú)立完成,仿真軟件用得不夠熟練等。而這些都只怨自己平時不夠努力。在今后的學(xué)習(xí)生活中,我要加倍努力,在編程上多下點(diǎn)功夫,從最簡單的開始,一步一步的積累。因?yàn)樽约夯A(chǔ)較差。人要逼下自己,才會發(fā)現(xiàn)自己的
29、潛能原來這么大。讓自己多學(xué)點(diǎn),多懂點(diǎn),只有這樣才不會愧對自己的大學(xué)四年!</p><p><b> 八、參考文獻(xiàn)</b></p><p> [1]單片機(jī)原理及應(yīng)用 / 張毅剛,彭喜元,彭宇編著.—2版[M].北京:高等教育出版社,2010.5[2011.12重印].</p><p> [2]單片機(jī)C51設(shè)計(jì)教程與實(shí)驗(yàn)/祁偉, 楊亭編著[M
30、].北京:航空航天大學(xué)出版社,2006.</p><p> [3]單片機(jī)C程序設(shè)計(jì)實(shí)例指導(dǎo)/李光飛等編著[M]. 航空航天大學(xué)出版社,2005.</p><p> [4]例說51單片機(jī):C語言版/張義和等編著: 袁彩霞改編[M].北京:人民郵電出版社,2008.4.</p><p> 附錄1:主要器件清單:</p><p><b&
31、gt; 附錄2:實(shí)驗(yàn)程序</b></p><p> #include<reg52.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int </p><p> sbit rs=P2^0; //數(shù)據(jù)、命令選擇
32、端</p><p> sbit lcden=P2^2; //使能信號</p><p> sbit lcdew=P2^1; // 讀寫選擇端</p><p> sbit s1=P1^5; //功能鍵設(shè)定</p><p> sbit s2=P1^6; // 增大鍵設(shè)定</p><p> sbit s
33、3=P1^7; // 減小鍵設(shè)定</p><p> sbit s4=P1^4; //關(guān)閉蜂鳴器</p><p> sbit beep=P2^3; // 蜂鳴器設(shè)定 */</p><p> sbit RST=P2^5;//ds1302 設(shè)定</p><p> sbit SCLK=P2^7;</p>&l
34、t;p> sbit IO=P2^6;</p><p> sbit ACC0 = ACC^0;</p><p> sbit ACC7 = ACC^7;//位尋址寄存器定義</p><p><b> bit flag;</b></p><p> uchar code table1[]=" wan
35、g shu quan";</p><p> uchar code table2[]=" 2010041611 ";</p><p> uchar code table3[]=" ";</p><p> uchar code table4[]="
36、 ";</p><p> uchar num[8],enter,shi,fen,miao,nian,yue,ri,week,shi1,fen1,flag1=0,flag2=0,flag3,choice,</p><p> time[]="20XX-XX-XX XXX ",//年月日字符數(shù)組</p><p> time
37、1[]=" xx:xx:xx ",//時分秒字符數(shù)組</p><p> time3[]="@ NO 00:00:00";//鬧鐘設(shè)定時顯示的時間數(shù)組</p><p> void delay(uint z) //1ms延時函數(shù)</p><p> {uint x,y;</p&g
38、t;<p> for(x=z;x>0;x--)</p><p> for(y=500;y>0;y--);</p><p><b> }</b></p><p> void di() //蜂鳴設(shè)定函數(shù)</p><p><b> {</b></p>
39、<p><b> beep=0;</b></p><p> delay(80);</p><p><b> beep=1;</b></p><p><b> }</b></p><p> uchar read(uchar x) //讀ds1302數(shù)據(jù)&
40、lt;/p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> RST=0;</b></p><p><b> SCLK=0;</b></p><p><b>
41、 RST=1;</b></p><p> ACC=(x|0x01);</p><p> for(i=8;i>0;i--)//循環(huán)8次移位</p><p><b> {</b></p><p><b> IO=ACC0;</b></p><p><
42、;b> SCLK=1;</b></p><p><b> SCLK=0;</b></p><p> ACC=ACC>>1;//右移</p><p><b> }</b></p><p> for(i=8;i>0;i--)//循環(huán)8次移位</p>
43、;<p> {ACC=ACC>>1;</p><p><b> ACC7=IO;</b></p><p><b> SCLK=1;</b></p><p><b> SCLK=0;</b></p><p><b> }</b
44、></p><p><b> SCLK=1;</b></p><p><b> RST=0;</b></p><p> return ACC;</p><p><b> }</b></p><p> void write (uchar a
45、ddr,uchar dat) //向ds1302寫數(shù)據(jù)</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> RST=0;</b></p><p><b> SCLK=0;</b><
46、;/p><p><b> RST=1;</b></p><p><b> ACC=addr;</b></p><p> for(i=8;i>0;i--)</p><p><b> {</b></p><p><b> IO=ACC0
47、;</b></p><p><b> SCLK=1;</b></p><p><b> SCLK=0;</b></p><p> ACC=ACC>>1;</p><p><b> }</b></p><p><b&g
48、t; ACC=dat;</b></p><p> for(i=8;i>0;i--)</p><p><b> {</b></p><p><b> IO=ACC0;</b></p><p><b> SCLK=1;</b></p>&l
49、t;p><b> SCLK=0;</b></p><p> ACC=ACC>>1;</p><p><b> }</b></p><p><b> SCLK=1;</b></p><p><b> RST=0;</b></
50、p><p><b> }</b></p><p> void getnum() //接收ds1302的數(shù)據(jù)</p><p><b> {</b></p><p><b> uchar j;</b></p><p> for(j=0;j<7
51、;j++)</p><p><b> {</b></p><p> num[j]=read(0x80+0x02*j);</p><p><b> }</b></p><p> time[2]=((num[6]&0x70)>>4)+'0';//年</p
52、><p> time[3]=(num[6]&0x0f)+'0'; nian=((num[6]&0x70)>>4)*10+(num[6]&0x0f);</p><p> time[5]=((num[4]&0x70)>>4)+'0';//yue</p><p> time[
53、6]=(num[4]&0x0f)+'0'; yue=((num[4]&0x70)>>4)*10+(num[4]&0x0f);</p><p> time[8]=((num[3]&0x70)>>4)+'0';//ri</p><p> time[9]=(num[3]&0x0f)+
54、9;0'; ri=((num[3]&0x70)>>4)*10+(num[3]&0x0f);</p><p> time[13]=(num[5]&0x0f)+'0';//week</p><p> week=(num[5]&0x0f);</p><p> switch(time[13])
55、 //星期字符數(shù)組賦值</p><p><b> {</b></p><p> case '1': time[12]='S'; time[13]='u'; time[14]='n';</p><p><b> break;</b></p>
56、;<p> case '2': time[12]='M'; time[13]='o'; time[14]='n';</p><p><b> break;</b></p><p> case '3': time[12]='T'; time[13]=
57、9;u'; time[14]='e';</p><p><b> break;</b></p><p> case '4': time[12]='W'; time[13]='e'; time[14]='d';</p><p><b> bre
58、ak;</b></p><p> case '5': time[12]='T'; time[13]='h'; time[14]='u';</p><p><b> break;</b></p><p> case '6': time[12]=
59、9;F'; time[13]='r'; time[14]='i';</p><p><b> break;</b></p><p> case '7': time[12]='S'; time[13]='a'; time[14]='t';</p>&
60、lt;p> break; </p><p><b> }</b></p><p> time1[5]=((num[2]&0x70)>>4)+'0'; //shi</p><p> time1[6]=(num[2]&0x0f)+'0'; shi=((num[
61、2]&0x70)>>4)*10+(num[2]&0x0f);</p><p> time1[8]=((num[1]&0x70)>>4)+'0'; //fen</p><p> time1[9]=(num[1]&0x0f)+'0'; fen=((num[1]&0x70)>>
62、;4)*10+(num[1]&0x0f);</p><p> time1[11]=((num[0]&0x70)>>4)+'0'; //miao</p><p> time1[12]=(num[0]&0x0f)+'0'; miao=((num[0]&0x70)>>4)*10+(num[0]&a
63、mp;0x0f);</p><p><b> }</b></p><p> void write_com(uchar com) //寫入lcd顯示方式</p><p><b> {</b></p><p><b> rs=0;</b></p><
64、;p><b> P0=com;</b></p><p><b> delay(1);</b></p><p><b> lcden=1;</b></p><p><b> delay(1);</b></p><p><b> lc
65、den=0;</b></p><p><b> }</b></p><p> void write_data(uchar date)//向lcd1602寫入數(shù)據(jù)</p><p><b> {</b></p><p><b> rs=1;</b></
66、p><p><b> P0=date;</b></p><p><b> delay(1);</b></p><p><b> lcden=1;</b></p><p><b> delay(1);</b></p><p>&l
67、t;b> lcden=0;</b></p><p><b> }</b></p><p> void chuxian1()</p><p> {uchar num1;</p><p> write_com(0x80);//將數(shù)據(jù)指針定位到第一行第一個字節(jié)</p><p&g
68、t; for(num1=0;num1<15;num1++)</p><p><b> {</b></p><p> write_data(table1[num1]);</p><p> delay(20);</p><p><b> }</b></p><p>
69、; write_com(0x80+0x40);</p><p> for(num1=0;num1<14;num1++)</p><p><b> {</b></p><p> write_data(table2[num1]);</p><p> delay(20);</p><p>
70、;<b> }</b></p><p> delay(1500);</p><p> write_com(0x01);</p><p><b> } </b></p><p> void chuxian2()</p><p> {uchar num1;</
71、p><p> write_com(0x80);//將數(shù)據(jù)指針定位到第一行第一個字節(jié)</p><p> for(num1=0;num1<15;num1++)</p><p><b> {</b></p><p> write_data(table3[num1]);</p><p> de
72、lay(20);</p><p><b> }</b></p><p> write_com(0x80+0x40);</p><p> for(num1=0;num1<14;num1++)</p><p><b> {</b></p><p> write_d
73、ata(table4[num1]);</p><p> delay(20);</p><p><b> }</b></p><p> delay(50);</p><p> write_com(0x01);</p><p><b> } </b></p>
74、<p> void display() //顯示數(shù)據(jù)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> write_com(0x0c); //顯示方式設(shè)定為:無光標(biāo),且不閃爍</p><p> if(
75、flag2==1) </p><p> time1[0]='@'; //鬧鐘圖標(biāo)設(shè)定</p><p><b> else </b></p><p> time1[0]=' ';</p><p> if(flag1==0) //flag為0時正常顯示年、月、日、時、分、
76、秒等</p><p><b> { </b></p><p> write_com(0x80);</p><p> for(i=0;time[i]!='\0';i++)</p><p><b> {</b></p><p> write_data(
77、time[i]);</p><p><b> }</b></p><p> write_com(0xc0);</p><p> for(i=0;time1[i]!='\0';i++)</p><p><b> {</b></p><p> write
78、_data(time1[i]);</p><p><b> }</b></p><p><b> }</b></p><p> if(flag1==1) //flag為1時進(jìn)入時間設(shè)定界面</p><p><b> {</b></p><p&g
79、t; time3[8]=fen1/10+'0'; time3[9]=fen1%10+'0';</p><p> time3[5]=shi1/10+'0';time3[6]=shi1%10+'0';</p><p> if(choice==0)</p><p><b> {</b&
80、gt;</p><p> time3[2]='N';time3[3]='O';</p><p><b> }</b></p><p> if(choice==1)</p><p><b> {</b></p><p> time3[2
81、]='O'; time3[3]='K';</p><p><b> }</b></p><p> write_com(0xc0);</p><p> for(i=0;time3[i]!='\0';i++)</p><p><b> {</b>&
82、lt;/p><p> write_data(time3[i]);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void keyscan() // 掃描鍵盤&l
83、t;/p><p><b> {</b></p><p><b> getnum();</b></p><p> if(s1==0)//功能鍵被按下 write_com(0x0c);</p><p><b> {</b></p><p&g
84、t;<b> delay(1);</b></p><p><b> if(s1==0)</b></p><p><b> {</b></p><p> enter++; //記錄摁下次數(shù)</p><p> if(flag1==1&&enter==
85、6)</p><p><b> enter=2;</b></p><p> if(flag1==0&&enter==9)</p><p><b> enter=0;</b></p><p> while(s1==0);di(); //按鍵放下時響一下</p>
86、<p><b> }</b></p><p><b> }</b></p><p> switch(enter)</p><p><b> {</b></p><p> case 0: write_com(0x0c);break;</p>
87、<p> case 1: write_com(0xcc);write_com(0x0f); delay(100); //按秒 時 有光標(biāo)</p><p><b> break;</b></p><p> case 2: write_com(0xc9); write_com(0x0f);delay(100);//分 </p&g
88、t;<p><b> break;</b></p><p> case 3: write_com(0xc6); write_com(0x0f);delay(100);//時</p><p><b> break;</b></p><p> case 4: if(flag1==0)</
89、p><p><b> {</b></p><p> write_com(0x8e); write_com(0x0f);delay(100);//星期</p><p><b> }</b></p><p> if(flag1==1)</p><p><b>
90、 {</b></p><p> write_com(0xc3); write_com(0x0f);delay(100); //NO、OK選項(xiàng)閃爍</p><p><b> }</b></p><p><b> break;</b></p><p> case 5: if(
91、flag1==0)</p><p><b> {</b></p><p> write_com(0x89); write_com(0x0f);delay(100);//日閃爍</p><p><b> }</b></p><p> if(flag1==1)</p><
92、p><b> {</b></p><p> write_com(0xc0); write_com(0x0f);delay(100); //時鐘標(biāo)志閃爍</p><p><b> }</b></p><p><b> break;</b></p><p>
93、case 6: write_com(0x86); write_com(0x0f);delay(100);//月</p><p><b> break;</b></p><p> case 7: write_com(0x83); write_com(0x0f);delay(100);//年</p><p><b>
94、 break;</b></p><p> case 8: write_com(0x0c);write_com(0xc0); write_data('@'); </p><p> if(flag1==0) write_com(0xc0);</p><p> else write_com(0xc9);write_com(0x0f)
95、;delay(100);//鬧鐘</p><p><b> break;</b></p><p><b> }</b></p><p> if(enter!=0&&s2==0)</p><p><b> {</b></p><p&
96、gt;<b> delay(1);</b></p><p> if(enter!=0&&s2==0)</p><p><b> {</b></p><p> switch(enter)</p><p><b> {</b></p><
97、;p> case 1:miao++; if(miao==60) miao=0;</p><p> write(0x80,(miao/10*0x10+miao%10)); //秒 </p><p><b> break;</b></p><p> case 2:if(flag1==0)</p><p&g
98、t;<b> {</b></p><p> fen++;if(fen==60) fen=0;</p><p> write(0x82,((fen/10)*0x10+fen%10));//分 </p><p><b> }</b></p><p> if(flag1==1)</p&
99、gt;<p><b> {</b></p><p> fen1++;if(fen1==60) fen1=0;</p><p><b> }</b></p><p><b> break;</b></p><p> case 3:if(flag1==0
100、)</p><p><b> {</b></p><p> shi++;if(shi==24) shi=0;</p><p> write(0x84,(shi/10*0x10+shi%10)); //時</p><p><b> }</b></p><p>
101、 if(flag1==1)</p><p><b> {</b></p><p> shi1++; if(shi1==24) shi1=0;</p><p><b> }</b></p><p><b> break;</b></p><p>
102、 case 4:if(flag1==0)</p><p><b> {</b></p><p> week++; if(week==8) week=1;</p><p> write(0x8a,(week/10*0x10+week%10)); //星期 </p><p><b> }&l
103、t;/b></p><p> if(flag1==1)</p><p><b> {</b></p><p> choice++; if(choice==2) choice=0;</p><p><b> }</b></p><p><b> br
104、eak;</b></p><p> case 5:if(flag1==0)</p><p><b> {</b></p><p> ri++; if(ri==32) ri=1;</p><p> write(0x86,(ri/10*0x10+ri%10)); //日 </p&g
105、t;<p><b> }</b></p><p> if(flag1==1)</p><p><b> {</b></p><p> if(choice==0) flag2=0;</p><p> if(choice==1) flag2=1;</p><
106、;p> enter=0; flag1=0;</p><p><b> }</b></p><p> break;</p><p> case 6:yue++; if(yue==13) yue=1;</p><p> write(0x88,(yue/10*0x10+yue%10)
107、);//月 </p><p><b> break;</b></p><p> case 7:nian++;if(nian==99)nian=0;</p><p> write(0x8c,(nian/10*0x10+nian%10));//年 </p><p><b> break;&
108、lt;/b></p><p> case 8: flag1=1; enter=2;display(); break;//進(jìn)入鬧鐘設(shè)置界面</p><p> }</p><p> while(s2==0);di(); //按鍵放下時響一下</p><p><b> }</
109、b></p><p><b> }</b></p><p> if(enter!=0&&s3==0)</p><p><b> {</b></p><p><b> delay(1);</b></p><p> if(en
110、ter!=0&&s3==0)</p><p><b> {</b></p><p> switch(enter)</p><p><b> {</b></p><p> case 1:miao--; if(miao==-1) miao=59; </p>&l
111、t;p> write(0x80,(miao/10*0x10+miao%10)); //秒 </p><p><b> break;</b></p><p> case 2:if(flag1==0)</p><p><b> {</b></p><p> fen--;if(fe
112、n==-1) fen=59;</p><p> write(0x82,((fen/10)*0x10+fen%10));//分 </p><p><b> }</b></p><p> if(flag1==1)</p><p><b> {</b></p><p>
113、 fen1--;if(fen1==-1) fen1=59;</p><p><b> }</b></p><p><b> break;</b></p><p> case 3:if(flag1==0)</p><p><b> {</b></p>&
114、lt;p> shi--;if(shi==-1) shi=23;</p><p> write(0x84,(shi/10*0x10+shi%10)); //時</p><p><b> }</b></p><p> if(flag1==1)</p><p><b> {</b>
115、</p><p> shi1--; if(shi1==-1) shi1=23;</p><p><b> }</b></p><p><b> break;</b></p><p> case 4:if(flag1==0)</p><p><b> {
116、</b></p><p> week--; if(week==0) week=7;</p><p> write(0x8a,(week/10*0x10+week%10)); //星期 </p><p><b> }</b></p><p> if(flag1==1)</p>
117、<p><b> {</b></p><p> choice--; if(choice==-1) choice=1;</p><p><b> }</b></p><p><b> break;</b></p><p> case 5:if(flag1=
118、=0)</p><p><b> {</b></p><p> ri--; if(ri==0) ri=31;</p><p> write(0x86,(ri/10*0x10+ri%10)); //日 </p><p><b> }</b></p><p&g
119、t; if(flag1==1)</p><p><b> {</b></p><p> if(choice==0) flag2=0;</p><p> if(choice==1) flag2=1;</p><p> enter=0; flag1=0;</p><p><b>
120、 }</b></p><p> break;</p><p> case 6:yue--;if(yue==0) yue=12;</p><p> write(0x88,(yue/10*0x10+yue%10));//月 </p><p><b> break;</b>
121、;</p><p> case 7:nian--;if(nian==-1) nian=99;</p><p> write(0x8c,(nian/10*0x10+nian%10));//年 </p><p><b> break;</b></p><p> case 8: flag1=1; bre
122、ak;//進(jìn)入鬧鐘設(shè)置界面</p><p><b> }</b></p><p> while(s3==0);di(); //按鍵放下時響一下</p><p><b> }</b></p><p><b> }</b></p><p&
123、gt; // if(s4==0)</p><p><b> // {</b></p><p> //delay(1);</p><p> //if(s4==0)</p><p><b> // {</b></p><p> //
124、 flag=1; </p><p><b> // }</b></p><p><b> // }</b></p><p><b> }</b></p><p> void init() //初始化</p>
125、<p><b> {</b></p><p> //beep=0;</p><p> lcden=0;// lcd信號使能端設(shè)定</p><p> lcdew=0; //lcd讀寫選擇端設(shè)定</p><p><b> RST=0;</b></p><
126、;p><b> SCLK=1;</b></p><p> write_com(0x38);</p><p> write_com(0x0c);</p><p> write_com(0x06); // lcd初始化</p><p> write_com(0x01);</p><
127、p> write_com(0x80); //顯示“20”</p><p> chuxian1();</p><p> chuxian2();</p><p> chuxian1();</p><p> chuxian2();</p><p> chuxian1();</p><
128、p> write_data(time[0]); write_data(time[1]);</p><p> write_com(0x84); //顯示“—”</p><p> write_data(time[4]);</p><p> write_com(0x87); //顯示“—”</p><p> write_
129、data(time[7]);</p><p> write_com(0xc7); //顯示“:”</p><p> write_data(time1[7]);</p><p> write_com(0xca); //顯示“:”</p><p> write_data(time1[10]);</p><p&g
130、t; write(0x80,0); </p><p> miao=read(0x80);</p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> init(); //初始
131、化</p><p><b> while(1)</b></p><p><b> {</b></p><p> if(fen1!=fen) flag3=0;</p><p><b> getnum();</b></p><p> while(
132、flag2==1&&enter==0&&shi1==shi&&fen1==fen&&flag3==0)</p><p><b> { </b></p><p> di();delay(200);di();delay(600);</p><p> getnum();displ
133、ay();</p><p> if(s1==0||s2==0||s3==0)</p><p><b> {</b></p><p> delay(10);</p><p><b> flag3=1;</b></p><p> while(s1==0||s2==0||
134、s3==0); </p><p><b> }</b></p><p><b> enter=0;</b></p><p><b> }</b></p><p> display();</p><p> keyscan();</p&g
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)數(shù)字鐘課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---數(shù)字鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告-數(shù)字鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)數(shù)字鐘報(bào)告
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)數(shù)字鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--- 簡易數(shù)字鐘
- 單片機(jī)課程設(shè)計(jì)數(shù)字鐘
- 基于單片機(jī)的數(shù)字鐘課程設(shè)計(jì)
- 簡易數(shù)字鐘的單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字鐘電子鐘
- 單片機(jī)課程設(shè)計(jì)報(bào)告-數(shù)字鐘的設(shè)計(jì)與實(shí)現(xiàn)
- 基于單片機(jī)的數(shù)字鐘課程設(shè)計(jì)
- 課程設(shè)計(jì)--單片機(jī)控制的數(shù)字鐘
- 課程設(shè)計(jì)---基于單片機(jī)的數(shù)字鐘的設(shè)計(jì)
- 單片機(jī)多功能電子數(shù)字鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)--智能電子數(shù)字鐘設(shè)計(jì)
- 簡易數(shù)字鐘的單片機(jī)課程設(shè)計(jì)1
- 單片機(jī)數(shù)字鐘畢業(yè)設(shè)計(jì)---單片機(jī)設(shè)計(jì)數(shù)字鐘
- 單片機(jī)的數(shù)字鐘設(shè)計(jì)
- 江蘇大學(xué)單片機(jī)課程設(shè)計(jì)-多功能數(shù)字鐘的設(shè)計(jì)
評論
0/150
提交評論