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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  基于52單片機(jī)——</b></p><p><b>  數(shù)字電子鐘課程設(shè)計(jì)</b></p><p>  題 目: 數(shù)字電子鐘 </p><p>  院 (系): 電氣與控制工程學(xué)院 </p><p>  專 業(yè):

2、 自動(dòng)化 </p><p>  學(xué)生姓名: </p><p>  指導(dǎo)教師: </p><p><b>  摘 要</b></p><p>  單片機(jī)自20世紀(jì)70年代問(wèn)世以來(lái),以其極高的性能價(jià)格比,受

3、到人們的重視和關(guān)注,應(yīng)用很廣、發(fā)展很快。單片機(jī)體積小、重量輕、抗干擾能力強(qiáng)、環(huán)境要求不高、價(jià)格低廉、可靠性高、靈活性好、開(kāi)發(fā)較為容易。由于具有上述優(yōu)點(diǎn),在我國(guó),單片機(jī)已廣泛地應(yīng)用在工業(yè)自動(dòng)化控制、自動(dòng)檢測(cè)、智能儀器儀表、家用電器、電力電子、機(jī)電一體化設(shè)備等各個(gè)方面。本設(shè)計(jì)采用LCD液晶屏幕顯示系統(tǒng),以AT89C52單片機(jī)為核心,由鍵盤、溫度采集、定時(shí)鬧鈴、日期提醒等功能模塊組成?;陬}目基本要求,本系統(tǒng)對(duì)時(shí)間顯示、鬧鈴方式進(jìn)和溫度采集系

4、統(tǒng)行了重點(diǎn)設(shè)計(jì)。本系統(tǒng)大部分功能由軟件來(lái)實(shí)現(xiàn),吸收了硬件軟件化的思想,大部分功能通過(guò)軟件來(lái)實(shí)現(xiàn),使電路簡(jiǎn)單明了,系統(tǒng)穩(wěn)定性大大提高。本系統(tǒng)不僅成功的實(shí)現(xiàn)了要求的基本功能,多數(shù)發(fā)揮部分也得到了實(shí)現(xiàn),而且還具有一定的創(chuàng)新功能。</p><p>  關(guān)鍵字:?jiǎn)纹瑱C(jī)、 LCD液晶顯示;溫度采集;定時(shí)鬧鈴</p><p><b>  目 錄</b></p>

5、<p><b>  摘 要2</b></p><p><b>  前 言3</b></p><p><b>  1設(shè)計(jì)方案4</b></p><p>  1.1 顯示模塊4</p><p>  1.2 溫度模塊4</p><p

6、>  1.3 鍵盤模塊4</p><p>  1.4 時(shí)鐘模塊5</p><p><b>  1.5其他模塊5</b></p><p><b>  2總體框架5</b></p><p><b>  3硬件電路5</b></p><p> 

7、 3.1單片機(jī)最小系統(tǒng):6</p><p>  3.2溫度測(cè)量模塊:7</p><p>  3.3 LCD液晶顯示模塊:7</p><p>  3.4整體電路圖8</p><p>  4系統(tǒng)軟件設(shè)計(jì)流程9</p><p>  4.1主程序流程8</p><p>  4.2 溫度測(cè)量流

8、程圖10</p><p>  4.3鍵值處理流程10</p><p>  4.3處理事件流程11</p><p><b>  5程序代碼12</b></p><p><b>  6 元件清單13</b></p><p><b>  7 心得體會(huì)14<

9、;/b></p><p><b>  附程序15</b></p><p><b>  參考文獻(xiàn)30</b></p><p><b>  前言</b></p><p>  時(shí)鐘,自從它發(fā)明的那天起,就成為人類的朋友,但隨著時(shí)間的推移,科學(xué)技術(shù)的不斷發(fā)展,人們對(duì)時(shí)間計(jì)量的

10、精度要求越來(lái)越高,應(yīng)用越來(lái)越廣。怎樣讓時(shí)鐘更好的為人民服務(wù),怎樣讓我們的老朋友煥發(fā)青春呢?這就要求人們不斷設(shè)計(jì)出新型時(shí)鐘。</p><p>  現(xiàn)今,高精度的計(jì)時(shí)工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘,石英表,石英鐘都采用了石英技術(shù),因此走時(shí)精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)校,數(shù)字式電子鐘用集成電路計(jì)時(shí)時(shí),譯碼代替機(jī)械式傳動(dòng),用LED顯示器代替顯示器代替指針顯示進(jìn)而顯示時(shí)間,減小了計(jì)時(shí)誤差,這種表具

11、有時(shí),分,秒顯示時(shí)間的功能,還可以進(jìn)行時(shí)和分的校對(duì),片選的靈活性好。</p><p>  時(shí)鐘電路在計(jì)算機(jī)系統(tǒng)中起著非常重要的作用,是保證系統(tǒng)正常工作的基礎(chǔ)。在一個(gè)單片機(jī)應(yīng)用系統(tǒng)中,時(shí)鐘有兩方面的含義:一是指為保障系統(tǒng)正常工作的基準(zhǔn)振蕩定時(shí)信號(hào),主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機(jī)系統(tǒng)工作的快慢;二是指系統(tǒng)的標(biāo)準(zhǔn)定時(shí)時(shí)鐘,即定時(shí)時(shí)間,它通常有兩種實(shí)現(xiàn)方法:一是用軟件實(shí)現(xiàn),即用單片機(jī)內(nèi)部的可編程定時(shí)

12、/計(jì)數(shù)器來(lái)實(shí)現(xiàn),但誤差很大,主要用在對(duì)時(shí)間精度要求不高的場(chǎng)合;二是用專門的時(shí)鐘芯片實(shí)現(xiàn),在對(duì)時(shí)間精度要求很高的情況下,通常采用這種方法,典型的時(shí)鐘芯片有:DS1302,DS12887,X1203等都可以滿足高精度的要求。</p><p>  本文主要介紹用單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器來(lái)實(shí)現(xiàn)電子時(shí)鐘的方法,本設(shè)計(jì)由單片機(jī)AT89S51芯片和LED數(shù)碼管為核心,輔以必要的電路,構(gòu)成了一個(gè)單片機(jī)電子時(shí)鐘。</p>

13、;<p><b>  1設(shè)計(jì)方案</b></p><p><b>  1.1 顯示模塊</b></p><p>  顯示模塊采用Lcd1602。Lcd1602液晶顯示具有豐富多樣性、靈活性、電路簡(jiǎn)單、易于控制而且功耗小等優(yōu)點(diǎn),對(duì)于信息量多的系統(tǒng),是比較適合的。1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的

14、點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A”。</p><p>  因?yàn)?602識(shí)別的是ASCII碼,試驗(yàn)可以用ASCII碼直接賦值,在單片機(jī)編程中還可以用字符型常量或變量賦值,如'A’。 </p>

15、;<p><b>  1.2 溫度模塊</b></p><p>  溫度模塊采用DS18B20,其獨(dú)特的一線接口,只需要一條口線通信多點(diǎn)能力,簡(jiǎn)化了分布式溫度傳感應(yīng)用 無(wú)需外部元件 可用數(shù)據(jù)總線供電,電壓范圍為3.0 V至5.5 V 無(wú)需備用電源 測(cè)量溫度范圍為-55 ° C至+125 ℃ 。華氏相當(dāng)于是-67 ° F到257華氏度 -10 ° C

16、至+85 ° C范圍內(nèi)精度為±0.5 ° 。</p><p>  溫度傳感器可編程的分辨率為9~12位 溫度轉(zhuǎn)換為12位數(shù)字格式最大值為750毫秒,用戶可定義的非易失性溫度報(bào)警設(shè)置。應(yīng)用范圍包括恒溫控制,工業(yè)系統(tǒng),消費(fèi)電子產(chǎn)品溫度計(jì),或任何熱敏感系統(tǒng)。</p><p>  DS18B20的數(shù)字溫度計(jì)提供9至12位(可編程設(shè)備溫度讀數(shù)。信息被發(fā)送到/從DS18B

17、20 通過(guò)1線接口,所以中央微處理器與DS18B20只有一個(gè)一條口線連接。為讀寫以及溫度轉(zhuǎn)換可以從數(shù)據(jù)線本身獲得能量,不需要外接電源。 因?yàn)槊恳粋€(gè)DS18B20的包含一個(gè)獨(dú)特的序號(hào),多個(gè)DS18B20可以同時(shí)存在于一條總線。這使得溫度傳感器放置在許多不同的地方。它的用途很多,包括空調(diào)環(huán)境控制,感測(cè)建筑物內(nèi)溫設(shè)備或機(jī)器,并進(jìn)行過(guò)程監(jiān)測(cè)和控制。</p><p><b>  1.3 鍵盤模塊</b&g

18、t;</p><p>  鍵盤模塊采用4×4矩陣鍵盤。在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P2口)就可以構(gòu)成4×4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(

19、9鍵)。由此可見(jiàn),在需要的鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤是合理的。</p><p><b>  1.4時(shí)鐘模塊</b></p><p>  時(shí)鐘模塊采用定時(shí)器0提供時(shí)鐘源。定時(shí)/計(jì)數(shù)器0可以工作在4種工作方式中。工作方式0是13位的計(jì)數(shù)器;工作方式1是16位的計(jì)數(shù)器;工作方式2帶有數(shù)據(jù)自動(dòng)重裝的功能,因此,定時(shí)更精確。經(jīng)常用于波特率發(fā)生器。;工作方式3是將它當(dāng)做兩個(gè)

20、8位的定時(shí)器來(lái)用。主要與另一個(gè)定時(shí)器工作于方式2時(shí)配套使用。為了方便處理和提高精度采用方式2。但要提供秒信號(hào)還需要一個(gè)計(jì)數(shù)器來(lái)記錄中斷的次數(shù)以產(chǎn)生秒信號(hào)。</p><p><b>  1.5其他模塊</b></p><p>  程序提供校時(shí)功能,通過(guò)4×4矩陣鍵盤校時(shí),鍵盤功能鍵(即鍵值大于9的6個(gè)鍵)和鍵盤的數(shù)字鍵(即鍵值為0~9的9個(gè)鍵)來(lái)校時(shí)。<

21、/p><p>  程序可以通過(guò)設(shè)定的時(shí)間計(jì)算出當(dāng)天是星期幾。并在Lcd1602的左上角顯示出來(lái)。程序日期模塊的年份區(qū)間為2000年到2099年一百年的時(shí)間。</p><p><b>  2總體框架</b></p><p><b>  圖1總體框架</b></p><p><b>  3硬件電路

22、</b></p><p>  3.1單片機(jī)最小系統(tǒng):</p><p>  最小系統(tǒng)包括晶體振蕩電路、復(fù)位開(kāi)關(guān)和電源部分。圖2為AT89C52單片機(jī)的最小系統(tǒng)。MCS-51是標(biāo)準(zhǔn)的40引腳雙列直插式集成電路芯片,引腳分布請(qǐng)參照----單片機(jī)引腳圖:</p><p>  l P0.0~P0.7 P0口8位雙向口線(在引腳的39~32號(hào)端子)。 </p&

23、gt;<p>  l P1.0~P1.7 P1口8位雙向口線(在引腳的1~8號(hào)端子)。</p><p>  l P2.0~P2.7 P2口8位雙向口線(在引腳的21~28號(hào)端子)。   </p><p>  l P3.0~P3.7 P3口8位雙向口線(在引腳的10~17號(hào)端子)。</p><p>  P0做一般的I/O使用,但內(nèi)部無(wú)上拉電阻,作為輸入或

24、輸出時(shí)應(yīng)在外部接上拉電阻。 P1口只做I/O口使用:其內(nèi)部有上拉電阻。P3 除了作為I/O使用外(其內(nèi)部有上拉電阻),還有一些特殊功能,由特殊寄存器來(lái)設(shè)置2 </p><p>  圖2 最小系統(tǒng)電路圖</p><p><b>  程序下載接口</b></p><p><b>  圖3-4</b></p>&l

25、t;p>  如圖3-4所示,由AT89S ISP構(gòu)成的兩排十針下載口,板圖上有一個(gè)小方框,為1號(hào)引角;下載線的凸口為正方向,凸口的右側(cè)邊的第一個(gè)插孔為1號(hào)引角。</p><p>  3.2溫度測(cè)量模塊:</p><p>  溫度測(cè)量傳感器采用DALLAS公司DS18B20的單總線數(shù)字化溫度傳感器,測(cè)溫范圍為-55℃~125℃,可編程為9位~12位A/D轉(zhuǎn)換精度,測(cè)溫分辨率達(dá)到0.06

26、25℃,采用寄生電源工作方式,CPU只需一根口線便能與DS18B20通信,占用CPU口線少,可節(jié)省大量引線和邏輯電路。接口電路如圖3所示。</p><p>  圖3 DS18B20測(cè)量電路</p><p>  3.3. LCD液晶顯示模塊:</p><p>  LCD液晶顯示模塊采用LCD1602型號(hào),具有很低的功耗,正常工作時(shí)電流僅2.0mA/5.0V。通過(guò)編

27、程實(shí)現(xiàn)自動(dòng)關(guān)閉屏幕能夠更有效的降低功耗。LCD1602分兩行顯示,每行可顯示多達(dá)16個(gè)字符。LCD1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,通過(guò)內(nèi)部指令可實(shí)現(xiàn)對(duì)其顯示多樣的控制,并且還能利用空余的空間自定義字符。</p><p>  3.4. 整體電路圖</p><p><b>  4系統(tǒng)軟件設(shè)計(jì)流程</b></p&

28、gt;<p><b>  4.1主程序流程</b></p><p><b>  否</b></p><p><b>  是</b></p><p>  圖7 系統(tǒng)主程序流程</p><p>  4.2. 溫度測(cè)量流程圖如圖11所示:</p><

29、p>  圖11 溫度測(cè)量程序流程圖</p><p><b>  、</b></p><p><b>  4.3鍵值處理流程</b></p><p><b>  否</b></p><p><b>  是</b></p><p>

30、;<b>  否</b></p><p><b>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b>  否</b></p><p><

31、b>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p>  圖9 鍵值處理

32、流程圖</p><p>  4.4 處理事件流程圖</p><p><b>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b>  否</b></p>

33、<p><b>  是</b></p><p><b>  否</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b>  否</b></p><

34、p><b>  是</b></p><p>  圖8 溫度測(cè)量流程圖</p><p><b>  5程序代碼</b></p><p><b>  主程序代碼</b></p><p>  5#include"Feiyun.h"</p>&l

35、t;p>  uchar sws=3;</p><p>  void Init()</p><p><b>  {</b></p><p>  LcdInit();</p><p>  TimeDateInit();</p><p>  TimerInit();</p><

36、;p><b>  }</b></p><p>  void KeyPro()</p><p><b>  {</b></p><p><b>  KEY temp;</b></p><p>  ReadKey(&temp);</p><p&g

37、t;  if(temp.c_key==0x0a)</p><p>  cls,sws=1;</p><p>  if(temp.c_key==0x0b)</p><p>  cls,sws=2;</p><p>  if(temp.c_key==0x0c)</p><p>  Set(0x08);</p>

38、<p>  if(temp.c_key==0x0d)</p><p>  Set(0x47);</p><p>  if(temp.c_key==0x0e)</p><p><b>  sws=3;</b></p><p>  if(temp.c_key==0x0f)</p><p>

39、<b>  sws=0;</b></p><p><b>  }</b></p><p>  void MsgPro()</p><p><b>  {</b></p><p>  if(timer.iscg&0xf0) </p><p>&l

40、t;b>  {</b></p><p>  timer.iscg&=0x0f;</p><p><b>  DateCg();</b></p><p>  if(sws==0)</p><p><b>  {</b></p><p>  BuzzCl

41、ose;</p><p>  TimeShow();</p><p>  DateShow();</p><p><b>  }</b></p><p>  else if(sws==1)</p><p><b>  { </b></p><p&g

42、t;  TempShow();</p><p><b>  }</b></p><p>  else if(sws==2)</p><p><b>  {</b></p><p>  AlarmClock();</p><p><b>  }</b>&l

43、t;/p><p>  else if(sws==3)</p><p><b>  {</b></p><p>  TimeShow();</p><p>  DateShow();</p><p>  if(CheckTime())</p><p><b>  Bu

44、zzOpen;</b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {&l

45、t;/b></p><p><b>  Init();</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  MsgPro();</b></p><p&g

46、t;  if(KeyDown) </p><p>  KeyPro(); </p><p><b>  } </b></p><p><b>  }</b></p><p><b>  6 元件清單</b></p><p><b>

47、;  7 心得體會(huì)</b></p><p>  王慧 自動(dòng)化1002班 1006050203</p><p>  這次課程設(shè)計(jì)里我學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。以前在上課的時(shí)候,老師經(jīng)常強(qiáng)調(diào)在寫一個(gè)程序的時(shí)候,一定要事先把程序原理方框圖化出來(lái),但是我開(kāi)始總覺(jué)得這樣做沒(méi)必要,很浪費(fèi)時(shí)間。但是,這次課程設(shè)計(jì)完全改變了我以前的那種錯(cuò)誤的認(rèn)識(shí),以前我接觸的那些程序

48、都是很短、很基礎(chǔ)的,但是在課程設(shè)計(jì)中碰到的那些需要很多代碼才能完成的任務(wù),畫(huà)程序方框圖是很有必要的。因?yàn)橥ㄟ^(guò)程序方框圖,在做設(shè)計(jì)的過(guò)程中,我們每一步要做什么,每一步要完成什么任務(wù)都有一個(gè)很清楚的思路,而且在程序測(cè)試的過(guò)程中也有利于查錯(cuò)。</p><p>  其次,以前對(duì)于編程工具的使用還處于一知半解的狀態(tài)上,但是經(jīng)過(guò)一段上機(jī)的實(shí)踐,對(duì)于怎么去排錯(cuò)、查錯(cuò),怎么去看每一步的運(yùn)行結(jié)果,怎么去了解每個(gè)寄存器的內(nèi)容以確保程

49、序的正確性上都有了很大程度的提高。</p><p>  通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,這畢竟第一次做的,難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深

50、刻,掌握得不夠牢固。</p><p>  邵云杰 自動(dòng)化1002班 1006050208</p><p>  回顧起此課程設(shè)計(jì),至今我仍感慨頗多,從理論到實(shí)踐,在這段日子里,可以說(shuō)得是苦多于甜,但是可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不

51、夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。,課程設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,但可喜的是最終都得到了解決。實(shí)驗(yàn)過(guò)程中,也對(duì)團(tuán)隊(duì)精神的進(jìn)行了考察,讓我們?cè)诤献髌饋?lái)更加默契,在成功后一起體會(huì)喜悅的心情。果然是團(tuán)結(jié)就是力量,只有互相之間默契融洽的配合才能換來(lái)最終完美的結(jié)果。</p><p>  此次設(shè)計(jì)也讓我明白了思路即出路

52、,有什么不懂不明白的地方要及時(shí)請(qǐng)教或上網(wǎng)查詢,只要認(rèn)真鉆研,動(dòng)腦思考,動(dòng)手實(shí)踐,就沒(méi)有弄不懂的知識(shí),收獲頗豐。</p><p>  徐銑蔚 自動(dòng)化1001班 1006050102</p><p>  兩周的課程設(shè)計(jì)結(jié)束了,在這次的課程設(shè)計(jì)中不僅檢驗(yàn)了我所學(xué)習(xí)的知識(shí),也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在設(shè)計(jì)過(guò)程中,與同學(xué)分工設(shè)計(jì),和同學(xué)們相

53、互探討,相互學(xué)習(xí),相互監(jiān)督。學(xué)會(huì)了合作,學(xué)會(huì)了運(yùn)籌帷幄,學(xué)會(huì)了寬容,學(xué)會(huì)了理解,也學(xué)會(huì)了做人與處世。 課程設(shè)計(jì)是我們專業(yè)課程知識(shí)綜合應(yīng)用的實(shí)踐訓(xùn)練,著是我們邁向社會(huì),從事職業(yè)工作前一個(gè)必不少的過(guò)程.”千里之行始于足下”,通過(guò)這次課程設(shè)計(jì),我深深體會(huì)到這句千古名言的真正含義.我今天認(rèn)真的進(jìn)行課程設(shè)計(jì),學(xué)會(huì)腳踏實(shí)地邁開(kāi)這一步,就是為明天能穩(wěn)健地在社會(huì)大潮中奔跑打下堅(jiān)實(shí)的基礎(chǔ)。 通過(guò)這次單片機(jī)數(shù)字電子鐘設(shè)計(jì),我在多方面都有所提

54、高,綜合運(yùn)用本專業(yè)所學(xué)課程的理論和生產(chǎn)實(shí)際知識(shí)進(jìn)行一次數(shù)字電子鐘的設(shè)計(jì)設(shè)計(jì)工作的實(shí)際訓(xùn)練從而培養(yǎng)和提高獨(dú)立工作能力,鞏固與擴(kuò)充了課程所學(xué)的內(nèi)容,掌握設(shè)計(jì)的方法和步驟,掌握設(shè)計(jì)的基本的技能,同時(shí)各科相關(guān)的課程都有了全面的復(fù)習(xí),獨(dú)立思考的能力也有了提高。在這次設(shè)計(jì)過(guò)程中,體現(xiàn)出設(shè)計(jì)電路的能力以及綜合運(yùn)用知識(shí)的能力,體會(huì)了學(xué)以致用、突出勞動(dòng)成果的喜悅心情,從中發(fā)現(xiàn)自己平時(shí)學(xué)習(xí)的不足和薄弱環(huán)</p><p>  1、時(shí)間

55、日期的設(shè)置初始化</p><p>  #include"Feiyun.h"</p><p>  uchar hour=0;</p><p>  uchar min=0;</p><p>  uchar sec=0;</p><p>  uchar year=0;</p><p&g

56、t;  uchar month=0;</p><p>  uchar day=0;</p><p>  uchar ahour=0;</p><p>  uchar amin=0;</p><p>  void TimeDateInit() //時(shí)間和日期的初始化</p><p><b>  {</b

57、></p><p><b>  year=11;</b></p><p><b>  month=6;</b></p><p><b>  day=19;</b></p><p><b>  hour=23;</b></p><p

58、><b>  min=0;</b></p><p><b>  sec=0;</b></p><p><b>  ahour=23;</b></p><p><b>  amin=1;</b></p><p><b>  }</b&g

59、t;</p><p>  uchar isleep(y)</p><p><b>  {</b></p><p>  return !(y%4);</p><p><b>  }</b></p><p>  uchar GetMDM(y,m)</p><p

60、><b>  {</b></p><p>  uchar mon[]={31,28,31,30,31,30,31,31,30,31,30,31};</p><p><b>  if(m==2) </b></p><p>  return mon[1]+isleep(y);</p><p>&l

61、t;b>  else </b></p><p>  return mon[m-1];</p><p><b>  }</b></p><p>  uint GetMDY(y)</p><p><b>  {</b></p><p>  if(isle

62、ep(y))</p><p>  return 366;</p><p><b>  else </b></p><p>  return 365;</p><p><b>  }</b></p><p>  uchar GetWeek()</p><p&

63、gt;<b>  {</b></p><p>  uint num=0;</p><p>  uchar i,week;</p><p>  for(i=1;i<year;i++)</p><p>  num+=GetMDY(i);</p><p>  for(i=1;i<month;

64、i++)</p><p>  num+=GetMDM(year,i);</p><p>  num+=day; </p><p>  week=num%7;</p><p>  return week; </p><p><b>  }</b></p><p>  

65、void DateCg()</p><p><b>  {</b></p><p>  if(hour==24)</p><p>  hour=0,day++;</p><p>  if(day>GetMDM(year,month))</p><p>  day=1,month++;<

66、/p><p>  if(month>12)</p><p>  month=1,year++;</p><p><b>  }</b></p><p>  void TimeCg() //時(shí)間模塊</p><p><b>  {</b><

67、/p><p><b>  sec++;</b></p><p>  if(sec==60)</p><p>  sec=0,min++;</p><p>  if(min==60)</p><p>  min=0,hour++; </p><p><b>  }&l

68、t;/b></p><p>  String TimetoStr() </p><p><b>  {</b></p><p>  uchar time[6];</p><p>  uchar buf[6];</p><p><b>  uchar i;</b&g

69、t;</p><p>  time[0]=hour/10-1+'1';</p><p>  time[1]=hour%10-1+'1';</p><p>  time[2]=min/10-1+'1';</p><p>  time[3]=min%10-1+'1';</p&g

70、t;<p>  time[4]=sec/10-1+'1';</p><p>  time[5]=sec%10-1+'1';</p><p>  for(i=0;i<6;i++)</p><p>  buf[i]=time[i];</p><p>  return buf;</p>

71、<p><b>  }</b></p><p>  void TimeShow() //用LCD1602顯示時(shí)間 </p><p><b>  {</b></p><p>  String time;</p><p>  time=TimetoStr();<

72、/p><p>  LcdStr(0x04,"Time");</p><p>  LcdData(0x08,hour);</p><p>  LcdChar(0x0a,'-');</p><p>  LcdData(0x0b,min);</p><p>  LcdChar(0x0d,

73、9;-');</p><p>  LcdData(0x0e,sec);</p><p><b>  }</b></p><p>  String DatetoStr() //日期模塊</p><p><b>  {</b></p><p>  uchar Dat

74、e[6];</p><p>  uchar buf[6];</p><p><b>  uchar i;</b></p><p>  Date[0]=year/10+'1'-1;</p><p>  Date[1]=year%10+'1'-1;</p><p>  

75、Date[2]=month/10+'1'-1;</p><p>  Date[3]=month%10+'1'-1;</p><p>  Date[4]=day/10+'1'-1;</p><p>  Date[5]=day%10+'1'-1;</p><p>  for(i=0;

76、i<6;i++)</p><p>  buf[i]=Date[i];</p><p>  return buf;</p><p>  }</p><p>  void WeekShow()</p><p><b>  {</b></p><p>  

77、uchar wk[]="Sun Mon Tue Wed Thu Fri Sat Erro";</p><p>  uchar D[]="Date 20";</p><p>  uchar week=0;</p><p><b>  uchar i;</b></p><p><

78、;b>  pd(0x00);</b></p><p>  week=GetWeek();</p><p>  for(i=0;i<4;i++)</p><p>  write_data(wk[week*4+i]);</p><p><b>  pd(0x40);</b></p>&l

79、t;p>  for(i=0;i<7;i++)</p><p>  write_data(D[i]);</p><p><b>  }</b></p><p>  void DateShow()</p><p><b>  {</b></p><p>  Strin

80、g date;</p><p>  WeekShow();</p><p>  date=DatetoStr();</p><p>  write_data(date[0]);</p><p>  write_data(date[1]);</p><p>  write_data('-');</p

81、><p>  write_data(date[2]);</p><p>  write_data(date[3]);</p><p>  write_data('-');</p><p>  write_data(date[4]);</p><p>  write_data(date[5]);</p&

82、gt;<p><b>  pd(0x50);</b></p><p><b>  }</b></p><p>  void Loadbuf(uchar p,String buf)</p><p><b>  {</b></p><p>  if(p==0x08)&

83、lt;/p><p><b>  {</b></p><p>  buf[0]=hour/10;</p><p>  buf[1]=hour%10;</p><p>  buf[2]=min/10;</p><p>  buf[3]=min%10;</p><p>  buf[4

84、]=sec/10;</p><p>  buf[5]=sec%10;</p><p><b>  }</b></p><p>  if(p==0x47)</p><p><b>  {</b></p><p>  buf[0]=year/10;</p><

85、p>  buf[1]=year%10;</p><p>  buf[2]=month/10;</p><p>  buf[3]=month%10;</p><p>  buf[4]=day/10;</p><p>  buf[5]=day%10;</p><p><b>  }</b>&l

86、t;/p><p><b>  }</b></p><p>  void Save(uchar p,String buf)</p><p><b>  {</b></p><p>  if(p==0x08)</p><p><b>  {</b></p&

87、gt;<p>  hour=buf[0]*10+buf[1];</p><p>  min=buf[2]*10+buf[3];</p><p>  sec=buf[4]*10+buf[5];</p><p><b>  }</b></p><p>  if(p==0x47)</p><p

88、><b>  {</b></p><p>  year=buf[0]*10+buf[1];</p><p>  month=buf[2]*10+buf[3];</p><p>  day=buf[4]*10+buf[5];</p><p><b>  }</b></p><

89、p><b>  }</b></p><p>  void Set(uchar p)</p><p><b>  {</b></p><p>  uchar i=0;</p><p>  uchar tmp[8]={0,1,1,2,3,3,4,5};</p><p>  

90、uchar imr[8]={1,3,4,4,6,6,7,0};</p><p>  uchar iml[8]={7,0,1,1,3,4,4,6};</p><p>  uchar buf[6]={0,0,0,0,0,0};</p><p>  uchar dat=0x10; </p><p>  Loadbuf(p,buf);

91、 </p><p>  while((dat!=0x0f)&&(dat!=0x0e))</p><p><b>  {</b></p><p>  if(KeyDown) dat=scankey();</p><p>  if(dat<0x10)</p><p><

92、b>  {</b></p><p>  if(dat<0x0a)</p><p><b>  {</b></p><p>  buf[tmp[i]]=dat;</p><p>  write_data(buf[tmp[i]]+'1'-1);</p><p>

93、<b>  dat=0x10;</b></p><p><b>  i=imr[i];</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p&

94、gt;<p>  switch (dat)</p><p><b>  {</b></p><p><b>  case 12:</b></p><p><b>  {</b></p><p><b>  dat=0x10;</b></

95、p><p><b>  i=iml[i];</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 13:{</b></p><p><b>  

96、dat=0x10;</b></p><p><b>  i=imr[i];</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 14:</b></p>

97、;<p><b>  { </b></p><p>  Save(p,buf);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  case 15:break; </p><p>

98、<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  pd(p+i);</b></p><p><b>  }</b></p><p&g

99、t;  pd(0x50); </p><p><b>  }</b></p><p>  void setahour()</p><p><b>  {</b></p><p>  uchar dat=0xff,state;</p><p><b>  pd(0

100、x45);</b></p><p>  while(dat!=0x0e) </p><p><b>  { </b></p><p>  if(dat<0x10)</p><p><b>  {</b></p><p>  if(state==0)</

101、p><p><b>  {</b></p><p><b>  state++;</b></p><p>  ahour=ahour%10;</p><p>  ahour=ahour+dat*10;</p><p>  LcdData(0x45,ahour);</p>

102、;<p><b>  pd(0x46);</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  state=0;</b

103、></p><p>  ahour=ahour/10;</p><p>  ahour=ahour*10;</p><p>  ahour=ahour+dat;</p><p>  LcdData(0x45,ahour);</p><p><b>  pd(0x45);</b></p&

104、gt;<p><b>  }</b></p><p><b>  }</b></p><p>  if(KeyDown) dat=scankey();</p><p>  else dat=0xff;</p><p><b>  } </b></p>

105、<p><b>  pd(0x50);</b></p><p><b>  }</b></p><p>  void setamin()</p><p><b>  {</b></p><p>  uchar dat=0xff,state;</p>

106、<p><b>  pd(0x4c);</b></p><p>  while(dat!=0x0e) </p><p><b>  {</b></p><p>  if(dat<0x10)</p><p><b>  {</b></p><p

107、>  if(state==0)</p><p><b>  {</b></p><p><b>  state++;</b></p><p>  amin=amin%10;</p><p>  amin=amin+dat*10;</p><p>  LcdData(0x

108、4c,amin);</p><p><b>  pd(0x4d);</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b&g

109、t;  state=0;</b></p><p>  amin=amin/10;</p><p>  amin=amin*10;</p><p>  amin=amin+dat;</p><p>  LcdData(0x4c,amin);</p><p><b>  pd(0x4c);</b

110、></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(KeyDown) dat=scankey();</p><p>  else dat=0xff;</p><p><b>  } </b>

111、;</p><p><b>  pd(0x50);</b></p><p><b>  }</b></p><p>  void AlarmClock()</p><p><b>  {</b></p><p>  uchar dat;</p>

112、;<p>  LcdStr(0x00,"The Alarm Clock:");</p><p>  LcdStr(0x40,"Hour");</p><p>  LcdData(0x45,ahour);</p><p>  LcdStr(0x48,"Min");</p><

113、p>  LcdData(0x4c,amin);</p><p>  while((dat!=0x0f)&&(dat!=0x0e))</p><p><b>  {</b></p><p>  if(KeyDown) dat=scankey();</p><p>  else dat=0xff;<

114、;/p><p>  if(dat==0x0c) setahour();</p><p>  if(dat==0x0d) setamin(); </p><p><b>  }</b></p><p><b>  }</b></p><p>  uchar CheckTime()&

115、lt;/p><p><b>  {</b></p><p>  if(hour==ahour&&min==amin)</p><p><b>  return 1;</b></p><p>  else return 0;</p><p><b>  }

116、</b></p><p>  2、溫度傳感器的復(fù)位延時(shí)</p><p>  #include "Feiyun.h" </p><p>  uint temp=270; </p><p>  void delay_us(uint t) ////延時(shí)函數(shù)</p><p><

117、;b>  {</b></p><p>  for(;t>0;t--);</p><p><b>  } </b></p><p>  void reset(void) ////DS18B20復(fù)位函數(shù) </p><p><b>  {</b></p

118、><p>  uchar state=1;</p><p>  while(state)</p><p><b>  {</b></p><p>  while(state)</p><p><b>  {</b></p><p><b>  D

119、Q=1;</b></p><p>  _nop_();_nop_();</p><p><b>  DQ=0;</b></p><p>  delay_us(50);</p><p><b>  DQ=1;</b></p><p>  delay_us(6);&l

120、t;/p><p><b>  state=DQ;</b></p><p><b>  }</b></p><p>  delay_us(45);</p><p>  state=~DQ;</p><p><b>  }</b></p><

121、p><b>  DQ=1;</b></p><p><b>  }</b></p><p>  void write_byte(uchar val)//寫一個(gè)字節(jié) </p><p><b>  {</b></p><p><b>  uchar i;</

122、b></p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p>  DQ=1;_nop_();_nop_();</p><p>  DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();</p><p&

123、gt;  DQ=val&0x01;</p><p>  delay_us(6);</p><p>  val=val/2;</p><p><b>  }</b></p><p><b>  DQ=1;</b></p><p><b>  _nop_();&

124、lt;/b></p><p><b>  } </b></p><p>  uchar read_byte(void) ///////讀一個(gè)字節(jié)</p><p><b>  {</b></p><p><b>  uchar i;</b></p>

125、<p>  uchar value=0;</p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p>  DQ=1;_nop_();_nop_();</p><p>  value>>=1;</p><p><

126、b>  DQ=0;</b></p><p>  _nop_();_nop_();_nop_();_nop_();</p><p>  DQ=1;_nop_();_nop_();_nop_();_nop_();</p><p>  if(DQ)value|=0x80;</p><p>  delay_us(6);</p&

127、gt;<p><b>  }</b></p><p><b>  DQ=1;</b></p><p>  return(value);</p><p><b>  }</b></p><p>  void gettemp()</p><p>

128、;<b>  {</b></p><p>  uchar a,b;</p><p>  uint t; </p><p><b>  reset();</b></p><p>  write_byte(0xcc);</p><p>  write_byte(0xbe);&

129、lt;/p><p>  a=read_byte(); //讀取高字節(jié)</p><p>  b=read_byte(); //讀取低字節(jié)</p><p><b>  reset();</b></p><p>  write_byte(0xcc);</p><p>  write_byte(0

130、x44);</p><p>  //處理讀取溫度t </p><p><b>  t=b;</b></p><p>  t<<=8; //值左移8位 </p><p>  t=t|a; //合并高低位數(shù)值</p><p>  if(t>

131、;0xfff) //判斷溫度是為正還是為負(fù)</p><p>  t=~t+1; //負(fù)值換算</p><p>  t=t*(0.625); //溫度擴(kuò)大10倍,精確到1位小數(shù)</p><p>  if((temp-t)<100||(t-temp)<100)</p><p><b>  temp=t;&

132、lt;/b></p><p><b>  }</b></p><p>  void TempShow() ///溫度讀取函數(shù)</p><p><b>  { </b></p><p>  char buf[4];</p><p>  gettemp();<

133、;/p><p>  buf[0]=temp%1000/100+0x30; //十位數(shù)</p><p>  buf[1]=temp%100/10+0x30; //個(gè)位數(shù)</p><p>  buf[2]='.';</p><p>  buf[3]=temp%10+0x30; //小數(shù)位</p>&

134、lt;p><b>  pd(0x40);</b></p><p>  write_data(buf[0]);</p><p>  write_data(buf[1]);</p><p>  write_data(buf[2]);</p><p>  write_data(buf[3]);</p>&l

135、t;p>  write_data(du);</p><p>  write_data('C');</p><p>  LcdStr(0x00,"The Temperature:");</p><p><b>  }</b></p><p><b>  3、掃描函數(shù)&l

136、t;/b></p><p>  #include"Feiyun.h"</p><p>  uchar code Key[]={1,2,3,10,4,5,6,11,7,8,9,14,0,12,13,15};</p><p>  uchar code check[]={0xe7,0xd7,0xb7,0x77,0xeb,0xdb,0xbb,0x7

137、b,</p><p>  0xed,0xdd,0xbd,0x7d,0xee,0xde,0xbe,0x7e};</p><p>  uchar code num[]="0123456789UDLREQ";</p><p>  uchar scankey(void) //掃描函數(shù)</p><p><b

138、>  {</b></p><p>  uchar readkey,key,i;</p><p>  uchar x_key,y_key; //X為行,Y為豎</p><p>  uchar dat;</p><p>  scan:P2=0xf0;</p><p>  delay(20);

139、 //去抖</p><p>  if(P2!=0xf0) //確認(rèn)有鍵按下</p><p><b>  {</b></p><p>  y_key=P2; //讀Y鍵值</p><p><b>  P2=0x0f;</b></p><p&

140、gt;  while(P2==0x0f); </p><p>  x_key=P2; //讀X鍵值</p><p>  while(P2!=0x0f); //是否釋放鍵</p><p>  readkey=y_key|x_key; //讀取鍵值特征碼;</p><p><b>  }</b>

141、;</p><p>  else goto scan; //重新掃描</p><p>  for(i=0;i<16;i++)</p><p>  if(readkey==check[i]) key=i;</p><p>  key=Key[key];</p><p>  if(key<16&

142、amp;&key>=0) dat=key;</p><p>  else scankey();</p><p>  delay(20);</p><p>  while(KeyDown);</p><p>  return dat;</p><p><b>  }</b></p

143、><p>  uchar ReadKey(KEY *dat)</p><p><b>  {</b></p><p>  char temp,buf;</p><p>  if(KeyDown) </p><p><b>  {</b></p><p>&

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論