版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 單片機系統(tǒng)設(shè)計項目(三級項目)</p><p><b> 設(shè)計說明書</b></p><p> ?。?012/2013學(xué)年第二學(xué)期)</p><p> 題 目 : 數(shù)字鐘 </p><p> 專業(yè)班級 : 通信
2、工程10級2班 </p><p> 學(xué)生姓名 : </p><p> 學(xué) 號: </p><p> 指導(dǎo)教師 </p><p
3、> 設(shè)計周數(shù) : 2周 </p><p> 設(shè)計成績 : </p><p> 2013年6月21日</p><p><b> 目錄</b></p><p><b> 摘要2<
4、;/b></p><p> 一、課程設(shè)計目的2</p><p><b> 二、設(shè)計要求2</b></p><p> 三、單片機數(shù)字鐘的基本原理2</p><p> 四、總體方案設(shè)計3</p><p> 4.1 電路的總體原理框圖3</p><p>
5、 4.2 實現(xiàn)時鐘計時的基本方法3</p><p> 4.3總體方案介紹4</p><p> 五、數(shù)字鐘的硬件設(shè)計4</p><p> 5.1硬件電路的設(shè)計原則4</p><p> 5.2 最小系統(tǒng)5</p><p> 5.2.1 芯片分析5 </p><p&
6、gt; 5.2.2 晶振電路7</p><p> 5.3 LCD1602顯示模塊設(shè)計7</p><p> 5.4時鐘顯示校正電路8</p><p> 六 、系統(tǒng)軟件設(shè)計9</p><p> 6.1軟件設(shè)計分析9</p><p> 6.2 源程序清單10</p><p>
7、 七、proteus仿真圖及實物顯示效果27</p><p><b> 八、設(shè)計總結(jié)28</b></p><p><b> 九、參考文獻29</b></p><p> 摘要:該電子時鐘由89C51,BUTTON,液晶屏等構(gòu)成,采用晶振電路作為驅(qū)動電路,由延時程序和循環(huán)程序產(chǎn)生的一秒定時,達到時分秒的計時,六十秒
8、為</p><p> 一分鐘,六十分鐘為一小時,滿二十四小時為一天。</p><p> 關(guān)鍵詞:單片機;電子時鐘;鍵盤控制</p><p><b> 一、課程設(shè)計目的</b></p><p> 通過《單片機原理與應(yīng)用》課程設(shè)計,使學(xué)生掌握單片機及其擴展系統(tǒng)設(shè)計的方法和設(shè)計原則及相應(yīng)的硬件調(diào)試的方法。進一步加深單片
9、機及其擴展系統(tǒng)設(shè)計和應(yīng)用的理解。</p><p><b> 二、設(shè)計要求</b></p><p> 1、準確計時,以數(shù)字形式顯示時、分、秒的時間。</p><p> 2、年以12個月計時形成,月以28(或29或30或31)日計時形成,日以24小時計時形式,分秒計時為60進位。 </p><p> 3、校正時間功能
10、,即能隨意設(shè)定走時時間。</p><p> 4、鬧鐘功能,一旦走時到該時間,能以聲形式告警提示。</p><p> 5、設(shè)計5V直流電源,系統(tǒng)時鐘電路、復(fù)位電路。 </p><p> 6、帶有秒表功能,按鍵控制啟動、暫停、清零。 </p><p> 三、單片機數(shù)字鐘的基本原理</p><p> 它是利用單片機
11、的內(nèi)部的定時/計數(shù)器工作與定時方式,對機器周期計數(shù)形成基準時間(如10ms)然后用另外一個計數(shù)器或軟件計數(shù)的形式對基準時間進行計數(shù)形成秒(如對10ms計數(shù)100次),“秒”計數(shù)60次“分”,“分”計數(shù)60次形成“時”,“時”計數(shù)24次形成“日”,“日”計數(shù)為28(或29或30或31)次形成“月”,“月”計數(shù)12次形成“年”,年計數(shù)999次就清零,然后通過譯碼器,數(shù)碼管把他們的內(nèi)容在相應(yīng)的位置顯示出來。在具體的設(shè)計時定時器采用中斷方式工作
12、,對時鐘的形成在終中斷序中實現(xiàn),在主程序只是對定時/計數(shù)器的定義初始化,調(diào)用顯示程序和控制程序的初始化。另外為了使用的方便,也設(shè)計了按鍵,可以通過按鍵對時分秒進行調(diào)整,這樣程序就加了按鍵程序。</p><p><b> 四、總體方案設(shè)計</b></p><p> 4.1 電路的總體原理框圖</p><p> 本次設(shè)計時鐘電路,使用了ATC
13、89C51單片機芯片控制電路,單片機控制電路簡單且省去了很多復(fù)雜的線路,使得電路簡明易懂,使用鍵盤鍵上的按鍵來調(diào)整時鐘的年、月、日、時、分、秒,用一揚聲器來進行定時提醒,同時使用匯編語言程序來控制整個時鐘顯示,使得編程變得更容易,這樣通過四個模塊:鍵盤、芯片、揚聲器、LCD液晶屏顯示即可滿足設(shè)計要求??傇O(shè)計原理框圖如下圖所示:</p><p><b> 圖1原理框圖</b></p&g
14、t;<p> 4.2 實現(xiàn)時鐘計時的基本方法</p><p> 利用STC系列單片機的可編程定時/計數(shù)器、中斷系統(tǒng)來實現(xiàn)時鐘計數(shù)。</p><p> (1) 計數(shù)初值計算:</p><p> 把定時器設(shè)為工作方式1,定時時間為50ms,則計數(shù)溢出20次即得時鐘計時最小單位秒,而100次計數(shù)可用軟件方法實現(xiàn)。</p><p&g
15、t; 假設(shè)使用T/C0,方式1,50ms定時,fosc=12MHz。</p><p> 則初值X滿足(216-X)×1/12MHz×12μs =50000μs</p><p> X=15536→0011110010110000→3CB0H</p><p> (2) 采用中斷方式進行溢出次數(shù)累計,計滿20次為秒計時(1秒);</p&g
16、t;<p> (3) 從秒到分、從分到時、從時到日、從日到月、從月到年的計時是通過累加和數(shù)值比較實現(xiàn)。</p><p><b> 4.3總體方案介紹</b></p><p> 4.3.1 計時方案</p><p> 利用STC89C51單片機內(nèi)部的定時/計數(shù)器進行中斷時,配合軟件延時實現(xiàn)年、月、日、時、分、秒的計時。該方案
17、節(jié)省硬件成本,且能使讀者在定時/計數(shù)器的使用、中斷及程序設(shè)計方面得到鍛煉與提高,對單片機的指令系統(tǒng)能有更深入的了解,從而對學(xué)好單片機技術(shù)這門課程起到一定的作用。</p><p> 4.3.2 控制方案</p><p> STC89C51的P0口和P1口外接由八個LED數(shù)碼管(LED8~LED1)構(gòu)成的顯示器,用P0口作LED的段碼輸出口,P1口作八個LED數(shù)碼管的位控輸出線,P3口外接
18、四個按鍵A、B、C構(gòu)成鍵盤電路。</p><p> STC89C51 是一種低功耗,高性能的CMOS 8位微型計算機。它帶有8K Flash 可編程和擦除的只讀存儲器(EPROM),該器件采用ATMEL的高密度非易失性存儲器技術(shù)制造,與工業(yè)上標準的80C51和80C52的指令系統(tǒng)及引腳兼容,片內(nèi)Flash 集成在一個芯片上,可用與解決復(fù)雜的問題,且成本較低。簡易電子鐘的功能不復(fù)雜,采用其現(xiàn)有的I/O便可完成,所
19、以本設(shè)計中采用此的設(shè)計方案。</p><p> 五、數(shù)字鐘的硬件設(shè)計</p><p> 5.1硬件電路的設(shè)計原則</p><p> 在性價比滿足應(yīng)用系統(tǒng)要求的情況下,選擇更可靠,更熟悉的單片機縮短研制周期。</p><p> 盡可能選擇自己較為熟悉的應(yīng)用電路,以提高系統(tǒng)的可靠性。</p><p> 單片機內(nèi)部
20、的資源與外部的擴展資源應(yīng)在滿足系統(tǒng)設(shè)計的基礎(chǔ)上留有余地,為進一步的升級和擴展提供方便。</p><p> 應(yīng)充分的結(jié)合軟件方案考慮硬件的結(jié)構(gòu),通常硬件功能較完善,其相應(yīng)的軟件程序就簡單,但硬件的成本較高,而功能較低,其相應(yīng)的軟件就復(fù)雜,其實際常用軟件代替硬件來降低成本。</p><p> 整個系統(tǒng)相關(guān)的器件盡可能的做到性能相匹配。</p><p> 充分的考慮
21、系統(tǒng)的抗干擾性,如具有抗干擾的單片機并充分的帥選芯片與器件,在電路中采取隔離或屏蔽的措施等。</p><p><b> 5.2 最小系統(tǒng)</b></p><p> 5.2.1 芯片分析</p><p> STC89C51單片機引腳圖如下:</p><p> 圖2 STC89C51引腳圖</p>&l
22、t;p> MCS-51單片機是標準的40引腳雙列直插式集成電路芯片,其各引腳功能如下:</p><p> VCC:+5V電源。</p><p><b> VSS:接地。</b></p><p> RST:復(fù)位信號。當輸入的復(fù)位信號延續(xù)兩個機器周期以上的高電平時即為有效,用完成單片機的復(fù)位初始化操作。</p><
23、p> XTAL1和XTAL2:外接晶體引線端。當使用芯片內(nèi)部時鐘時,此二引線端用于外接石英晶體和微調(diào)電容;當使用外部時鐘時,用于接外部時鐘脈沖信號。</p><p> P0口:P0口為一個8位漏極開路雙向I/O口,當作輸出口使用時,必須接上拉電阻才能有高電平輸出;當作輸入口使用時,必須先向電路中的鎖存器寫入“1”,使FET截止,以避免鎖存器為“0”狀態(tài)時對引腳讀入的干擾。</p><
24、p> P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,它不再需要多路轉(zhuǎn)接電路MUX;因此它作為輸出口使用時,無需再外接上拉電阻,當作為輸入口使用時,同樣也需先向其鎖存器寫“1”,使輸出驅(qū)動電路的FET截止。</p><p> P2口:P2口電路比P1口電路多了一個多路轉(zhuǎn)接電路MUX,這又正好與P0口一樣。P2口可以作為通用的I/O口使用,這時多路轉(zhuǎn)接電路開關(guān)倒向鎖豐存器Q端。</p>
25、<p> P3口:P3口特點在于,為適應(yīng)引腳信號第二功能的需要,增加了第二功能控制邏輯。當作為I/O口使用時,第二功能信號引線應(yīng)保持高電平,與非門開通,以維持從鎖存器到輸出端數(shù)據(jù)輸出通路的暢通。當輸出第二功能信號時,該位應(yīng)應(yīng)置“1”,使與非門對第二功能信號的輸出是暢通的,從而實現(xiàn)第二功能信號的輸出,具體第二功能如表1所示。</p><p> 表1 P3端口引腳兼用功能表</p>&
26、lt;p> 5.2.2 晶振電路</p><p> 下圖所示為時鐘電路原理圖,在AT89S51芯片內(nèi)部有一個高增益反相放大器,其輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。而在芯片內(nèi)部,XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個穩(wěn)定的自激振蕩器。時鐘電路產(chǎn)生的振蕩脈沖經(jīng)過觸發(fā)器進行二分頻之后,才成為單片機的時鐘脈沖信號。</p><p><b&
27、gt; 圖3 晶振電路</b></p><p> 5.3 LCD1602顯示模塊設(shè)計</p><p> 5.3.1 LCD1602主要技術(shù)參數(shù)</p><p> 顯示容量:16×2 個字符 </p><p> 芯片工作電壓:4.5—5.5V </p><p> 工作電流:2.0mA(5
28、.0V) </p><p> 模塊最佳工作電壓:5.0V </p><p> 字符尺寸:2.95×4.35(W×H)mm </p><p> 圖4 LCD1602引腳圖</p><p> 5.3.2 引腳功能說明 </p><p> 1602LCD 采用標準的 14腳(無背光)或 16腳(
29、帶背光)接口,各引腳接口說明如下表2所示: </p><p> 5.3.3 LCD寄存器的選擇 </p><p><b> 表2引腳功能說明</b></p><p> 5.4時鐘顯示校正電路</p><p> 本設(shè)計利用按鍵開關(guān)來校正時鐘顯示的數(shù)字。當按鈕按下時,將在相應(yīng)的端口輸入一個低電平,通過相應(yīng)的程序來改變
30、時鐘顯示。其中菜單按鍵開關(guān)用來選</p><p> 擇要修改的數(shù)字;下調(diào)按鍵用來增加所選數(shù)字的數(shù)值;上調(diào)按鍵用來減小所選數(shù)字的數(shù)值;退出按鍵是退出校正電路。</p><p> 圖5 時鐘校正電路圖</p><p><b> 六 、系統(tǒng)軟件設(shè)計</b></p><p><b> 6.1軟件設(shè)計分析<
31、/b></p><p> 在編程上,首先進行了初始化,定義程序的的入口地址以及中斷的入口地址,在主程序開始定義了一組固定單元用來儲存計數(shù)的時.分.秒,在顯示初值之后,進入主循環(huán)。在主程序中,對不同的按鍵進行掃描,實現(xiàn)秒表,時間調(diào)整,復(fù)位清零等功能,系統(tǒng)總流程圖如下圖:</p><p><b> 圖6 系統(tǒng)總流程圖</b></p><p&g
32、t; 6.2 源程序清單 </p><p> #include <reg51.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> #define ulong unsigned long</p&g
33、t;<p> uchar code table[]="2013:06:19 000";</p><p> uchar code table1[]=" 22:22:10 21:48";</p><p> uchar code table2[]="0123456789";</p><p&
34、gt; sbit lcd_rs =P2^5;//定義LCD端口</p><p> sbit lcd_rw=P2^6;</p><p> sbit lcd_en=P2^7;</p><p> sbit S1=P3^4;//菜單鍵</p><p> sbit S2=P3^5;//加鍵</p><p> sbit
35、 S3=P3^6;//減鍵</p><p> sbit S4=P3^7;//退出菜單鍵</p><p> sbit ss=P3^3;//秒表鍵,第一次啟動,第二次暫停,第三次清零</p><p> sbit FMQ=P2^0;</p><p> void yue31();//31天的月份函數(shù) </p><
36、p> void yue30();//30天的月份函數(shù)</p><p> void yue29();//29天的月份函數(shù)</p><p> void yue28();//28天的月份函數(shù)</p><p> void Timing(); //鬧鐘設(shè)置</p><p> void miaobiao();//秒表函數(shù)</p>
37、;<p> uchar count, k1num;//聲明秒的變量</p><p> char shi,fen,miao;//聲明時分秒</p><p> uint nian, yue,ri,ji=0,mm=0;//聲明年月日,秒表計數(shù),和秒表按鍵次數(shù)</p><p> uchar f,s;//定時器/</p><p>
38、 void delay(uchar z)//延時函數(shù)</p><p><b> { </b></p><p> uchar x,y; </p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b&g
39、t; }</b></p><p> void write_com(uchar com)//lcd寫指令</p><p><b> { </b></p><p> lcd_rs=0; </p><p> lcd_rw=0; </p><p> lcd_en=0; </p
40、><p><b> P0=com; </b></p><p> delay(5); </p><p> lcd_en=1; </p><p> delay(5); </p><p><b> lcd_en=0;</b></p><p><b
41、> }</b></p><p> void write_data(uchar date)//lcd寫數(shù)據(jù)</p><p><b> { </b></p><p> lcd_rs=1; </p><p> lcd_rw=0; </p><p> lcd_en=0; &l
42、t;/p><p><b> P0=date; </b></p><p> delay(5); </p><p> lcd_en=1; </p><p> delay(5); </p><p><b> lcd_en=0;</b></p><p>
43、<b> }</b></p><p> void miaobiao(char kk)//秒表函數(shù)</p><p><b> { </b></p><p> uchar biao_bai,biao_shi,biao_ge; </p><p> biao_bai=kk/100;</p&g
44、t;<p> biao_shi=kk%100/10;</p><p> biao_ge=kk%100%10;</p><p> write_com(0x80+13); </p><p> write_data(table2[biao_bai]);</p><p> write_com(0x80+14);</p&g
45、t;<p> write_data(table2[biao_shi]);</p><p> write_com(0x80+15);</p><p> write_data(table2[biao_ge]);</p><p> write_com(0x0c);</p><p><b> }</b>&
46、lt;/p><p> void write_fsm(uchar add,uchar date)//計算時分秒位</p><p><b> { </b></p><p> uchar shi,ge; </p><p> shi=date/10; </p><p> ge=date%10; &l
47、t;/p><p> write_com(0x80+0x40+add); </p><p> write_data(0x30+shi); </p><p> write_data(0x30+ge);</p><p><b> }</b></p><p> void write_nyr(ucha
48、r add,uchar date)//計算月日位</p><p><b> { </b></p><p> uint shi,ge; </p><p> shi=date/10; </p><p> ge=date%10; </p><p> write_com(0x80+0x00+ad
49、d); </p><p> write_data(0x30+shi); </p><p> write_data(0x30+ge);</p><p><b> }</b></p><p> void write_nian(uchar add,uchar date)//計算年位,年是百位</p>&l
50、t;p><b> { </b></p><p> uint bai,shi,ge; </p><p> bai=date/100%10; </p><p> shi=date/10; </p><p> ge=date%10; </p><p> write_com(0x80+0
51、x00+add); </p><p> write_data(0x30+bai); </p><p> write_data(0x30+shi); </p><p> write_data(0x30+ge);</p><p><b> }</b></p><p> void jiaxia
52、n()//設(shè)置鍵盤加顯</p><p><b> { </b></p><p> if(k1num!=0)</p><p><b> {</b></p><p><b> if(S2==0)</b></p><p><b> { &
53、lt;/b></p><p> delay(10);</p><p> if(S2==0) </p><p><b> {</b></p><p> while(!S2);//松手檢測</p><p> if(k1num==1) </p><p><
54、;b> { </b></p><p><b> miao++; </b></p><p> if(miao==60) </p><p><b> miao=0; </b></p><p> write_fsm(8,miao);</p><p&g
55、t; //write_com(0x0e); </p><p> write_com(0x80+0x40+8); </p><p><b> } </b></p><p> if(k1num==2) </p><p><b> {</b></p><p><
56、;b> fen++; </b></p><p> if(fen==60)</p><p><b> fen=0; </b></p><p> write_fsm(5,fen); </p><p> write_com(0x80+0x40+5);</p><p>
57、<b> } </b></p><p> if(k1num==3) </p><p><b> { </b></p><p><b> shi++; </b></p><p> if(shi==24) </p><p><b&g
58、t; shi=0; </b></p><p> write_fsm(2,shi); </p><p> write_com(0x80+0x40+2);</p><p><b> } </b></p><p> if(k1num==4)</p><p><b>
59、 { </b></p><p><b> ri++; </b></p><p> if(ri==31) </p><p><b> ri=1; </b></p><p> write_nyr(8,ri); </p><p> write_com(0x80
60、+0x00+8);</p><p><b> } </b></p><p> if(k1num==5)</p><p><b> { </b></p><p><b> yue++; </b></p><p> if(yue>12) &
61、lt;/p><p><b> yue=1; </b></p><p> write_nyr(5,yue); </p><p> write_com(0x80+0x00+5);</p><p><b> } </b></p><p> if(k1num==6) </
62、p><p><b> { </b></p><p><b> nian++; </b></p><p> if(nian==90) </p><p><b> nian=0; </b></p><p> write_nian(1,nian); &l
63、t;/p><p> write_com(0x80+0x00+1); </p><p><b> } </b></p><p> if(k1num==7) </p><p><b> { </b></p><p><b> s++; </b><
64、/p><p> if(s==24)s=0; </p><p> write_fsm(11,s); </p><p> write_com(0x80+0x40+11); </p><p><b> } </b></p><p> if(k1num==8) </p><p&g
65、t;<b> { </b></p><p><b> f++; </b></p><p><b> if(f==59)</b></p><p><b> f=0; </b></p><p> write_fsm(14,f); </p>
66、<p> write_com(0x80+0x40+14); </p><p><b> } </b></p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p&g
67、t;<p><b> }</b></p><p> void jianxian()//設(shè)置鍵盤減顯</p><p><b> { </b></p><p> if(k1num!=0) </p><p><b> { </b></p>&l
68、t;p> if(S3==0)//K3設(shè)置 </p><p> delay(10); </p><p> if(S3==0) </p><p><b> {</b></p><p> while(!S3); </p><p> if(k1num==1) </p>
69、<p><b> {</b></p><p><b> miao--; </b></p><p> if(miao==-1) </p><p> miao=59; </p><p> write_fsm(8,miao); </p><p> w
70、rite_com(0x80+0x40+8); </p><p><b> } </b></p><p> if(k1num==2) </p><p><b> { </b></p><p> delay(5); </p><p><b>
71、fen--; </b></p><p> if(fen==-1) </p><p><b> fen=59; </b></p><p> write_fsm(5,fen); </p><p> write_com(0x80+0x40+5); </p><p>
72、<b> } </b></p><p> if(k1num==3) </p><p><b> {</b></p><p><b> shi--; </b></p><p> if(shi==-1) </p><p><b>
73、 shi=23; </b></p><p> write_fsm(2,shi); </p><p> write_com(0x80+0x40+2); </p><p><b> }</b></p><p> if(k1num==4)</p><p><b>
74、 { </b></p><p><b> ri--; </b></p><p><b> if(ri<1) </b></p><p><b> ri=31; </b></p><p> write_nyr(8,ri); </p><
75、p> write_com(0x80+0x00+8);</p><p><b> } </b></p><p> if(k1num==5)</p><p><b> { </b></p><p><b> yue--; </b></p><p&
76、gt; if(yue<1) </p><p><b> yue=12; </b></p><p> write_nyr(5,yue); </p><p> write_com(0x80+0x00+5);</p><p><b> }</b></p><p>
77、 if(k1num==6) </p><p><b> {</b></p><p><b> nian--; </b></p><p> if(nian==0) </p><p><b> nian=90; </b></p><p> writ
78、e_nian(1,nian); </p><p> write_com(0x80+0x00+1); </p><p><b> }</b></p><p> if(k1num==7) </p><p><b> { </b></p><p><b> s-
79、-; </b></p><p><b> if(s==0)</b></p><p><b> s=23; </b></p><p> write_fsm(11,s); </p><p> write_com(0x80+0x40+11); </p><p>
80、<b> } </b></p><p> if(k1num==8) </p><p><b> {</b></p><p><b> f--; </b></p><p><b> if(f==-1)</b></p><p>
81、;<b> f=59; </b></p><p> write_fsm(14,f); </p><p> write_com(0x80+0x40+14); </p><p><b> } </b></p><p><b> } </b></p><
82、p><b> }</b></p><p><b> }</b></p><p> void keyk4()//S4是退出菜單鍵</p><p><b> { </b></p><p> if(S4==0) </p><p><b&g
83、t; { </b></p><p> delay(5); </p><p> if(S4==0) </p><p><b> TR0=1; </b></p><p><b> { </b></p><p> while(!S4); </p>
84、<p><b> k1num=0; </b></p><p> write_com(0x0c);//開顯示,不顯示光標,光標不閃爍</p><p><b> } </b></p><p><b> }</b></p><p><b> }&l
85、t;/b></p><p> void keyk1()//菜單光標設(shè)置</p><p><b> {</b></p><p> if(S1==0) </p><p><b> {</b></p><p> delay(10); </p><
86、;p> if(S1==0) </p><p><b> { </b></p><p> while(!S1); </p><p> k1num++; </p><p> TR0=0; //關(guān)定時中斷 </p><p> if(k1num==1) </p&
87、gt;<p><b> { </b></p><p> write_com(0x80+0x40+8);</p><p> write_com(0x0f);//開顯示,顯示光標,光標閃爍 </p><p><b> } </b></p><p> if(k1nu
88、m==2) </p><p><b> { </b></p><p> write_com(0x80+0x40+5);</p><p> write_com(0x0f);</p><p><b> } </b></p><p> if(k1num==3
89、) </p><p><b> { </b></p><p> write_com(0x80+0x40+2); </p><p> write_com(0x0f);</p><p><b> } </b></p><p> if(k1num==4) <
90、;/p><p><b> { </b></p><p> write_com(0x80+0x00+8);</p><p> write_com(0x0f);</p><p><b> } </b></p><p> if(k1num==5)</p>&l
91、t;p><b> { </b></p><p> write_com(0x80+0x00+5);</p><p> write_com(0x0f);</p><p><b> } </b></p><p> if(k1num==6) </p><p&
92、gt;<b> { </b></p><p> write_com(0x80+0x00+1);</p><p> write_com(0x0f);</p><p><b> } </b></p><p> if(k1num==7) </p><p><b&
93、gt; { </b></p><p> write_com(0x80+0x40+11); </p><p> write_com(0x0f);</p><p><b> } </b></p><p> if(k1num==8) </p><p><b> { &l
94、t;/b></p><p> write_com(0x80+0x40+14); </p><p> write_com(0x0f);</p><p><b> } </b></p><p><b> } </b></p><p><b> } &l
95、t;/b></p><p> jiaxian(); </p><p> jianxian(); </p><p><b> keyk4();</b></p><p><b> }</b></p><p> void init()//啟動 LCD初始化數(shù)據(jù)&
96、lt;/p><p><b> { </b></p><p> uchar num; </p><p> lcd_rs=0; </p><p> lcd_en=0; </p><p><b> shi=0; </b></p><p><b&g
97、t; fen=0; </b></p><p><b> miao=0; </b></p><p> nian=0000; </p><p><b> yue=7; </b></p><p><b> ri=1; </b></p><p&
98、gt;<b> s=21; </b></p><p><b> f=48; </b></p><p> write_com(0x38);//不監(jiān)察忙信號 </p><p> write_com(0x0f);//顯示開光標設(shè)置 </p><p> write_com(0x06);//顯示光標
99、移動設(shè)置 </p><p> write_com(0x01);//顯示清屏 </p><p> write_com(0x80);//數(shù)據(jù)指針 </p><p> write_com(0x80+0x00);</p><p> for(num=0;num<16;num++)//延時15ms </p><p>
100、<b> {</b></p><p> write_data(table[num]);//年月日的數(shù)據(jù)延時</p><p> delay(5); </p><p><b> }</b></p><p> write_com(0x80+0x40); </p><p>
101、; for(num=0;num<16;num++) </p><p><b> { </b></p><p> write_data(table1[num]);//時的延時 </p><p> delay(5); </p><p><b> }</b></p>
102、<p> TMOD=0x01; </p><p> TH0=(65536-50000)/256; </p><p> TL0=(65536-50000)%256; </p><p><b> EA=1; </b></p><p><b> ET0=1; </b></p&
103、gt;<p><b> TR0=1;</b></p><p><b> }</b></p><p> void display()</p><p><b> {</b></p><p> if(count==20)//是秒是的時間</p>
104、<p><b> {</b></p><p><b> count=0; </b></p><p><b> miao++; </b></p><p> if(miao==60) </p><p><b> { </b></p&
105、gt;<p><b> miao=0; </b></p><p><b> fen++; </b></p><p> if(fen==60) </p><p><b> { </b></p><p><b> fen=0; </b>
106、;</p><p><b> shi++; </b></p><p> if(shi==24) </p><p><b> { </b></p><p><b> shi=0; </b></p><p><b> ri++; <
107、/b></p><p><b> } </b></p><p> if(yue==2) </p><p><b> {</b></p><p> if((nian%4==0&&nian%100!=0)|(nian%400==0))//計算閏年 </p>&
108、lt;p><b> {</b></p><p><b> yue29();</b></p><p><b> } </b></p><p><b> else </b></p><p><b> {</b></p
109、><p><b> yue28();</b></p><p><b> } </b></p><p><b> } </b></p><p> else if((yue==4)|(yue==6)|(yue==9)|(yue==11))//計算大小月</p>&
110、lt;p><b> { </b></p><p><b> yue30();</b></p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p
111、><p><b> yue31();</b></p><p><b> } </b></p><p> if(yue>12)</p><p><b> {</b></p><p><b> yue=1;</b></
112、p><p><b> nian++;</b></p><p><b> }</b></p><p><b> { </b></p><p> if(nian>999) </p><p><b> nian=0; </b>
113、</p><p> write_nian(1,nian);</p><p><b> }</b></p><p><b> { </b></p><p> write_nyr(5,yue);</p><p><b> }</b></p&g
114、t;<p><b> { </b></p><p> write_nyr(8,ri);</p><p><b> } </b></p><p> write_fsm(2,shi);</p><p><b> } </b></p><p
115、> write_fsm(5,fen);</p><p><b> } </b></p><p> write_fsm(8,miao);</p><p><b> { </b></p><p> write_fsm(11,s); </p><p><b&g
116、t; } </b></p><p><b> { </b></p><p> write_fsm(14,f); </p><p><b> } </b></p><p><b> }</b></p><p><b> }
117、</b></p><p> void yue31()//31天的月份</p><p><b> { </b></p><p><b> if(ri>31)</b></p><p><b> {</b></p><p><b
118、> ri=1;</b></p><p><b> yue++;</b></p><p><b> }</b></p><p><b> }</b></p><p> void yue30()//30天的月份</p><p>&
119、lt;b> { </b></p><p><b> if(ri>30)</b></p><p><b> {</b></p><p><b> ri=1;</b></p><p><b> yue++;</b></p
120、><p><b> }</b></p><p><b> }</b></p><p> void yue29()//29天的月份</p><p><b> { </b></p><p><b> if(ri>29)</b>
121、;</p><p><b> {</b></p><p><b> ri=1;</b></p><p><b> yue++;</b></p><p><b> }</b></p><p><b> }</
122、b></p><p> void yue28()//28天的月份</p><p><b> { </b></p><p><b> if(ri>28)</b></p><p><b> {</b></p><p><b>
123、 ri=1;</b></p><p><b> yue++;</b></p><p><b> }</b></p><p><b> }</b></p><p> void main()//主函數(shù)</p><p><b>
124、 { </b></p><p><b> P0=0; </b></p><p><b> init(); </b></p><p><b> while(1) </b></p><p><b> { </b></p>&l
125、t;p><b> keyk1(); </b></p><p> display();</p><p><b> Timing();</b></p><p><b> if(ss==0)</b></p><p><b> {</b><
126、/p><p><b> delay(2);</b></p><p><b> if(ss==0)</b></p><p><b> {</b></p><p> mm++; //mm記錄按鍵ss的按下次數(shù)</p><p><b> de
127、lay(5);</b></p><p> while(!ss);</p><p><b> }</b></p><p><b> }</b></p><p> if(mm==1)//如果ss第一次按下,開始啟動秒表</p><p><b> {
128、</b></p><p><b> ji++;</b></p><p> if(ji==100)</p><p><b> {</b></p><p><b> ji=0;</b></p><p><b> }</b
129、></p><p> miaobiao(ji);</p><p> delay(50);</p><p><b> } </b></p><p><b> if(mm==3)</b></p><p><b> {</b><
130、/p><p><b> mm=0;</b></p><p><b> ji=0;</b></p><p><b> }</b></p><p> miaobiao(ji);</p><p><b> }</b></p&g
131、t;<p><b> }</b></p><p> void time0() interrupt 1//定時器0設(shè)置為模式1,50毫秒的定時</p><p><b> { </b></p><p> TH0=(65536-50000)/256; </p><p> TL0=(
132、65536-50000)%256;</p><p> count++;//時鐘</p><p><b> }</b></p><p> void Timing()//定時鬧鐘設(shè)置。</p><p><b> { </b></p><p> if(shi==s&
133、;&fen==f) </p><p><b> FMQ=0;</b></p><p><b> else </b></p><p><b> FMQ=1; </b></p><p><b> }</b></p><p
134、> 七、proteus仿真圖及實物顯示效果</p><p> 圖7 Proteus仿真圖</p><p><b> 圖8實物圖</b></p><p><b> 八、設(shè)計總結(jié)</b></p><p> 做了兩周的課程設(shè)計,有很多的心得體會,有關(guān)于單片機的,也有關(guān)于模電數(shù)電等基礎(chǔ)科目的
135、。因為單片機已經(jīng)很久沒復(fù)習(xí),剛拿到題目,不知道從哪入手,后來通過對書本的回顧,加深了對單片機的記憶。有些知識會遷移和聯(lián)系模電數(shù)電。課堂教學(xué)考慮到大多數(shù)同學(xué)的需求,主要強調(diào)“基本”——基本知識、基本理論、基本方法、基本技能。而這次設(shè)計正是為我們提供了一個深入學(xué)習(xí)、探索的機會,成為課堂教學(xué)的有益補充。我們正面臨就業(yè)問題,這次課設(shè)給了我們一個機會去試驗。</p><p> 單片機理論的學(xué)習(xí)是為課程的設(shè)計作準備的,但有
136、時學(xué)習(xí)的理論也解決不了實踐中的問題。實踐中獲得的知識能讓我對單片機的知識有更好的認識和理解。雖然這次的課程設(shè)計我參考了一些文獻資料,沒有做到創(chuàng)新,但在對程序的讀寫過程中我明白了許多。這次課程設(shè)計的最大收獲是只有把理論用到實踐中我們才能真正掌握好所學(xué)知識。</p><p><b> 九、參考文獻</b></p><p> [1] 謝自美.電子線路設(shè)計·實驗
137、·測試[M].武漢:華中理工大學(xué)出版社,1992.</p><p> [2] 何立民.單片機應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,1993.</p><p> [3] 樓然笛.單片機開發(fā)[M].北京:人民郵電出版社,1994. [4] 付家才.單片機控制工程實踐技術(shù)[M].北京:化學(xué)工業(yè)出版社 2004.3. [5] 李光才.單片機課程設(shè)計實例指導(dǎo)
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機數(shù)字鐘課程設(shè)計
- 單片機課程設(shè)計---數(shù)字鐘設(shè)計
- 單片機課程設(shè)計--- 簡易數(shù)字鐘
- 單片機課程設(shè)計數(shù)字鐘
- 單片機課程設(shè)計--數(shù)字鐘電子鐘
- 單片機課程設(shè)計--基于單片機數(shù)字鐘的設(shè)計
- 基于單片機的數(shù)字鐘課程設(shè)計
- 簡易數(shù)字鐘的單片機課程設(shè)計
- 基于單片機的數(shù)字鐘課程設(shè)計
- 課程設(shè)計--單片機控制的數(shù)字鐘
- 單片機課程設(shè)計數(shù)字鐘報告
- 單片機課程設(shè)計報告-數(shù)字鐘的設(shè)計
- 單片機課程設(shè)計--智能電子數(shù)字鐘設(shè)計
- 簡易數(shù)字鐘的單片機課程設(shè)計1
- 課程設(shè)計---基于單片機的數(shù)字鐘的設(shè)計
- 單片機數(shù)字鐘畢業(yè)設(shè)計---單片機設(shè)計數(shù)字鐘
- 單片機多功能電子數(shù)字鐘課程設(shè)計報告
- 單片機課程設(shè)計報告-數(shù)字鐘的設(shè)計與實現(xiàn)
- 單片機的數(shù)字鐘設(shè)計
- 江蘇大學(xué)單片機課程設(shè)計-多功能數(shù)字鐘的設(shè)計
評論
0/150
提交評論