版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 單片機(jī)系統(tǒng)設(shè)計(jì)項(xiàng)目(三級項(xiàng)目)</p><p><b> 設(shè)計(jì)說明書</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è)計(jì)周數(shù) : 2周 </p><p> 設(shè)計(jì)成績 : </p><p> 2013年6月21日</p><p><b> 目錄</b></p><p><b> 摘要2<
4、;/b></p><p> 一、課程設(shè)計(jì)目的2</p><p><b> 二、設(shè)計(jì)要求2</b></p><p> 三、單片機(jī)數(shù)字鐘的基本原理2</p><p> 四、總體方案設(shè)計(jì)3</p><p> 4.1 電路的總體原理框圖3</p><p>
5、 4.2 實(shí)現(xiàn)時(shí)鐘計(jì)時(shí)的基本方法3</p><p> 4.3總體方案介紹4</p><p> 五、數(shù)字鐘的硬件設(shè)計(jì)4</p><p> 5.1硬件電路的設(shè)計(jì)原則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è)計(jì)7</p><p> 5.4時(shí)鐘顯示校正電路8</p><p> 六 、系統(tǒng)軟件設(shè)計(jì)9</p><p> 6.1軟件設(shè)計(jì)分析9</p><p> 6.2 源程序清單10</p><p>
7、 七、proteus仿真圖及實(shí)物顯示效果27</p><p><b> 八、設(shè)計(jì)總結(jié)28</b></p><p><b> 九、參考文獻(xiàn)29</b></p><p> 摘要:該電子時(shí)鐘由89C51,BUTTON,液晶屏等構(gòu)成,采用晶振電路作為驅(qū)動電路,由延時(shí)程序和循環(huán)程序產(chǎn)生的一秒定時(shí),達(dá)到時(shí)分秒的計(jì)時(shí),六十秒
8、為</p><p> 一分鐘,六十分鐘為一小時(shí),滿二十四小時(shí)為一天。</p><p> 關(guān)鍵詞:單片機(jī);電子時(shí)鐘;鍵盤控制</p><p><b> 一、課程設(shè)計(jì)目的</b></p><p> 通過《單片機(jī)原理與應(yīng)用》課程設(shè)計(jì),使學(xué)生掌握單片機(jī)及其擴(kuò)展系統(tǒng)設(shè)計(jì)的方法和設(shè)計(jì)原則及相應(yīng)的硬件調(diào)試的方法。進(jìn)一步加深單片
9、機(jī)及其擴(kuò)展系統(tǒng)設(shè)計(jì)和應(yīng)用的理解。</p><p><b> 二、設(shè)計(jì)要求</b></p><p> 1、準(zhǔn)確計(jì)時(shí),以數(shù)字形式顯示時(shí)、分、秒的時(shí)間。</p><p> 2、年以12個(gè)月計(jì)時(shí)形成,月以28(或29或30或31)日計(jì)時(shí)形成,日以24小時(shí)計(jì)時(shí)形式,分秒計(jì)時(shí)為60進(jìn)位。 </p><p> 3、校正時(shí)間功能
10、,即能隨意設(shè)定走時(shí)時(shí)間。</p><p> 4、鬧鐘功能,一旦走時(shí)到該時(shí)間,能以聲形式告警提示。</p><p> 5、設(shè)計(jì)5V直流電源,系統(tǒng)時(shí)鐘電路、復(fù)位電路。 </p><p> 6、帶有秒表功能,按鍵控制啟動、暫停、清零。 </p><p> 三、單片機(jī)數(shù)字鐘的基本原理</p><p> 它是利用單片機(jī)
11、的內(nèi)部的定時(shí)/計(jì)數(shù)器工作與定時(shí)方式,對機(jī)器周期計(jì)數(shù)形成基準(zhǔn)時(shí)間(如10ms)然后用另外一個(gè)計(jì)數(shù)器或軟件計(jì)數(shù)的形式對基準(zhǔn)時(shí)間進(jìn)行計(jì)數(shù)形成秒(如對10ms計(jì)數(shù)100次),“秒”計(jì)數(shù)60次“分”,“分”計(jì)數(shù)60次形成“時(shí)”,“時(shí)”計(jì)數(shù)24次形成“日”,“日”計(jì)數(shù)為28(或29或30或31)次形成“月”,“月”計(jì)數(shù)12次形成“年”,年計(jì)數(shù)999次就清零,然后通過譯碼器,數(shù)碼管把他們的內(nèi)容在相應(yīng)的位置顯示出來。在具體的設(shè)計(jì)時(shí)定時(shí)器采用中斷方式工作
12、,對時(shí)鐘的形成在終中斷序中實(shí)現(xiàn),在主程序只是對定時(shí)/計(jì)數(shù)器的定義初始化,調(diào)用顯示程序和控制程序的初始化。另外為了使用的方便,也設(shè)計(jì)了按鍵,可以通過按鍵對時(shí)分秒進(jìn)行調(diào)整,這樣程序就加了按鍵程序。</p><p><b> 四、總體方案設(shè)計(jì)</b></p><p> 4.1 電路的總體原理框圖</p><p> 本次設(shè)計(jì)時(shí)鐘電路,使用了ATC
13、89C51單片機(jī)芯片控制電路,單片機(jī)控制電路簡單且省去了很多復(fù)雜的線路,使得電路簡明易懂,使用鍵盤鍵上的按鍵來調(diào)整時(shí)鐘的年、月、日、時(shí)、分、秒,用一揚(yáng)聲器來進(jìn)行定時(shí)提醒,同時(shí)使用匯編語言程序來控制整個(gè)時(shí)鐘顯示,使得編程變得更容易,這樣通過四個(gè)模塊:鍵盤、芯片、揚(yáng)聲器、LCD液晶屏顯示即可滿足設(shè)計(jì)要求??傇O(shè)計(jì)原理框圖如下圖所示:</p><p><b> 圖1原理框圖</b></p&g
14、t;<p> 4.2 實(shí)現(xiàn)時(shí)鐘計(jì)時(shí)的基本方法</p><p> 利用STC系列單片機(jī)的可編程定時(shí)/計(jì)數(shù)器、中斷系統(tǒng)來實(shí)現(xiàn)時(shí)鐘計(jì)數(shù)。</p><p> (1) 計(jì)數(shù)初值計(jì)算:</p><p> 把定時(shí)器設(shè)為工作方式1,定時(shí)時(shí)間為50ms,則計(jì)數(shù)溢出20次即得時(shí)鐘計(jì)時(shí)最小單位秒,而100次計(jì)數(shù)可用軟件方法實(shí)現(xiàn)。</p><p&g
15、t; 假設(shè)使用T/C0,方式1,50ms定時(shí),fosc=12MHz。</p><p> 則初值X滿足(216-X)×1/12MHz×12μs =50000μs</p><p> X=15536→0011110010110000→3CB0H</p><p> (2) 采用中斷方式進(jìn)行溢出次數(shù)累計(jì),計(jì)滿20次為秒計(jì)時(shí)(1秒);</p&g
16、t;<p> (3) 從秒到分、從分到時(shí)、從時(shí)到日、從日到月、從月到年的計(jì)時(shí)是通過累加和數(shù)值比較實(shí)現(xiàn)。</p><p><b> 4.3總體方案介紹</b></p><p> 4.3.1 計(jì)時(shí)方案</p><p> 利用STC89C51單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器進(jìn)行中斷時(shí),配合軟件延時(shí)實(shí)現(xiàn)年、月、日、時(shí)、分、秒的計(jì)時(shí)。該方案
17、節(jié)省硬件成本,且能使讀者在定時(shí)/計(jì)數(shù)器的使用、中斷及程序設(shè)計(jì)方面得到鍛煉與提高,對單片機(jī)的指令系統(tǒng)能有更深入的了解,從而對學(xué)好單片機(jī)技術(shù)這門課程起到一定的作用。</p><p> 4.3.2 控制方案</p><p> STC89C51的P0口和P1口外接由八個(gè)LED數(shù)碼管(LED8~LED1)構(gòu)成的顯示器,用P0口作LED的段碼輸出口,P1口作八個(gè)LED數(shù)碼管的位控輸出線,P3口外接
18、四個(gè)按鍵A、B、C構(gòu)成鍵盤電路。</p><p> STC89C51 是一種低功耗,高性能的CMOS 8位微型計(jì)算機(jī)。它帶有8K Flash 可編程和擦除的只讀存儲器(EPROM),該器件采用ATMEL的高密度非易失性存儲器技術(shù)制造,與工業(yè)上標(biāo)準(zhǔn)的80C51和80C52的指令系統(tǒng)及引腳兼容,片內(nèi)Flash 集成在一個(gè)芯片上,可用與解決復(fù)雜的問題,且成本較低。簡易電子鐘的功能不復(fù)雜,采用其現(xiàn)有的I/O便可完成,所
19、以本設(shè)計(jì)中采用此的設(shè)計(jì)方案。</p><p> 五、數(shù)字鐘的硬件設(shè)計(jì)</p><p> 5.1硬件電路的設(shè)計(jì)原則</p><p> 在性價(jià)比滿足應(yīng)用系統(tǒng)要求的情況下,選擇更可靠,更熟悉的單片機(jī)縮短研制周期。</p><p> 盡可能選擇自己較為熟悉的應(yīng)用電路,以提高系統(tǒng)的可靠性。</p><p> 單片機(jī)內(nèi)部
20、的資源與外部的擴(kuò)展資源應(yīng)在滿足系統(tǒng)設(shè)計(jì)的基礎(chǔ)上留有余地,為進(jìn)一步的升級和擴(kuò)展提供方便。</p><p> 應(yīng)充分的結(jié)合軟件方案考慮硬件的結(jié)構(gòu),通常硬件功能較完善,其相應(yīng)的軟件程序就簡單,但硬件的成本較高,而功能較低,其相應(yīng)的軟件就復(fù)雜,其實(shí)際常用軟件代替硬件來降低成本。</p><p> 整個(gè)系統(tǒng)相關(guān)的器件盡可能的做到性能相匹配。</p><p> 充分的考慮
21、系統(tǒng)的抗干擾性,如具有抗干擾的單片機(jī)并充分的帥選芯片與器件,在電路中采取隔離或屏蔽的措施等。</p><p><b> 5.2 最小系統(tǒng)</b></p><p> 5.2.1 芯片分析</p><p> STC89C51單片機(jī)引腳圖如下:</p><p> 圖2 STC89C51引腳圖</p>&l
22、t;p> MCS-51單片機(jī)是標(biāo)準(zhǔn)的40引腳雙列直插式集成電路芯片,其各引腳功能如下:</p><p> VCC:+5V電源。</p><p><b> VSS:接地。</b></p><p> RST:復(fù)位信號。當(dāng)輸入的復(fù)位信號延續(xù)兩個(gè)機(jī)器周期以上的高電平時(shí)即為有效,用完成單片機(jī)的復(fù)位初始化操作。</p><
23、p> XTAL1和XTAL2:外接晶體引線端。當(dāng)使用芯片內(nèi)部時(shí)鐘時(shí),此二引線端用于外接石英晶體和微調(diào)電容;當(dāng)使用外部時(shí)鐘時(shí),用于接外部時(shí)鐘脈沖信號。</p><p> P0口:P0口為一個(gè)8位漏極開路雙向I/O口,當(dāng)作輸出口使用時(shí),必須接上拉電阻才能有高電平輸出;當(dāng)作輸入口使用時(shí),必須先向電路中的鎖存器寫入“1”,使FET截止,以避免鎖存器為“0”狀態(tài)時(shí)對引腳讀入的干擾。</p><
24、p> P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,它不再需要多路轉(zhuǎn)接電路MUX;因此它作為輸出口使用時(shí),無需再外接上拉電阻,當(dāng)作為輸入口使用時(shí),同樣也需先向其鎖存器寫“1”,使輸出驅(qū)動電路的FET截止。</p><p> P2口:P2口電路比P1口電路多了一個(gè)多路轉(zhuǎn)接電路MUX,這又正好與P0口一樣。P2口可以作為通用的I/O口使用,這時(shí)多路轉(zhuǎn)接電路開關(guān)倒向鎖豐存器Q端。</p>
25、<p> P3口:P3口特點(diǎn)在于,為適應(yīng)引腳信號第二功能的需要,增加了第二功能控制邏輯。當(dāng)作為I/O口使用時(shí),第二功能信號引線應(yīng)保持高電平,與非門開通,以維持從鎖存器到輸出端數(shù)據(jù)輸出通路的暢通。當(dāng)輸出第二功能信號時(shí),該位應(yīng)應(yīng)置“1”,使與非門對第二功能信號的輸出是暢通的,從而實(shí)現(xiàn)第二功能信號的輸出,具體第二功能如表1所示。</p><p> 表1 P3端口引腳兼用功能表</p>&
26、lt;p> 5.2.2 晶振電路</p><p> 下圖所示為時(shí)鐘電路原理圖,在AT89S51芯片內(nèi)部有一個(gè)高增益反相放大器,其輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。而在芯片內(nèi)部,XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。時(shí)鐘電路產(chǎn)生的振蕩脈沖經(jīng)過觸發(fā)器進(jìn)行二分頻之后,才成為單片機(jī)的時(shí)鐘脈沖信號。</p><p><b&
27、gt; 圖3 晶振電路</b></p><p> 5.3 LCD1602顯示模塊設(shè)計(jì)</p><p> 5.3.1 LCD1602主要技術(shù)參數(shù)</p><p> 顯示容量:16×2 個(gè)字符 </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 采用標(biāo)準(zhǔn)的 14腳(無背光)或 16腳(
29、帶背光)接口,各引腳接口說明如下表2所示: </p><p> 5.3.3 LCD寄存器的選擇 </p><p><b> 表2引腳功能說明</b></p><p> 5.4時(shí)鐘顯示校正電路</p><p> 本設(shè)計(jì)利用按鍵開關(guān)來校正時(shí)鐘顯示的數(shù)字。當(dāng)按鈕按下時(shí),將在相應(yīng)的端口輸入一個(gè)低電平,通過相應(yīng)的程序來改變
30、時(shí)鐘顯示。其中菜單按鍵開關(guān)用來選</p><p> 擇要修改的數(shù)字;下調(diào)按鍵用來增加所選數(shù)字的數(shù)值;上調(diào)按鍵用來減小所選數(shù)字的數(shù)值;退出按鍵是退出校正電路。</p><p> 圖5 時(shí)鐘校正電路圖</p><p><b> 六 、系統(tǒng)軟件設(shè)計(jì)</b></p><p><b> 6.1軟件設(shè)計(jì)分析<
31、/b></p><p> 在編程上,首先進(jìn)行了初始化,定義程序的的入口地址以及中斷的入口地址,在主程序開始定義了一組固定單元用來儲存計(jì)數(shù)的時(shí).分.秒,在顯示初值之后,進(jìn)入主循環(huán)。在主程序中,對不同的按鍵進(jìn)行掃描,實(shí)現(xiàn)秒表,時(shí)間調(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;//聲明時(shí)分秒</p><p> uint nian, yue,ri,ji=0,mm=0;//聲明年月日,秒表計(jì)數(shù),和秒表按鍵次數(shù)</p><p> uchar f,s;//定時(shí)器/</p><p>
38、 void delay(uchar z)//延時(shí)函數(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)//計(jì)算時(shí)分秒位</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)//計(jì)算月日位</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)//計(jì)算年位,年是百位</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);//開顯示,不顯示光標(biāo),光標(biāo)不閃爍</p><p><b> } </b></p><p><b> }</b></p><p><b> }&l
85、t;/b></p><p> void keyk1()//菜單光標(biāo)設(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)定時(shí)中斷 </p><p> if(k1num==1) </p&
87、gt;<p><b> { </b></p><p> write_com(0x80+0x40+8);</p><p> write_com(0x0f);//開顯示,顯示光標(biāo),光標(biāo)閃爍 </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);//顯示開光標(biāo)設(shè)置 </p><p> write_com(0x06);//顯示光標(biāo)
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++)//延時(shí)15ms </p><p>
100、<b> {</b></p><p> write_data(table[num]);//年月日的數(shù)據(jù)延時(shí)</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]);//時(shí)的延時(shí) </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)//是秒是的時(shí)間</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))//計(jì)算閏年 </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))//計(jì)算大小月</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//定時(shí)器0設(shè)置為模式1,50毫秒的定時(shí)</p><p><b> { </b></p><p> TH0=(65536-50000)/256; </p><p> TL0=(
132、65536-50000)%256;</p><p> count++;//時(shí)鐘</p><p><b> }</b></p><p> void Timing()//定時(shí)鬧鐘設(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仿真圖及實(shí)物顯示效果</p><p> 圖7 Proteus仿真圖</p><p><b> 圖8實(shí)物圖</b></p><p><b> 八、設(shè)計(jì)總結(jié)</b></p><p> 做了兩周的課程設(shè)計(jì),有很多的心得體會,有關(guān)于單片機(jī)的,也有關(guān)于模電數(shù)電等基礎(chǔ)科目的
135、。因?yàn)閱纹瑱C(jī)已經(jīng)很久沒復(fù)習(xí),剛拿到題目,不知道從哪入手,后來通過對書本的回顧,加深了對單片機(jī)的記憶。有些知識會遷移和聯(lián)系模電數(shù)電。課堂教學(xué)考慮到大多數(shù)同學(xué)的需求,主要強(qiáng)調(diào)“基本”——基本知識、基本理論、基本方法、基本技能。而這次設(shè)計(jì)正是為我們提供了一個(gè)深入學(xué)習(xí)、探索的機(jī)會,成為課堂教學(xué)的有益補(bǔ)充。我們正面臨就業(yè)問題,這次課設(shè)給了我們一個(gè)機(jī)會去試驗(yàn)。</p><p> 單片機(jī)理論的學(xué)習(xí)是為課程的設(shè)計(jì)作準(zhǔn)備的,但有
136、時(shí)學(xué)習(xí)的理論也解決不了實(shí)踐中的問題。實(shí)踐中獲得的知識能讓我對單片機(jī)的知識有更好的認(rèn)識和理解。雖然這次的課程設(shè)計(jì)我參考了一些文獻(xiàn)資料,沒有做到創(chuàng)新,但在對程序的讀寫過程中我明白了許多。這次課程設(shè)計(jì)的最大收獲是只有把理論用到實(shí)踐中我們才能真正掌握好所學(xué)知識。</p><p><b> 九、參考文獻(xiàn)</b></p><p> [1] 謝自美.電子線路設(shè)計(jì)·實(shí)驗(yàn)
137、·測試[M].武漢:華中理工大學(xué)出版社,1992.</p><p> [2] 何立民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,1993.</p><p> [3] 樓然笛.單片機(jī)開發(fā)[M].北京:人民郵電出版社,1994. [4] 付家才.單片機(jī)控制工程實(shí)踐技術(shù)[M].北京:化學(xué)工業(yè)出版社 2004.3. [5] 李光才.單片機(jī)課程設(shè)計(jì)實(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)數(shù)字鐘課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---數(shù)字鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--- 簡易數(shù)字鐘
- 單片機(jī)課程設(shè)計(jì)數(shù)字鐘
- 單片機(jī)課程設(shè)計(jì)--數(shù)字鐘電子鐘
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)數(shù)字鐘的設(shè)計(jì)
- 基于單片機(jī)的數(shù)字鐘課程設(shè)計(jì)
- 簡易數(shù)字鐘的單片機(jī)課程設(shè)計(jì)
- 基于單片機(jī)的數(shù)字鐘課程設(shè)計(jì)
- 課程設(shè)計(jì)--單片機(jī)控制的數(shù)字鐘
- 單片機(jī)課程設(shè)計(jì)數(shù)字鐘報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告-數(shù)字鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--智能電子數(shù)字鐘設(shè)計(jì)
- 簡易數(shù)字鐘的單片機(jī)課程設(shè)計(jì)1
- 課程設(shè)計(jì)---基于單片機(jī)的數(shù)字鐘的設(shè)計(jì)
- 單片機(jī)數(shù)字鐘畢業(yè)設(shè)計(jì)---單片機(jī)設(shè)計(jì)數(shù)字鐘
- 單片機(jī)多功能電子數(shù)字鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告-數(shù)字鐘的設(shè)計(jì)與實(shí)現(xiàn)
- 單片機(jī)的數(shù)字鐘設(shè)計(jì)
- 江蘇大學(xué)單片機(jī)課程設(shè)計(jì)-多功能數(shù)字鐘的設(shè)計(jì)
評論
0/150
提交評論