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

下載本文檔

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

文檔簡介

1、<p><b>  課 程 設(shè) 計(jì)</b></p><p><b>  目 錄</b></p><p>  一、數(shù)字時鐘的設(shè)計(jì)與制作3</p><p>  1.1主要技術(shù)指標(biāo)3</p><p>  1.2方案論證及選擇3</p><p>  1.2.1方

2、案論證3</p><p>  方案一:使用專用時鐘芯片。4</p><p>  方案二:采用MCU內(nèi)部定時器。4</p><p>  1.2.2方案選擇5</p><p>  1.3系統(tǒng)組成框圖5</p><p>  1.4單元電路設(shè)計(jì)6</p><p>  1.5總體電路圖11&

3、lt;/p><p>  1.6電路仿真12</p><p>  1.7調(diào)試過程及測試結(jié)果12</p><p>  1.7.1調(diào)試過程12</p><p>  1.7.2測試結(jié)果33</p><p>  1.8主要元件清單33</p><p>  二、出租車計(jì)費(fèi)器的設(shè)計(jì)與制作35</

4、p><p>  1.1主要技術(shù)指標(biāo)35</p><p>  1.2方案論證及選擇35</p><p>  1.2.1方案論證35</p><p>  1.2.2方案選擇37</p><p>  1.3系統(tǒng)組成框圖37</p><p>  1.4單元電路設(shè)計(jì)37</p>&l

5、t;p>  1.5總體電路圖42</p><p>  1.6調(diào)試過程及測試結(jié)果43</p><p>  1.6.1調(diào)試過程43</p><p>  1.7.2測試結(jié)果58</p><p>  1.8主要元件清單58</p><p>  1.9課程設(shè)計(jì)小結(jié)59</p><p>&

6、lt;b>  三、個人總結(jié)61</b></p><p>  一、數(shù)字時鐘的設(shè)計(jì)與制作</p><p><b>  1.1主要技術(shù)指標(biāo)</b></p><p>  設(shè)計(jì)和制作一個顯示時、分、秒的數(shù)字時鐘,具有校時功能,可對小時和分單獨(dú)校時,對分校時的時候,停止向小時的進(jìn)位。校時時鐘可以手動輸入或借用電路中的時鐘;實(shí)現(xiàn)秒表功能;

7、省電狀態(tài)(不顯示);顯示年、月、日、學(xué)號。在實(shí)現(xiàn)數(shù)字時鐘功能的同時,設(shè)計(jì)和制作一個溫度顯示器,可用鍵盤設(shè)置溫度的上限和下限,測量的溫度高于低于設(shè)置的溫度時,溫度顯示器報(bào)警。</p><p>  1.2方案論證及選擇</p><p><b>  1.2.1方案論證</b></p><p><b> ?、?單片機(jī)的選擇:</b>

8、;</p><p>  方案一:采用型號為AT89S52的51單片機(jī)芯片。</p><p>  51內(nèi)核具有豐富的指令集和32個通用工作寄存器。所有的寄存器都直接與算術(shù)邏輯單元(ALU) 相連接,使得一條指令可以在一個時鐘周期內(nèi)同時訪問兩個獨(dú)立的寄存器。這種結(jié)構(gòu)大大提高了代碼效率,并且具有比普通的CISC微控制器最高至10倍的數(shù)據(jù)吞吐率。</p><p>  AT8

9、9S52有如下特點(diǎn):8K字節(jié)的系統(tǒng)內(nèi)可編程Flash(具有同時讀寫的能力,即(RWW),512 字節(jié)EEPROM,1K字節(jié)SRAM,32個通用I/O口線,32個通用工作寄存器,用于邊界掃描的JTAG 接口,支持片內(nèi)調(diào)試與編程,三個具有比較模式的靈活的定時器/ 計(jì)數(shù)器(T/C),片內(nèi)/外中斷,可編程串行USART,有起始條件檢測器的通用串行接口,具有片內(nèi)振蕩器的可編程看門狗定時器,一個SPI串行端口,以及六個可以通過軟件進(jìn)行選擇的省電模式

10、。 工作于空閑模式時CPU停止工作,而USART、兩線接口、SRAM、T/C、SPI 端口以及中斷系統(tǒng)繼續(xù)工作;掉電模式時晶體振蕩器停止振蕩,所有功能除了中斷和硬件復(fù)位之外都停止工作;在省電模式下,異步定時器繼續(xù)運(yùn)行,允許用戶保持一個時間基準(zhǔn),而其余功能模塊處于休眠狀態(tài);Standby模式下只有晶體或諧振振蕩器運(yùn)行,其余功能模塊處于休眠狀態(tài),使得器件只消耗極少的電流,同時具有快速啟動能力;擴(kuò)展Standby模式下則允許振蕩器和異步定時器

11、繼續(xù)工作。</p><p>  本芯片是以Atmel高密度非易失性存儲器技術(shù)生產(chǎn)的。片內(nèi)ISP Flash允許程序存儲器通過ISP串行接口,或者通用編程器進(jìn)行編程,也可以通過運(yùn)行于AVR 內(nèi)核之中的引導(dǎo)程序進(jìn)行編程。引導(dǎo)程序可以使用任意接口將應(yīng)用程序下載到應(yīng)用Flash存儲區(qū)(Application Flash Memory)。在更新應(yīng)用Flash存儲區(qū)時引導(dǎo)Flash區(qū)(Boot Flash Memory)的程

12、序繼續(xù)運(yùn)行,實(shí)現(xiàn)了RWW操作。 通過將8位RISC CPU與系統(tǒng)內(nèi)可編程的Flash集成在一個芯片內(nèi),ATmega16 成為一個功能強(qiáng)大的單片機(jī),為許多嵌入式控制應(yīng)用提供了靈活而低成本的解決方案。</p><p>  方案二:選用其他單片機(jī)。</p><p>  無論從單片機(jī)的資源,還是執(zhí)行速度進(jìn)行比較,51單片機(jī)都要比其他單片機(jī)性價比高。而且51單片機(jī)的價格比其他單片機(jī)便宜。</p

13、><p><b> ?、朴?jì)時控制方案</b></p><p>  方案一:使用專用時鐘芯片。</p><p>  使用微控制器控制專用時鐘芯片實(shí)現(xiàn)計(jì)時控制,這種方案有著計(jì)時精度高、控制簡單的優(yōu)點(diǎn),而且更易于實(shí)現(xiàn)日期/時間顯示、定時烹調(diào)等計(jì)時擴(kuò)展功能。</p><p>  方案二:采用MCU內(nèi)部定時器。</p>

14、<p>  AT89S52內(nèi)部含有2個定時器,可以利用一個定時器與程序計(jì)數(shù)器相結(jié)合的方式,在系統(tǒng)晶振的驅(qū)動下,產(chǎn)生標(biāo)準(zhǔn)時鐘頻率。</p><p><b> ?、秋@示方案選擇</b></p><p><b>  方案一:數(shù)碼管顯示</b></p><p>  工作原理簡單,軟件編程簡單,但考慮到本電路功能多所需數(shù)碼

15、管多,組合使用電路焊接難度加大,故不宜使用。</p><p><b>  方案二:液晶顯示</b></p><p>  工作原理較復(fù)雜,切編程難度大,但外圍電路簡單,能顯示多種字符,能夠同時顯示多位字符,焊接也比較容易。</p><p><b>  1.2.2方案選擇</b></p><p><

16、;b>  ⑴ 單片機(jī)的選擇:</b></p><p>  根據(jù)以上的兩種方案的比較,本電路設(shè)計(jì)時最終采用的是AT89S52芯片。</p><p><b> ?、朴?jì)時控制方案</b></p><p>  根據(jù)以上的兩種方案的比較,本電路設(shè)計(jì)時最終采用的是實(shí)用專用的時鐘芯片。</p><p><b&g

17、t; ?、秋@示方案選擇</b></p><p>  根據(jù)以上的兩種方案的比較,考慮到方案二比較適合本電路,切可用軟件實(shí)現(xiàn)多位顯示,綜上所述,故選擇方案二。選擇最常用的顯示器1602。</p><p><b>  1.3系統(tǒng)組成框圖</b></p><p>  系統(tǒng)組成框圖如下圖1--1所示:</p><p>

18、<b>  圖1--1</b></p><p><b>  1.4單元電路設(shè)計(jì)</b></p><p> ?。?) 復(fù)位電路如圖1--2所示:</p><p><b>  圖1--2</b></p><p> ?。?)晶振電路如圖1--3所示:</p><p

19、><b>  圖1--3</b></p><p> ?。?)顯示電路如圖1--4所示:</p><p><b>  圖1--4</b></p><p>  液晶顯示器用的是HS1602芯片,共有16個管腳,三個控制口,七個數(shù)據(jù)口,是一種低功能CMOS技術(shù)實(shí)現(xiàn)的LCD模塊。液晶顯示模塊具有體積小、功耗低、顯示內(nèi)容豐富等

20、特點(diǎn),現(xiàn)在字符型液晶顯示模塊已經(jīng)是單片機(jī)應(yīng)用設(shè)計(jì)中最常用的信息顯示器件了。1602B可以顯示2行16個字符,有8位數(shù)據(jù)總線D0-D7,和RS、R/W、EN三個控制端口,工作電壓為5V,并且?guī)в凶址麑Ρ榷日{(diào)節(jié)和背光。該模塊也可以只用D4-D7作為四位數(shù)據(jù)分兩次傳送。</p><p>  1602B外觀如圖1--5所示:</p><p><b>  圖1--5</b>&l

21、t;/p><p>  1602引腳說明如表2--1所示:</p><p><b>  表2--1</b></p><p>  1602的基本操作時序?yàn)椋?lt;/p><p>  讀狀態(tài):輸入: RS=0,RW=1,E=1 輸出:D0~D7=狀態(tài)字寫指令:輸入: RS=0,RW=0,D0~D7=指令

22、碼,E=高脈沖 輸出:無</p><p>  讀數(shù)據(jù):輸入: RS=1,RW=1, 輸出:D0~D7=數(shù)據(jù)</p><p>  寫數(shù)據(jù):輸入: RS=1,RW=0,D0~D7=數(shù)據(jù),E=高脈沖 輸出:無</p><p><b>  時鐘信號產(chǎn)生電路:</b></p><p&

23、gt;  本單元電路采用時鐘芯片DS1302來實(shí)現(xiàn)日期、時間的顯示功能。DS1302 是DALLAS 公司推出的涓流充電時鐘芯片內(nèi)含有一個實(shí)時時鐘/日歷和31 字節(jié)靜態(tài)RAM 通過簡單的串行接口與單片機(jī)進(jìn)行通信實(shí)時時鐘/日歷電路提供秒分時日日期月年的信息每月的天數(shù)和閏年的天數(shù)可自動調(diào)整時鐘操作可通過AM/PM 指示決定采用24 或12 小時格式DS1302 與單片機(jī)之間能簡單地采用同步串行的方式進(jìn)行通信僅需用到三個口線(1) RES(復(fù)

24、位)(2) I/O 數(shù)據(jù)線(3)SCLK(串行時鐘)時鐘/RAM 的讀/寫數(shù)據(jù)以一個字節(jié)或多達(dá)31 個字節(jié)的字符組方式通信DS1302 工作時功耗很低保持?jǐn)?shù)據(jù)和時鐘信息時功率小于1mW。</p><p>  DS1302的管腳配置圖如圖1--6所示:</p><p><b>  圖1--6</b></p><p><b>  管腳描述

25、:</b></p><p>  X1、X2: 32.768KHz 晶振管腳</p><p><b>  GND: 地</b></p><p><b>  RST: 復(fù)位腳</b></p><p>  /O: 數(shù)據(jù)輸入/輸出引腳</p><p>  SCLK: 串行

26、時鐘</p><p>  Vcc1,Vcc2:電源供電管腳</p><p> ?。?)鬧鐘電路如圖1--7所示:</p><p><b>  圖1--7</b></p><p> ?。?)按鍵電路如圖1--8所示:</p><p><b>  圖1--8</b></p&

27、gt;<p><b>  1.5總體電路圖</b></p><p>  總體電路圖如圖1--9所示:</p><p><b>  圖1--9</b></p><p><b>  1.6電路仿真</b></p><p>  電路仿真圖如下圖1-10:</p&g

28、t;<p><b>  圖1—10</b></p><p>  1.7調(diào)試過程及測試結(jié)果</p><p><b>  1.7.1調(diào)試過程</b></p><p>  電路按設(shè)計(jì)圖焊接確保無誤。</p><p><b>  軟件編程流程圖:</b></p>

29、;<p>  <1> 按電路設(shè)計(jì)圖,分配各I/O口;</p><p>  <2>根據(jù)任務(wù)要求分配各按鍵功能;</p><p>  <3> 根據(jù)分配的按鍵功能完成相應(yīng)的編程; </p><p>  <4> 根據(jù)各分配的I/O口,完成相應(yīng)的編程;</p><p>  <5>

30、完成芯片1602初始化程序;</p><p>  <6> 完成主程序的編程。</p><p>  軟件流程圖如圖1--11所示</p><p><b>  圖1--11</b></p><p>  (4)整體編程如下:</p><p>  #include<reg52.h>

31、</p><p>  #include<intrins.h></p><p>  #include<string.h></p><p>  #include<ctype.h></p><p>  #include<stdio.h></p><p>  #define u

32、char unsigned char</p><p>  #define uint unsigned int</p><p>  sbit buzz = P2^6;</p><p>  sbit lcd_on=P1^4;</p><p>  sbit lcd_rs=P2^4; </p><p>  s

33、bit lcd_rw=P1^5;</p><p>  sbit lcd_re=P2^5;</p><p>  sbit dq = P3^1;</p><p>  sbit s1 =P2^0; //總控制端</p><p>  sbit s2 =P2^1;//加一</p><p>  sbit s3 =P2^2; //減

34、一 </p><p>  sbit s4 =P2^3; //秒表控制</p><p>  sbit s7=P2^7; //the controlling of the lcd</p><p>  void lcd_writedata(uchar date);</p><p>  void lcd_writecom(uchar com);&

35、lt;/p><p>  void change(uchar add,uchar date,uchar row);</p><p>  void delay_ds1820(int num);</p><p>  uchar readonechar(); //讀一個字節(jié)</p><p>  void writeonechar(uchar dat);

36、 //寫一個字節(jié)</p><p>  uchar code wendu[]="0123456789";</p><p>  uint readtemp() ; //讀溫度</p><p>  void displayw() ; //顯示溫度</p><p>  void key();</p><

37、p>  void guding();</p><p>  void ds1302_inputbyte(uchar d); </p><p>  uchar ds1302_outputbyte();</p><p>  uchar read1302(uchar add);</p><p>  void write1302(uchar ad

38、d,uchar date);</p><p>  void get_1302(uchar realtime[]);</p><p>  void xianshi();</p><p>  void miaobiao_init();</p><p>  void keys();</p><p>  void set_al

39、arm();</p><p>  void read_alarm();</p><p>  void alarm();</p><p>  void alarm_sound();</p><p>  void sheng_set();</p><p>  void read_sheng();</p>&l

40、t;p>  void sheng();</p><p>  sbit ds1302_rst=P1^0; //ds1302腳定義</p><p>  sbit ds1302_clk=P1^1;</p><p>  sbit ds1302_io=P1^2;</p><p>  sbit acc0 = ACC^0;</p>&

41、lt;p>  sbit acc7 = ACC^7;</p><p>  uchar C12_24,count=0,up=25,dn=25;</p><p>  uchar num,s1num,s4num,flag,flag1,flag2,flag3; //定義變量</p><p>  uchar shi,fen,miao,weimiao,t;</p&

42、gt;<p>  char time[7],time1[7];</p><p>  uchar ashi,afen,amiao,anian,ayue,ari;</p><p>  uchar code table_1[]="BY: 21 29 41";</p><p>  uchar code table_2[]="We

43、lcome to use!";</p><p>  uchar table_3[]="ST_UP:";</p><p>  uchar table_3_1[]="30";</p><p>  uchar table_4_1[]="20";</p><p>  ucha

44、r table_4[]="ST_DN:";</p><p>  uchar code table[]=" StopWatch ";</p><p>  uchar code table1[]=" 00:00:00:00 ";</p><p>  uchar code table4[][3]={

45、"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};</p><p>  void write_xingqi(char xingqi);</p><p>  void delay(uint z)</p>

46、<p><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  }</b></p&g

47、t;<p>  void lcd_init()//液晶初始化和命令數(shù)據(jù)操作</p><p><b>  {</b></p><p>  lcd_rw=0;lcd_writecom(0x38);lcd_writecom(0x0c);lcd_writecom(0x06);lcd_writecom(0x01);lcd_writecom(0x80);<

48、;/p><p><b>  } </b></p><p>  void lcd_writecom(uchar com)</p><p><b>  {</b></p><p>  lcd_rs=0;lcd_re=0;P0=com;lcd_re=1;delay(1);lcd_re=0;</p&g

49、t;<p><b>  }</b></p><p>  void lcd_writedata(uchar date)</p><p><b>  {</b></p><p>  lcd_rs=1;lcd_re=0;P0=date;lcd_re=1;delay(1);lcd_re=0;</p>

50、<p><b>  }</b></p><p>  void change(uchar add,uchar date,uchar row)</p><p><b>  {</b></p><p>  uchar shi,ge; shi=date/10; ge=date%10;</p><p&

51、gt;  if(row==0)</p><p><b>  {</b></p><p>  lcd_writecom(0x80+add); lcd_writedata(0x30+shi); lcd_writedata(0x30+ge);</p><p><b>  }</b></p><p> 

52、 if(row==1)</p><p><b>  {</b></p><p>  lcd_writecom(0x80+0x40+add); lcd_writedata(0x30+shi); lcd_writedata(0x30+ge);</p><p><b>  }</b></p><p>&

53、lt;b>  }</b></p><p>  void key()</p><p><b>  {</b></p><p><b>  if(s4==0)</b></p><p><b>  {</b></p><p><b>

54、;  delay(5);</b></p><p><b>  if(s4==0)</b></p><p><b>  {</b></p><p><b>  flag1=1;</b></p><p>  while(!s4);</p><p>

55、;<b>  s4num++;</b></p><p>  if(s4num==1)</p><p><b>  {</b></p><p>  lcd_init();</p><p>  miaobiao_init();</p><p>  lcd_writecom(0x8

56、0+0x40+4);</p><p>  lcd_writedata(':');</p><p>  lcd_writecom(0x80+0x40+7);</p><p>  lcd_writedata(':');</p><p>  lcd_writecom(0x80+0x40+10);</p>

57、<p>  lcd_writedata(':');</p><p>  lcd_writecom(0x80+2);</p><p>  for(num=0;num<14;num++)</p><p><b>  {</b></p><p>  lcd_writedata(table[nu

58、m]);</p><p><b>  delay(6);</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(s4num==2)</p><p><b>  TR0=1;</

59、b></p><p>  if(s4num==3)</p><p><b>  {</b></p><p><b>  TR0=0;</b></p><p><b>  }</b></p><p>  if(s4num==4)</p>

60、<p><b>  {</b></p><p>  lcd_init();</p><p>  miaobiao_init();</p><p>  lcd_writecom(0x80+0x40+4);</p><p>  lcd_writedata(':');</p><

61、p>  lcd_writecom(0x80+0x40+7);</p><p>  lcd_writedata(':');</p><p>  lcd_writecom(0x80+0x40+10);</p><p>  lcd_writedata(':');</p><p>  lcd_writecom(0

62、x80+2);</p><p>  for(num=0;num<14;num++)</p><p><b>  {</b></p><p>  lcd_writedata(table[num]);</p><p><b>  delay(6);</b></p><p>

63、;<b>  }</b></p><p><b>  }</b></p><p>  if(s4num==5)</p><p><b>  {</b></p><p>  lcd_init(); guding();s4num=0;weimiao=0;miao=0;fen=0;

64、shi=0;flag1=0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(s1==0)</b></p><p>  //

65、if(s4num==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p><b>  if(s1==0)</b></p><p><b>  {</b></p><p&g

66、t;<b>  flag=1;</b></p><p><b>  s1num++;</b></p><p>  // if(s1num==8)</p><p>  // s1num=0;</p><p>  //while(!s7);</p><p>  

67、switch(s1num)</p><p><b>  {</b></p><p>  case 1:lcd_writecom(0x80+0x40+7);</p><p>  lcd_writecom(0x0f);</p><p><b>  break;</b></p><p&

68、gt;  case 2:lcd_writecom(0x80+0x40+4); </p><p>  lcd_writecom(0x0f);</p><p><b>  break;</b></p><p>  case 3:lcd_writecom(0x80+0x40+1);</p><p>  lcd_writecom

69、(0x0f);</p><p><b>  break;</b></p><p>  case 4:lcd_writecom(0x80+3);</p><p>  lcd_writecom(0x0f);</p><p><b>  break;</b></p><p>  c

70、ase 5:lcd_writecom(0x80+6);</p><p>  lcd_writecom(0x0f);</p><p><b>  break;</b></p><p>  case 6:lcd_writecom(0x80+9);</p><p>  lcd_writecom(0x0f);</p>

71、<p><b>  break;</b></p><p>  case 7:lcd_writecom(0x80+12);</p><p>  lcd_writecom(0x0f);</p><p><b>  break; </b></p><p>  case 8: s1num=

72、0;</p><p>  lcd_writecom(0x0c); </p><p>  write1302(0x8e,0x00); //控制寫入</p><p>  write1302(0x8c, time1[6]/10*16+time1[6]%10); //年</p><p>  write1302(0x88, time1[4

73、]/10*16+time1[4]%10); //月</p><p>  write1302(0x86, time1[3]/10*16+time1[3]%10); //日</p><p>  write1302(0x8a, time1[5]/10*16+time1[5]%10); //星期</p><p>  write1302(0x84, time1[2]/10

74、*16+time1[2]%10); //時</p><p>  write1302(0x82, time1[1]/10*16+time1[1]%10); //分</p><p>  write1302(0x80, time1[0]/10*16+time1[0]%10); //秒 </p><p>  write1302(0x8e,0x80); //禁止寫入&l

75、t;/p><p><b>  flag=0;</b></p><p>  break; </p><p>  } </p><p><b>  }</b></p><p><b>  }</b></p

76、><p>  if(s1num!=0)</p><p><b>  {</b></p><p><b>  if(s2==0)</b></p><p><b>  {</b></p><p><b>  delay(5);</b><

77、;/p><p><b>  if(s2==0)</b></p><p><b>  {</b></p><p>  while(!s2);</p><p>  switch(s1num)</p><p><b>  {</b></p><

78、p>  case 1:time1[0]++;</p><p>  if(time1[0]==60) //秒</p><p>  time1[0]=0;</p><p>  change(6,time1[0],1);</p><p>  lcd_writecom(0x80+0x40+6);</p><p>&

79、lt;b>  break;</b></p><p>  case 2:time1[1]++;</p><p>  if(time1[1]==60)</p><p>  time1[1]=0; //分</p><p>  change(3,time1[1],1);</p><p>  lcd

80、_writecom(0x80+0x40+3);</p><p><b>  break;</b></p><p>  case 3:time1[2]++;</p><p>  if(time1[2]==24)</p><p>  time1[2]=0; //時</p><p>  ch

81、ange(0,time1[2],1);</p><p>  lcd_writecom(0x80+0x40+0);</p><p><b>  break;</b></p><p>  case 4:time1[6]++;</p><p>  if(time1[6]==100)</p><p>  

82、time1[6]=0; //年</p><p>  change(2,time1[6],0);</p><p>  lcd_writecom(0x80+2);</p><p><b>  break;</b></p><p>  case 5:time1[4]++;</p><p> 

83、 if(time1[4]==13)</p><p>  time1[4]=1; //月</p><p>  change(5,time1[4],0);</p><p>  lcd_writecom(0x80+5);</p><p><b>  break;</b></p><p>  

84、case 6:time1[3]++;</p><p>  if(time1[3]==32)</p><p>  time1[3]=1; //日</p><p>  change(8,time1[3],0);</p><p>  lcd_writecom(0x80+8);</p><p><b> 

85、 break;</b></p><p>  case 7:time1[5]++;</p><p>  if(time1[5]==7)</p><p>  time1[5]=0; //星期</p><p>  write_xingqi(time1[5]);</p><p>  lcd_writec

86、om(0x80+12);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>

87、  }</b></p><p><b>  if(s3==0)</b></p><p><b>  {</b></p><p><b>  delay(5);</b></p><p><b>  if(s3==0)</b></p>

88、<p><b>  {</b></p><p>  while(!s3);</p><p>  switch(s1num)</p><p><b>  {</b></p><p>  case 1:time1[0]--;</p><p>  if(time1[0]

89、==-1) //秒</p><p>  time1[0]=59;</p><p>  change(6,time1[0],1);</p><p>  lcd_writecom(0x80+0x40+6);</p><p><b>  break;</b></p><p>  case 2:ti

90、me1[1]--;</p><p>  if(time1[1]==-1)</p><p>  time1[1]=59; //分</p><p>  change(3,time1[1],1);</p><p>  lcd_writecom(0x80+0x40+3);</p><p><b>  br

91、eak;</b></p><p>  case 3:time1[2]--;</p><p>  if(time1[2]==-1)</p><p>  time1[2]=23; //時</p><p>  change(0,time1[2],1);</p><p>  lcd_writecom(0

92、x80+0x40+0);</p><p><b>  break;</b></p><p>  case 4:time1[6]--;</p><p>  if(time1[6]==-1)</p><p>  time1[6]=99; //年</p><p>  change(2,tim

93、e1[6],0);</p><p>  lcd_writecom(0x80+2);</p><p><b>  break;</b></p><p>  case 5:time1[4]--;</p><p>  if(time1[4]==0)</p><p>  time1[4]=12;

94、 //月</p><p>  change(5,time1[4],0);</p><p>  lcd_writecom(0x80+5);</p><p><b>  break;</b></p><p>  case 6:time1[3]--;</p><p>  if(time1[3]==0)

95、</p><p>  time1[3]=31; //日</p><p>  change(8,time1[3],0);</p><p>  lcd_writecom(0x80+8);</p><p><b>  break;</b></p><p>  case 7:time1[5]-

96、-;</p><p>  if(time1[5]==-1)</p><p>  time1[5]=6; //星期</p><p>  write_xingqi(time1[5]);</p><p>  lcd_writecom(0x80+12);</p><p><b>  break;</

97、b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //DS1302讀寫模塊</p

98、><p>  void ds1302_set( ) //設(shè)置時間初值</p><p><b>  {</b></p><p>  write1302(0x8e,0x00); //控制寫入</p><p>  write1302(0x8c,0x11); //年</p><p>  write1302

99、(0x88,0x03); //月</p><p>  write1302(0x86,0x01); //日</p><p>  write1302(0x8a,0x01); //星期</p><p>  write1302(0x84,0x21); //時</p><p>  write1302(0x82,0x20); //分</p>

100、;<p>  write1302(0x80,0x50); //秒</p><p>  write1302(0x8e,0x80); //禁止寫入</p><p><b>  } </b></p><p>  void ds1302_inputbyte(uchar d) //寫一個字節(jié)</p><p><

101、;b>  {</b></p><p>  uchar i;ACC=d;</p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p>  ds1302_io = acc0; </p><p>  ds130

102、2_clk = 1;</p><p>  ds1302_clk = 0;</p><p>  ACC = ACC >> 1; </p><p><b>  }</b></p><p><b>  } </b></p><p>  uchar ds1302_out

103、putbyte( ) //實(shí)時時鐘讀取一字節(jié)</p><p><b>  { </b></p><p><b>  uchar i;</b></p><p>  for(i=8; i>0; i--)</p><p><b>  {</b></p><

104、p>  ACC = ACC >>1; </p><p>  acc7 = ds1302_io; </p><p>  ds1302_clk = 1;</p><p>  ds1302_clk = 0;</p><p><b>  } </b></p><p>

105、  return(ACC); </p><p><b>  }</b></p><p>  void write1302(uchar add,uchar date)</p><p><b>  {</b></p><p>  ds1302_rst = 0;</p><p> 

106、 ds1302_clk = 0;</p><p>  ds1302_rst = 1;</p><p>  ds1302_inputbyte(add); </p><p>  ds1302_inputbyte(date); </p><p>  ds1302_clk = 1;</p><p>

107、  ds1302_rst = 0;</p><p><b>  }</b></p><p>  uchar read1302(uchar add)</p><p><b>  {</b></p><p>  uchar date;</p><p>  ds1302_rst =

108、 0;</p><p>  ds1302_clk = 0;</p><p>  ds1302_rst = 1;</p><p>  ds1302_inputbyte(add); </p><p>  date = ds1302_outputbyte(); </p><p>  ds1302

109、_clk = 1;</p><p>  ds1302_rst = 0;</p><p>  return(date);</p><p><b>  }</b></p><p>  void get_1302(uchar realtime[])</p><p><b>  {</b&

110、gt;</p><p><b>  uchar i;</b></p><p>  uchar add=0x81;</p><p>  for(i=0;i<7;i++)</p><p><b>  {</b></p><p>  realtime[i]=read1302(

111、add);</p><p><b>  add+=2;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void xianshi()</p><p><b>  {</b>

112、;</p><p>  uchar i,a;</p><p>  get_1302(time);</p><p>  for(i=0;i<7;i++)</p><p><b>  {</b></p><p>  time1[i]=time[i]/16*10+time[i]%16;</

113、p><p><b>  }</b></p><p>  a=time1[2];</p><p><b>  if(count)</b></p><p>  { </p><p><b>  if(a>12)</b></p>

114、;<p><b>  { </b></p><p>  a = a-12; </p><p>  lcd_writecom(0x80+0x40+8);</p><p>  lcd_writedata('P'); </p><p><b>  }&

115、lt;/b></p><p><b>  else{</b></p><p>  lcd_writecom(0x80+0x40+8);</p><p>  lcd_writedata('A');</p><p><b>  } </b></p><p>

116、;<b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  a =time1[2];</p><p>  lcd_writecom(0x80+0x40+8);</p><p>  l

117、cd_writedata(' ');</p><p><b>  } </b></p><p>  change(6,time1[0],1);//寫秒 </p><p>  change(3,time1[1],1);//寫分</p><p>  change(0,a,1);//寫時<

118、/p><p>  change(8,time1[3],0);//寫日</p><p>  change(5,time1[4],0); //寫月</p><p>  write_xingqi(time1[5]);</p><p>  change(2,time1[6],0); //寫年</p><p><b>

119、;  }</b></p><p>  void write_xingqi(char xingqi)</p><p><b>  {</b></p><p><b>  char num;</b></p><p>  lcd_writecom(0x80+12);</p>&l

120、t;p>  for(num=0;num<3;num++)</p><p><b>  { </b></p><p>  lcd_writedata(table4[xingqi][num]);</p><p><b>  }</b></p><p><b>  }</b&g

121、t;</p><p>  void guding()</p><p><b>  {</b></p><p>  lcd_writecom(0x80+0x40+2);lcd_writedata(':');lcd_writecom(0x80+0x40+5);</p><p>  lcd_writedata(

122、':');lcd_writecom(0x80);</p><p>  change(0,20,0);lcd_writecom(0x80+4);</p><p>  lcd_writedata('-');lcd_writecom(0x80+7);</p><p>  lcd_writedata('-');lcd_writ

123、ecom(0x80+0x40+14);</p><p>  lcd_writedata(0xdf);lcd_writecom(0x80+0x40+15);</p><p>  lcd_writedata('C');</p><p><b>  }</b></p><p>  void delay_ds1

124、820(int num) //DS18B20讀寫模塊</p><p><b>  {</b></p><p>  while(num--);</p><p><b>  }</b></p><p>  void Init_DS18B20()//初始化ds1820</p><

125、p><b>  {</b></p><p>  uchar x=0;dq=1; delay_ds1820(8); dq=0; delay_ds1820(80); dq=1; </p><p>  delay_ds1820(14);x=dq; delay_ds1820(20);</p><p><b>

126、  }</b></p><p>  uchar readonechar() //讀一個字節(jié)</p><p><b>  {</b></p><p>  uchar i=0;uchar dat=0;</p><p>  for (i=8;i>0;i--)</p><p><b

127、>  {</b></p><p>  dq = 0; dat>>=1;dq = 1; if(dq)dat|=0x80;delay_ds1820(4);</p><p><b>  }</b></p><p>  return(dat);</p><p><b>  }</b&

128、gt;</p><p>  void writeonechar(uchar dat) //寫一個字節(jié)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for (i=8; i>0; i--)</p><p&g

129、t;<b>  {</b></p><p>  dq = 0;dq = dat&0x01;delay_ds1820(5);dq = 1;dat>>=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  ui

130、nt readtemp() //讀溫度</p><p><b>  {</b></p><p>  uchar a=0;uchar b=0;uint t=0;float tt=0; Init_DS18B20();writeonechar(0xCC);</p><p>  writeonechar(0x44); Init_DS18B20();

131、writeonechar(0xCC);writeonechar(0xBE);</p><p>  a=readonechar();b=readonechar();t=b;t<<=8;t=t|a;tt=t*0.0625;t= tt*10+0.5;</p><p>  return(t); </p><p><b>  }</b>

132、</p><p>  void displayw() //顯示溫度</p><p><b>  {</b></p><p>  uint num;uint shi,ge,xiaoshu;num=readtemp();shi=num/100;ge=num/10;</p><p>  if((ge>=up)||

133、(ge<=dn))</p><p><b>  {</b></p><p><b>  buzz=0;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b&

134、gt;  buzz=1;</b></p><p><b>  ge=ge%10;</b></p><p>  xiaoshu=num%10;</p><p>  lcd_writecom(0x80+0x40+10);lcd_writedata(wendu[shi]);lcd_writecom(0x80+0x40+11);</

135、p><p>  lcd_writedata(wendu[ge]);lcd_writecom(0x80+0x40+12);</p><p>  lcd_writedata(0x2e);lcd_writecom(0x80+0x40+13);</p><p>  lcd_writedata(wendu[xiaoshu]);</p><p><b&

136、gt;  }</b></p><p>  void miaobiao_init()</p><p><b>  {</b></p><p>  change(2,0,1);lcd_writecom(0x80+0x40+2);</p><p>  change(5,0,1);lcd_writecom(0x80+

137、0x40+5);</p><p>  change(8,0,1);lcd_writecom(0x80+0x40+8);</p><p>  change(11,0,1);lcd_writecom(0x80+0x40+11);</p><p>  TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;ET0=1;

138、EA=1;TR0=0;</p><p><b>  }</b></p><p>  void set_alarm()</p><p><b>  {</b></p><p>  write1302(0x8e,0x00); //控制寫入</p><p>  write1302(

139、0xc0,0x08); //時</p><p>  write1302(0xc2,0x00); //分</p><p>  write1302(0xc4,0x00); //秒</p><p>  write1302(0x8e,0x80); //禁止寫入</p><p><b>  }</b></p>&l

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論