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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p>  ——基于單片機(jī)的多功能綜合應(yīng)用系統(tǒng)的設(shè)計(jì)</p><p><b>  摘要</b></p><p>  近年來隨著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷地走向深入,同時(shí)帶動(dòng)傳統(tǒng)控制檢測(cè)日新月異更新。在實(shí)時(shí)檢測(cè)和自動(dòng)控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往

2、是作為一個(gè)核心部件來使用,僅單片機(jī)方面知識(shí)是不夠的,還應(yīng)根據(jù)具體硬件結(jié)構(gòu),以及針對(duì)具體應(yīng)用對(duì)象特點(diǎn)的軟件結(jié)合,加以完善。本次課程設(shè)計(jì)采用AT89C51單片機(jī)作為主要核心部件,加上LED、LCD、鍵盤、LED點(diǎn)陣等外圍設(shè)備,實(shí)現(xiàn)了鍵盤控制LED并以LCD顯示及LED點(diǎn)陣顯示和可校時(shí)數(shù)字時(shí)鐘、溫度控制等功能,這些功能貼近日常生活,非常具有現(xiàn)實(shí)意義。</p><p><b>  目錄</b><

3、;/p><p><b>  摘要2</b></p><p><b>  一、概述4</b></p><p><b>  1.1設(shè)計(jì)意義4</b></p><p><b>  1.2設(shè)計(jì)目標(biāo)5</b></p><p>  第一部分

4、:基本功能5</p><p>  第二部分:基本應(yīng)用模塊5</p><p>  第三部分:基于仿真的擴(kuò)展模塊5</p><p>  第四部分:賽前訓(xùn)練模塊5</p><p><b>  1.3設(shè)計(jì)要求5</b></p><p>  1.4 任務(wù)分配6</p><p&

5、gt;  二、硬件和程序設(shè)計(jì)7</p><p>  元器件及開發(fā)環(huán)境7</p><p><b>  元器件清單7</b></p><p><b>  開發(fā)環(huán)境8</b></p><p>  第一部分:基本功能8</p><p>  1.1 單片機(jī)最小系統(tǒng)8<

6、/p><p>  1.2 LED彩燈模塊10</p><p>  1.3 LCD 顯示模塊10</p><p>  1.4 鍵盤控制模塊11</p><p>  1.5 第一部分整體圖11</p><p>  1.6 硬件實(shí)物圖12</p><p>  1.7 程序設(shè)計(jì)13</p&

7、gt;<p>  第二部分:基本應(yīng)用模塊13</p><p>  2.1 數(shù)字時(shí)鐘13</p><p>  2.2 程序設(shè)計(jì)14</p><p>  第三部分:基于仿真的擴(kuò)展模塊15</p><p>  3.1 點(diǎn)陣基礎(chǔ)——8*8點(diǎn)陣調(diào)節(jié)15</p><p>  3.2 點(diǎn)陣模塊——16*16點(diǎn)

8、陣顯示15</p><p>  3.3 程序設(shè)計(jì)16</p><p>  第四部分:賽前訓(xùn)練模塊16</p><p>  4.1 系統(tǒng)描述16</p><p>  4.2 溫度采集模塊17</p><p>  4.3 時(shí)鐘模塊17</p><p>  4.4 通信模塊17</

9、p><p>  4.5 顯示模塊18</p><p>  4.6 溫度控制系統(tǒng)整體圖18</p><p>  4.7 程序設(shè)計(jì)18</p><p>  三、總結(jié)和心得19</p><p><b>  四、參考資料20</b></p><p>  附錄(程序代碼節(jié)選)

10、21</p><p>  第一部分(節(jié)選主要部分)21</p><p>  第二部分(節(jié)選主要部分)23</p><p><b>  一、概述</b></p><p><b>  1.1設(shè)計(jì)意義</b></p><p>  本次單片機(jī)課程設(shè)計(jì)內(nèi)容包括單片機(jī)正常啟動(dòng)和復(fù)位,

11、LED花樣控制及亮度、色彩變化調(diào)節(jié),LCD液晶顯示屏的調(diào)節(jié),點(diǎn)陣LED的文字輸出,時(shí)鐘芯片DS1302的配置,溫度傳感器DS18B20的使用,以及鍵盤控制單片機(jī)工作,對(duì)以上技術(shù)的掌握可以有效地提高我們的實(shí)際應(yīng)用能力,如基于LED的節(jié)日藝術(shù)彩燈控制系統(tǒng)、溫度采集和實(shí)時(shí)監(jiān)控系統(tǒng)、電子日歷等,具有非常實(shí)際的意義和價(jià)值,使我們對(duì)知識(shí)的學(xué)習(xí)由理論提升到實(shí)踐,讓專業(yè)知識(shí)學(xué)習(xí)得到極大鞏固和提高。</p><p><b&g

12、t;  1.2設(shè)計(jì)目標(biāo)</b></p><p><b>  第一部分:基本功能</b></p><p>  1.設(shè)計(jì)并實(shí)現(xiàn)具有復(fù)位功能的單片機(jī)小系統(tǒng)。</p><p>  2.利用單片機(jī)進(jìn)行燈光的場(chǎng)景開關(guān)控制、循環(huán)點(diǎn)亮控制、花樣變化控制及速度變化控制。</p><p>  3.利用單片機(jī)進(jìn)行燈光的色彩連續(xù)變化

13、效果控制。</p><p>  4.利用單片機(jī)進(jìn)行燈光的三色聯(lián)動(dòng)定時(shí)控制(以交通燈為例)。</p><p>  5. 配合2至4項(xiàng)中功能,實(shí)現(xiàn)液晶屏輸出功能或狀態(tài)信息。</p><p>  6. 實(shí)現(xiàn)基于4X4鍵盤的輸入功能。</p><p>  第二部分:基本應(yīng)用模塊</p><p>  7. 數(shù)字時(shí)鐘的設(shè)計(jì)(要

14、求:顯示時(shí)間、調(diào)整時(shí)間、鬧鐘功能等)</p><p>  第三部分:基于仿真的擴(kuò)展模塊</p><p>  8.16x16點(diǎn)陣LED顯示同組同學(xué)漢字名。</p><p>  第四部分:賽前訓(xùn)練模塊</p><p><b>  9.溫度監(jiān)控系統(tǒng)</b></p><p><b>  1.3設(shè)

15、計(jì)要求</b></p><p>  1.能啟動(dòng)、停止單片機(jī);</p><p>  2.能通過開關(guān)(按鍵)進(jìn)行功能選擇;</p><p>  3.基本功能部分要體現(xiàn)循環(huán)、組合和色彩變化的控制功能和效果,實(shí)現(xiàn)三色聯(lián)動(dòng)定時(shí)控制,控制變化規(guī)律的類型或功能不少于5種。</p><p><b>  1.4 任務(wù)分配</b>

16、;</p><p>  根據(jù)組內(nèi)成員的擅長(zhǎng)方向,由紀(jì)琛負(fù)責(zé)電路仿真和程序設(shè)計(jì),馬浩負(fù)責(zé)硬件的搭建和調(diào)試。</p><p>  第一部分用時(shí)3周,第二部分用時(shí)2周,第三部分用時(shí)1周,第四部分用時(shí)3周,共用時(shí)9周。</p><p><b>  二、硬件和程序設(shè)計(jì)</b></p><p><b>  元器件及開發(fā)環(huán)境

17、</b></p><p><b>  元器件清單</b></p><p> ?。ㄑa(bǔ)充:由于本組第二部分設(shè)計(jì)要求,設(shè)計(jì)時(shí)自行增加了時(shí)鐘芯片DS1302和32.768KHz晶振各一個(gè))</p><p><b>  開發(fā)環(huán)境</b></p><p>  硬件仿真環(huán)境——Proteus 7<

18、;/p><p>  軟件開發(fā)環(huán)境——Keil µVision4</p><p><b>  第一部分:基本功能</b></p><p>  1.1 單片機(jī)最小系統(tǒng)</p><p>  1.1.1 復(fù)位電路</p><p>  1.1.2 晶振電路</p><p>  

19、1.1.3 最小系統(tǒng)整體圖</p><p>  1.2 LED彩燈模塊</p><p>  1.3 LCD 顯示模塊</p><p>  1.4 鍵盤控制模塊</p><p>  1.5 第一部分整體圖</p><p><b>  1.6 硬件實(shí)物圖</b></p><p>

20、;<b>  1.7 程序設(shè)計(jì)</b></p><p><b> ?。ㄔ敿?xì)程序見附錄)</b></p><p>  第二部分:基本應(yīng)用模塊</p><p><b>  2.1 數(shù)字時(shí)鐘</b></p><p>  2.1.1 DS1302時(shí)鐘電路</p><

21、p>  2.1.2 數(shù)字時(shí)鐘整體圖</p><p><b>  2.2 程序設(shè)計(jì)</b></p><p>  第三部分:基于仿真的擴(kuò)展模塊</p><p>  3.1 點(diǎn)陣基礎(chǔ)——8*8點(diǎn)陣調(diào)節(jié)</p><p>  3.2 點(diǎn)陣模塊——16*16點(diǎn)陣顯示</p><p><b> 

22、 3.3 程序設(shè)計(jì)</b></p><p><b>  (見壓縮包附件)</b></p><p>  第四部分:賽前訓(xùn)練模塊</p><p><b>  4.1 系統(tǒng)描述</b></p><p>  本系統(tǒng)由AT89C51做主控芯片,外部直流穩(wěn)壓電源給系統(tǒng)供電(未給出電源詳細(xì)設(shè)計(jì)),通過

23、I2C與24C02C構(gòu)成的外部存儲(chǔ)電路通信讀取預(yù)存的溫度上下限值,通過DS1302時(shí)鐘模塊讀取準(zhǔn)確的時(shí)間信息,通過DS18B20進(jìn)行溫度采集,當(dāng)采集溫度與預(yù)設(shè)的上下限溫度比較,高于上限則紅燈亮蜂鳴器響且啟動(dòng)風(fēng)扇進(jìn)行降溫,低于下限則藍(lán)燈亮蜂鳴器響且啟動(dòng)電熱絲進(jìn)行升溫,考慮到要顯示的信息較多,系統(tǒng)使用12864液晶AMPIRE128X64進(jìn)行數(shù)據(jù)顯示,當(dāng)控制方式切換為手動(dòng)模式時(shí),使用按鈕控制風(fēng)扇和電熱絲,串口RS-232用于與PC進(jìn)行通信,

24、可以手動(dòng)設(shè)定溫度上下限、當(dāng)前時(shí)間、工作模式(自動(dòng)、手動(dòng))。由于時(shí)間和個(gè)人能力問題,本電路的串口通信功能未得到完善,軟件設(shè)計(jì)也存在問題,雖然基本檢測(cè)和自動(dòng)控制能實(shí)現(xiàn),但離預(yù)期可基本投入實(shí)際應(yīng)用的目標(biāo)還很遙遠(yuǎn)。</p><p>  4.2 溫度采集模塊</p><p><b>  4.3 時(shí)鐘模塊</b></p><p><b>  4.

25、4 通信模塊</b></p><p><b>  4.5 顯示模塊</b></p><p>  4.6 溫度控制系統(tǒng)整體圖</p><p><b>  4.7 程序設(shè)計(jì)</b></p><p> ?。ㄔ敿?xì)見壓縮包附件)</p><p><b>  三、總

26、結(jié)和心得</b></p><p>  在這次的單片機(jī)課程設(shè)計(jì)實(shí)驗(yàn)過程中,我遇到過很多難題,比如,如何調(diào)節(jié)占空比使得三色燈的顏色更具連續(xù)性,如何配置DS1302芯片,如何進(jìn)行LCD的初始化,如何使用較少的端口連接4個(gè)8*8點(diǎn)陣組成一個(gè)16*16點(diǎn)陣、如何溫度采樣等等,這些問題都曾導(dǎo)致我們的試驗(yàn)進(jìn)度緩慢,因?yàn)槲沂秦?fù)責(zé)仿真和程序部分的,如果我這邊出不來,硬件那邊就無(wú)法進(jìn)行,因此我經(jīng)常需要查閱大量網(wǎng)絡(luò)資料和館

27、藏書籍,實(shí)時(shí)學(xué)習(xí)相關(guān)知識(shí)以保證我的知識(shí)量足以設(shè)計(jì)出穩(wěn)定可靠的電路并寫出符合功能要求的程序代碼,這是很需要時(shí)間和精力的,因?yàn)楹芏嗲闆r都是,可能看了一上午的書,檢查了一上午的代碼,仍然解決不了我們遇到的問題。就比如我們后期調(diào)試第一部分的電路時(shí),LCD實(shí)物一直沒有顯示,但是仿真卻有反應(yīng),找了半天才發(fā)現(xiàn)有2個(gè)控制端口接錯(cuò)位了。從這些細(xì)小的問題可以看出,有時(shí)候一個(gè)產(chǎn)品的好壞并沒有決定于它大的硬件設(shè)計(jì)或者程序驅(qū)動(dòng)等,而往往是一些平時(shí)沒注意的細(xì)微之處

28、,在關(guān)鍵時(shí)刻導(dǎo)致整個(gè)產(chǎn)品的失敗。另一個(gè)教訓(xùn)就是,平時(shí)應(yīng)該多查閱資料,有時(shí)候使用別人已經(jīng)做好的模塊可以節(jié)省大量的時(shí)間,設(shè)計(jì)初期我花大量時(shí)間去調(diào)試LCD驅(qū)動(dòng)和鍵盤初始化,結(jié)果有現(xiàn)成的沒及時(shí)用,白白浪</p><p><b>  四、參考資料</b></p><p>  1.《單片機(jī)課程設(shè)計(jì)指導(dǎo)》(第2版) 北京航空航天大學(xué)出版社 作者:樓然苗 李光飛 2012.1<

29、/p><p>  2. 《單片機(jī)技術(shù)-課程設(shè)計(jì)與項(xiàng)目實(shí)例》 中國(guó)電力出版社 作者:李海濱等 2009.10</p><p>  3.《 Proteus教程-電子線路設(shè)計(jì)、制版與仿真》 清華大學(xué)出版社 作者:朱清彗 2008.9</p><p>  4.《 51系列單片機(jī)設(shè)計(jì)實(shí)例》(第2版) 北京航空航天大學(xué)出版社 作者:樓然苗 李光飛 2006.2</p>

30、<p>  5.《基于5103K的單片機(jī)實(shí)驗(yàn)指導(dǎo)書》(內(nèi)部試用)</p><p>  附錄(程序代碼節(jié)選)</p><p>  第一部分(節(jié)選主要部分)</p><p>  #include<reg52.h> </p><p>  #include<stdio.h> //標(biāo)準(zhǔn)輸入輸出</p>

31、<p>  #include<intrins.h></p><p>  #include<stdlib.h></p><p>  #include "last1_led.h"</p><p>  #define Data P0//數(shù)據(jù)端口</p><p>  sbit RS = P2^

32、4; //Pin4</p><p>  sbit RW = P2^5; //Pin5</p><p>  sbit E = P2^6; //Pin6</p><p>  sbit p1_0=P1^0;//接?xùn)|西綠燈//</p><p>  sbit p1_1=P1^1;//接?xùn)|西黃燈//</p><p>  sbit

33、 p1_2=P1^2;//接?xùn)|西紅燈//</p><p>  sbit p1_3=P1^3;//接南北綠燈//</p><p>  sbit p1_4=P1^4;//接南北黃燈//</p><p>  sbit p1_5=P1^5;//接南北紅燈//</p><p>  unsigned char key;</p><p&

34、gt;  static int i=0;</p><p>  char data TimeNum[]=" ";</p><p>  char data Test1[]=" ";</p><p><b>  //延時(shí)函數(shù)1//</b></

35、p><p>  void delay1(unsigned int x)</p><p>  //鍵盤掃描函數(shù)//</p><p>  unsigned char keyscan(void)</p><p>  void last1_led(void);</p><p>  void roadlight(void)</

36、p><p>  void DelayUs(unsigned char us)//delay us</p><p>  void DelayMs(unsigned char ms)</p><p>  /* 寫入命令 */ </p><p>  void

37、 WriteCommand(unsigned char c)</p><p>  /* 寫入數(shù)據(jù)函數(shù) */ </p><p>  void WriteData(unsigned char c)</p><p>  /* 寫入字節(jié)函數(shù) */

38、 </p><p>  /* 寫入字符串函數(shù) */ </p><p>  void ShowString (unsigned char line,char *ptr)</p><p>  /* 初始化函數(shù) */

39、 </p><p>  void InitLcd()</p><p>  void lcdshow(void)</p><p><b>  {</b></p><p>  InitLcd(); //初始化LCD</p><p>  DelayMs(

40、15); //延時(shí)保證信號(hào)穩(wěn)定</p><p>  WriteCommand(0x01); //顯示清屏 </p><p>  sprintf(Test1," LCD Test "); </p><p>  //打印輸出第一行信息</p><p>  ShowString(0,Test1);</

41、p><p>  sprintf(TimeNum," Hello AT89C51 ");</p><p>  //打印輸出第二行信息</p><p>  ShowString(1,TimeNum);</p><p><b>  }</b></p><p><b>  //

42、三色聯(lián)動(dòng)//</b></p><p>  void delay_h(int x)</p><p><b>  //主函數(shù)//</b></p><p>  void main(void)</p><p><b>  {</b></p><p>  unsigned

43、char keycode;</p><p><b>  P1=0xFF;</b></p><p><b>  srand(3);</b></p><p><b>  while(1)</b></p><p><b>  {</b></p>&

44、lt;p>  keycode=keyscan();</p><p>  switch(keycode)</p><p><b>  {</b></p><p>  case 0:last1_led();P1=0xFF;break;</p><p>  case 1:roadlight();P1=0xff;break

45、;</p><p>  case 2:lcdshow();break;</p><p>  case 3:while(1){pwm();}break;</p><p>  default:break;</p><p><b>  }</b></p><p><b>  }</b&g

46、t;</p><p><b>  }</b></p><p>  /*功能: 8個(gè)LED的4種花樣顯示 */</p><p>  #include <reg51.h></p><p>  typedef unsigned char U8;</p><p>  typedef unsig

47、ned int U16;</p><p>  /*************宏定義*****************/</p><p>  #define speed P2</p><p>  #define led_data P1</p><p>  #define uchar unsigned char </p

48、><p>  #define uint unsigned int </p><p>  /*************端口定義***************/</p><p>  sbit key_speed_jia=P2^0; //int0 </p><p>  sbit key_speed_jian=P2^1; //int1</p&

49、gt;<p>  /*************************************************************** </p><p><b>  4種花樣數(shù)據(jù)定義 </b></p><p>  ***************************************************************/

50、</p><p>  uchar code table0[]={0xE7,0xDB,0xBD,0x7E,0xFF,0x7E,0x3C, </p><p>  0x18,0x00,0xFF,0xE7,0xC3,0x81,0x00}; </p><p>  uchar code table1[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0

51、x00, </p><p>  0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; </p><p>  uchar code table2[]={0xAA,0x55}; </p><p>  uchar code table3[]={0x00,0xFF}; </p><p>  uint sudu;

52、 //流水燈速度</p><p>  uchar cishu; //閃爍次數(shù)</p><p>  /************************************************************* </p><p>  * 名稱:last1_led </p><p>  * 功能:循環(huán)調(diào)用各個(gè)子程序 <

53、/p><p>  **************************************************************/ </p><p>  void last1_led(void) </p><p><b>  { }</b></p><p>  void exter_int0()interru

54、pt 0//外部中斷0函數(shù) </p><p>  void exter_int1()interrupt 2//外部中斷1函數(shù) </p><p>  第二部分(節(jié)選主要部分)</p><p>  #include<reg51.h></p><p>  #define uint unsigned int</p>&

55、lt;p>  #define uchar unsigned char</p><p>  uchar Second,Minute,Hour,Date,Month,Year,week;//時(shí)間等變量</p><p>  #define one 0x80 //第一行的初始位置</p><p>  #define two 0xc0 /

56、/第二行初始位置</p><p>  sbit RS_1602=P2^0; //1602數(shù)據(jù)命令端</p><p>  sbit E_1602=P2^1;//1602使能端</p><p>  sbit IO_1302=P2^4;//1302數(shù)據(jù)端</p><p>  sbit CLK_1302=P2^3;

57、//1302時(shí)鐘端</p><p>  sbit RST_1302=P2^2;//1302復(fù)位端</p><p>  sbit key_mode=P1^0;//功能按鍵</p><p>  sbit key_up=P1^1;//增量鍵</p><p>  sbit key_down=P1^2;

58、//減量鍵</p><p>  sbit ACC0=ACC^0;</p><p>  sbit ACC7=ACC^7;</p><p>  uchar code tab1[]={"20 - - week "};//液晶第一行默認(rèn)顯示數(shù)據(jù)</p><p>  uchar code tab2[]={&quo

59、t; : : "};//液晶第二行默認(rèn)顯示數(shù)據(jù)</p><p>  void init();//定時(shí)器0初始化</p><p>  /********************ds1302****************************/</p><p>  void write_byte(uchar dat)//1

60、302字節(jié)寫</p><p><b>  {</b></p><p><b>  uchar kk;</b></p><p><b>  ACC=dat;</b></p><p>  RST_1302=1;//啟動(dòng)讀寫操作</p><p>

61、;  for(kk=8;kk>0;kk--)//8位數(shù)據(jù)</p><p><b>  {</b></p><p>  IO_1302=ACC0;//先傳送數(shù)據(jù)低位</p><p>  CLK_1302=0;</p><p>  CLK_1302=1;//上升沿輸入數(shù)據(jù)</p&g

62、t;<p>  ACC=ACC>>1;//右移位</p><p><b>  }</b></p><p><b>  }</b></p><p>  uchar read_byte()//1302字節(jié)讀</p><p><b>  {<

63、;/b></p><p><b>  uchar kk;</b></p><p>  RST_1302=1;//啟動(dòng)讀寫操作</p><p>  for(kk=8;kk>0;kk--)</p><p><b>  {</b></p><p>  AC

64、C7=IO_1302;//先讀入數(shù)據(jù)低位</p><p>  CLK_1302=1;</p><p>  CLK_1302=0;//下降沿輸出數(shù)據(jù)</p><p>  ACC=ACC>>1;//右移位</p><p><b>  }</b></p><p&

65、gt;  return (ACC);</p><p><b>  }</b></p><p>  void write_1302(uchar add,uchar dat) //1302地址寫</p><p><b>  {</b></p><p>  RST_1302=0;</p>

66、<p>  CLK_1302=0;</p><p>  RST_1302=1;//啟動(dòng)讀寫操作</p><p>  write_byte(add);//寫地址</p><p>  write_byte(dat);//寫數(shù)據(jù)</p><p>  CLK_1302=1;</p><p

67、>  RST_1302=0;//禁止讀寫操作</p><p><b>  }</b></p><p>  uchar read_1302(uchar add)//1302地址讀</p><p><b>  {</b></p><p>  uchar temp;</p

68、><p>  RST_1302=0;</p><p>  CLK_1302=0;</p><p>  RST_1302=1;//啟動(dòng)讀寫操作</p><p>  write_byte(add);//寫地址</p><p>  temp=read_byte();//讀數(shù)據(jù)</p>

69、<p>  CLK_1302=1;</p><p>  RST_1302=0;//禁止讀寫操作</p><p>  return(temp);</p><p><b>  }</b></p><p>  void ds1302_init()//1302初始化</p>

70、<p><b>  {</b></p><p>  RST_1302=0;//禁止讀寫操作</p><p>  CLK_1302=0;//時(shí)鐘為低</p><p>  write_1302(0x80,Second|0x00);//允許寫</p><p><b>  }&

71、lt;/b></p><p>  void keyscan()//按鍵處理子程序</p><p><b>  {</b></p><p>  uchar key1n;//功能鍵按下次數(shù)</p><p>  if(key_mode==0)//key_down為功能鍵</p&

72、gt;<p><b>  {</b></p><p>  delay(5);//延時(shí)去抖動(dòng)</p><p>  if(key_mode==0)//功能鍵確認(rèn)按下</p><p><b>  {</b></p><p>  while(!key_mode);/

73、/等待按鍵釋放</p><p>  key1n++;//功能鍵按下次數(shù)加一</p><p>  if(key1n==9)//為9時(shí) 調(diào)為1 則1~8</p><p><b>  key1n=1;</b></p><p>  switch(key1n)//功能鍵按鍵次數(shù)不同實(shí)現(xiàn)不同操作</

74、p><p><b>  {</b></p><p>  case 1: //時(shí)調(diào)整秒</p><p>  TR0=0;//關(guān)閉定時(shí)器</p><p>  write_1602com(two+0x0b);//寫入光標(biāo)位置</p><p>  write_1602com(0x0f);

75、//設(shè)置光標(biāo)為閃爍</p><p>  write_1302(0x8e,0x00);//允許寫</p><p>  write_1302(0x80,0x80|Dec_BCD(Second));//Second</p><p><b>  break;</b></p><p>  case 2: write_160

76、2com(two+8);break;//Minute閃爍</p><p>  case 3: write_1602com(two+5);break;//Hour閃爍</p><p>  case 4: write_1602com(one+0x0f);break;//week閃爍</p><p>  case 5: write_1602com(one+0x0

77、9);break;//Date閃爍</p><p>  case 6: write_1602com(one+0x06);break;//Month閃爍</p><p>  case 7: write_1602com(one+0x03);break;//Year閃爍</p><p><b>  case 8:</b></p>

78、<p>  write_1602com(0x0c);//設(shè)置光標(biāo)不閃爍</p><p>  write_1302(0x80,0x00|Dec_BCD(Second));//Second</p><p>  write_1302(0x8e,0x80);//禁止寫</p><p>  TR0=1;//打開定時(shí)器</p&g

79、t;<p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key1n!=0)//當(dāng)key_m

80、ode按下以后。再按以下鍵才有效</p><p><b>  {</b></p><p>  if(key_up==0) //上調(diào)鍵</p><p><b>  {</b></p><p>  delay(5);//延時(shí)去抖動(dòng)</p><p>  if(

81、key_up==0)//上調(diào)鍵確認(rèn)按下</p><p><b>  {</b></p><p>  while(!key_up);//等待按鍵釋放</p><p>  switch(key1n)//功能鍵按鍵次數(shù)不同實(shí)現(xiàn)不同操作</p><p><b>  {</b></p

82、><p>  case 1:Second++;//秒加1</p><p>  if(Second==60)//加到60時(shí)調(diào)為0</p><p><b>  Second=0;</b></p><p>  write_hms(0x0a,Second);//顯示新的秒數(shù)</p><p>  

83、write_1302(0x80,0x80|Dec_BCD(Second));//寫入新的秒數(shù)</p><p>  write_1602com(two+0x0b);//因指針自動(dòng)加一,要寫回原位置</p><p><b>  break;</b></p><p>  case 2:Minute++;//分鐘加1</p><

84、;p>  if(Minute==60)//加到60時(shí)調(diào)為0</p><p><b>  Minute=0;</b></p><p>  write_hms(7,Minute);//顯示新的分鐘</p><p>  write_1302(0x82,Dec_BCD(Minute));//寫入新的分鐘</p><p&

85、gt;  write_1602com(two+8);//光標(biāo)在原位閃爍</p><p><b>  break;</b></p><p>  case 3:Hour++;//小時(shí)加1</p><p>  if(Hour==24)//加到24時(shí)調(diào)為0</p><p><b>  Hour=0;&l

86、t;/b></p><p>  write_hms(4,Hour);//顯示新的小時(shí)</p><p>  write_1302(0x84,Dec_BCD(Hour));//寫入新的小時(shí)</p><p>  write_1602com(two+5);//光標(biāo)在原位閃爍</p><p><b>  break;</b

87、></p><p>  case 4:week++;//星期加1</p><p>  if(week==8)//加到8時(shí)調(diào)為1</p><p><b>  week=1;</b></p><p>  write_week(week);//顯示新的星期</p><p>  

88、write_1302(0x8a,week);//寫入新的星期</p><p>  write_1602com(one+0x0f);//光標(biāo)在原位閃爍</p><p><b>  break;</b></p><p>  case 5:Date++;//日期加1</p><p>  if(Date==32)

89、//加到32時(shí)調(diào)為1</p><p><b>  Date=1;</b></p><p>  write_ymd(8,Date);//顯示新的日期</p><p>  write_1302(0x86,Dec_BCD(Date));//寫入新的日期</p><p>  write_1602com(one+9);//光

90、標(biāo)在原位閃爍</p><p><b>  break;</b></p><p>  case 6:Month++;//月份加1</p><p>  if(Month==13)//加到13時(shí)調(diào)為1</p><p><b>  Month=1;</b></p><p&g

91、t;  write_ymd(5,Month);//顯示新的月份</p><p>  write_1302(0x88,Dec_BCD(Month));//寫入新的月份</p><p>  write_1602com(one+6);//光標(biāo)在原位閃爍</p><p><b>  break;</b></p><p> 

92、 case 7:Year++;//年加1</p><p>  if(Year==100)//加到100時(shí)調(diào)為0</p><p><b>  Year=0;</b></p><p>  write_ymd(2,Year);//顯示新的年份</p><p>  write_1302(0x8c,Dec_BCD

93、(Year));//寫入新的年份</p><p>  write_1602com(one+3);//光標(biāo)在原位閃爍</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><

94、p><b>  }</b></p><p>  if(key_down==0) //下調(diào)鍵</p><p><b>  {</b></p><p>  delay(5);//延時(shí)去抖動(dòng)</p><p>  if(key_down==0)//下調(diào)鍵確認(rèn)按下

95、</p><p><b>  {</b></p><p>  while(!key_down);//等待按鍵釋放</p><p>  switch(key1n)//功能鍵按鍵次數(shù)不同實(shí)現(xiàn)不同操作</p><p><b>  {</b></p><p>  c

96、ase 1:Second--;//秒減1</p><p>  if(Second==-1)//減為-1時(shí) 調(diào)為59</p><p>  Second=59;</p><p>  write_hms(0x0a,Second);//顯示新的秒數(shù)</p><p>  write_1302(0x80,0x80|Dec_BCD(Secon

97、d));//寫入新的秒數(shù)</p><p>  write_1602com(two+0x0b);//光標(biāo)在原位閃爍</p><p><b>  break;</b></p><p>  case 2:Minute--;//分鐘減1</p><p>  if(Minute==-1)//減為-1時(shí) 調(diào)為59<

98、/p><p>  Minute=59;</p><p>  write_hms(7,Minute);//顯示新的分鐘數(shù)</p><p>  write_1302(0x82,Dec_BCD(Minute));//寫入新的分鐘數(shù)</p><p>  write_1602com(two+8);//光標(biāo)在原位閃爍</p><p&g

99、t;<b>  break;</b></p><p>  case 3:Hour--;//小時(shí)減1</p><p>  if(Hour==-1)//減為-1時(shí) 調(diào)為59</p><p><b>  Hour=23;</b></p><p>  write_hms(4,Hour);/

100、/顯示新的小時(shí)數(shù)</p><p>  write_1302(0x84,Dec_BCD(Hour));//寫入新的小時(shí)數(shù)</p><p>  write_1602com(two+5);//光標(biāo)在原位閃爍</p><p><b>  break;</b></p><p>  case 4:week--;//星期減1

101、</p><p>  if(week==0)//減為0時(shí) 調(diào)為7</p><p><b>  week=7;</b></p><p>  write_week(week);//顯示新的星期數(shù)</p><p>  write_1302(0x8a,week);//寫入新的星期數(shù)</p><p

102、>  write_1602com(one+0x0f);//光標(biāo)在原位閃爍</p><p><b>  break;</b></p><p>  case 5:Date--;//日期減1</p><p>  if(Date==255)//減為0時(shí) 調(diào)為31</p><p><b>  Dat

103、e=31;</b></p><p>  write_ymd(8,Date);//顯示新的日期數(shù)</p><p>  write_1302(0x86,Dec_BCD(Date));//寫入新的日期數(shù)</p><p>  write_1602com(one+9);//光標(biāo)在原位閃爍</p><p><b>  brea

104、k;</b></p><p>  case 6:Month--;//月份減1</p><p>  if(Month==255)//減為0時(shí) 調(diào)為12</p><p><b>  Month=12;</b></p><p>  write_ymd(5,Month);//顯示新的月份數(shù)</

105、p><p>  write_1302(0x88,Dec_BCD(Month));//寫入新的月份數(shù)</p><p>  write_1602com(one+6);//光標(biāo)在原位閃爍</p><p><b>  break;</b></p><p>  case 7:Year--;//年份減1</p>

106、<p>  if(Year==-1)//減為-1時(shí) 調(diào)為99</p><p><b>  Year=99;</b></p><p>  write_ymd(2,Year);//顯示新的年份數(shù)</p><p>  write_1302(0x8c,Dec_BCD(Year));//寫入新的年份數(shù)</p><

107、p>  write_1602com(one+3);//光標(biāo)在原位閃爍</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></

108、p><p><b>  }</b></p><p><b>  }</b></p><p>  void timer0() interrupt 1</p><p><b>  {</b></p><p>  Second = BCD_Decimal(read

109、_1302(0x81));//讀取1302的秒</p><p>  Minute = BCD_Decimal(read_1302(0x83));//讀取1302的分鐘</p><p>  Hour = BCD_Decimal(read_1302(0x85));//讀取1302的小時(shí)</p><p>  Date = BCD_Decimal(read_

110、1302(0x87));//讀取1302的日期</p><p>  Month = BCD_Decimal(read_1302(0x89));//讀取1302的月份</p><p>  week=BCD_Decimal(read_1302(0x8b));//讀取1302的星期</p><p>  Year=BCD_Decimal(read_1302(0

111、x8d));//讀取1302的年</p><p>  write_hms(10,Second);//1602顯示的秒</p><p>  write_hms(7,Minute);//1602顯示的分鐘</p><p>  write_hms(4,Hour);//1602顯示的小時(shí)</p><p> 

112、 write_ymd(8,Date);//1602顯示的日期</p><p>  write_ymd(5,Month);//1602顯示的月份</p><p>  write_ymd(2,Year);//1602顯示的年</p><p>  write_week(week); //1602顯示的星期</p

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論