單片機(jī)數(shù)字鐘課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論