2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

評論

0/150

提交評論