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

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計(jì)</p><p>  課程名稱 單片機(jī)原理及應(yīng)用 </p><p>  課題名稱 簡易數(shù)字電壓表 </p><p>  專 業(yè) 自動(dòng)化 </p><p>  班

2、 級(jí) </p><p>  學(xué) 號(hào) </p><p>  姓 名 </p><p>  指導(dǎo)教師

3、 </p><p>  2012年5月14日</p><p><b>  目 錄</b></p><p>  ?一 系統(tǒng)總體方案選擇與說明1</p><p>  1.1 通道轉(zhuǎn)換部分設(shè)計(jì)1</p><p>  1.2 顯示部分設(shè)計(jì)1</p><p&g

4、t;  ?二 系統(tǒng)結(jié)構(gòu)框圖與工作原理2</p><p>  ?三 各單元硬件設(shè)計(jì)說明及計(jì)算方法3</p><p>  3.1 單片機(jī)的選擇及時(shí)鐘電路3</p><p>  3.2 LED顯示電路設(shè)計(jì)與器件選擇3</p><p>  3.3 A/D轉(zhuǎn)換模塊及轉(zhuǎn)化電路設(shè)計(jì)5</p><p>  3.3.1 A

5、DC0808簡介5</p><p>  ?3.3.2 A/D轉(zhuǎn)換電路設(shè)計(jì)6</p><p>  ?四 軟件設(shè)計(jì)與說明7</p><p>  ?五 調(diào)試結(jié)果與必要的調(diào)試說明8</p><p>  ?六 使用說明9</p><p>  ?七 程序清單10</p><p><

6、;b>  ?八 總結(jié)32</b></p><p>  ?九 參考文獻(xiàn)33</p><p><b>  ?十 附錄34</b></p><p>  電氣信息學(xué)院課程設(shè)計(jì)評(píng)分表36</p><p>  一 系統(tǒng)總體方案選擇與說明</p><p>  實(shí)現(xiàn)數(shù)字電壓表的方案

7、很多,目前廣泛采用的是時(shí)基于74系列邏輯器件,本設(shè)計(jì)將介紹基于單片機(jī)實(shí)現(xiàn)的方案。</p><p>  此設(shè)計(jì)包含兩個(gè)模塊,通道轉(zhuǎn)換和顯示部分。</p><p>  1.1 通道轉(zhuǎn)換部分設(shè)計(jì)</p><p>  方案一:考慮到ADC0809有8個(gè)模擬通道的輸入,可以實(shí)現(xiàn)接入其中任何一個(gè)通道的信號(hào)就顯示那個(gè)通道的電壓,如果有多路輸入就分時(shí)顯示,但是要花費(fèi)大量的指令周期。

8、</p><p>  方案二:利用手動(dòng)開關(guān)實(shí)現(xiàn)通道轉(zhuǎn)換。該方案可簡化控制程序,消減系統(tǒng)開銷。縮短反應(yīng)時(shí)間,不足之處在于操作麻煩。</p><p>  綜上所述:方案二只需增加一個(gè)鍵盤、成本低且易于實(shí)現(xiàn),所以選用該方案。由于單片機(jī)的許多輸入輸出口沒有用上,在一個(gè)簡易數(shù)字電壓表的基礎(chǔ)上,在沒有增加額外的硬件的情況下添加了時(shí)鐘顯示的功能,電壓表能測量0-5V的直流電壓,能連續(xù)、穩(wěn)定顯示所測電壓。

9、并且誤差值僅為0.01。</p><p>  1.2 顯示部分設(shè)計(jì)</p><p>  由于單片機(jī)的輸出口有限,所以本設(shè)計(jì)運(yùn)用了兩片74ls373來進(jìn)行信號(hào)所存,從而達(dá)到復(fù)用輸入輸出口的作用。</p><p>  二 系統(tǒng)結(jié)構(gòu)框圖與工作原理</p><p>  由于沒有用到串行通信,單片機(jī)使用時(shí)鐘基頻為12MHz的晶振,復(fù)位電路等外圍也是使用

10、早已成熟的方案。由于proteus沒有ADC0809的仿真模型,所以在仿真電路圖中用了一片ADC0808代替仿真,但在實(shí)際電路中 要用ADC0809做模數(shù)轉(zhuǎn)換模塊。</p><p>  由于ADC0809有8個(gè)測量通道,首先用鍵盤通過單片機(jī)傳控制ADC0809開啟其中一路信號(hào)通道。然后讓ADC0809進(jìn)行轉(zhuǎn)換,ADC0809會(huì)將0-5V電壓變換成0-28即0-256的數(shù)字量,電壓的模擬量也就轉(zhuǎn)換成了單片機(jī)可處理的

11、數(shù)字量。然后單片機(jī)進(jìn)行信號(hào)的處理,將該數(shù)字量還原出電壓值,最后通過數(shù)碼管進(jìn)行顯示。其中的鎖存器是為了減少顯示部分對單片機(jī)引腳硬件資源的占用。</p><p>  三 各單元硬件設(shè)計(jì)說明及計(jì)算方法</p><p>  硬件電路由5個(gè)部分組成,即單片機(jī)時(shí)鐘電路、復(fù)位電路、6位顯示器電路、A/D轉(zhuǎn)換電路和鍵盤及測量電路。</p><p>  3.1 單片機(jī)的選擇及時(shí)鐘電路

12、</p><p>  根據(jù)初步設(shè)計(jì)方案的分析,設(shè)計(jì)這樣一個(gè)簡單的應(yīng)用系統(tǒng),可以選擇帶有EPROM的單片機(jī),應(yīng)用程序直接存儲(chǔ)在片內(nèi),不用在外部擴(kuò)展程序存儲(chǔ)器,電路可以簡化。此電路選擇Atmel公司生產(chǎn)的AT89C51。AT89系列與MCS-51系列單片機(jī)相比有兩大優(yōu)勢:第一,片內(nèi)程序存儲(chǔ)器采用閃速存儲(chǔ)器,使程序的寫入更加方便;第二,提供了更小尺寸的芯片,使整個(gè)電路體積更小。它以較小的體積、良好的性價(jià)比倍受青睞。&l

13、t;/p><p>  單片機(jī)工作的時(shí)間基準(zhǔn)是由時(shí)鐘電路提供的。在單片機(jī)的XTAL1和XTAL2兩個(gè)管腳,接一只晶振及兩只電容就構(gòu)成了單片機(jī)的時(shí)鐘電路。</p><p>  電路中,電容C1和C2對震蕩電路有微調(diào)的作用,通常的取值范圍位(30+10)pF。石英晶體選擇6MHz或12MHz都可以,其結(jié)果只是機(jī)器周期時(shí)間不同,影響計(jì)數(shù)器的計(jì)數(shù)初值,此設(shè)計(jì)取12MHz。本設(shè)計(jì)使用的是CLOCK時(shí)鐘脈沖

14、觸發(fā)。</p><p>  3.2 LED顯示電路設(shè)計(jì)與器件選擇</p><p>  單片機(jī)應(yīng)用系統(tǒng)中,通常都需要進(jìn)行人機(jī)對話。這包括人對應(yīng)用系統(tǒng)的狀態(tài)干預(yù)與數(shù)據(jù)輸入,以及應(yīng)用系統(tǒng)向人們顯示運(yùn)行狀態(tài)與運(yùn)行結(jié)果。顯示器、鍵盤電路就是用來完成人機(jī)對話活動(dòng)的人機(jī)通道。</p><p>  圖3-2-1 LED顯示模塊</p><p>  LED顯示

15、器的驅(qū)動(dòng)是一個(gè)非常重要的問題,由圖3-2-1可知,顯示電路由LED顯示器、段驅(qū)動(dòng)電路和位驅(qū)動(dòng)電路組成。</p><p>  在應(yīng)用系統(tǒng)中,設(shè)計(jì)要求不同,使用的LED顯示器的位數(shù)也不同,因此生產(chǎn)廠家就生產(chǎn)了多種位數(shù)、尺寸、型號(hào)不同的LED顯示器。在我們的設(shè)計(jì)中,選擇6位一體的共陰極時(shí)鐘型LED顯示器,采用動(dòng)態(tài)顯示方式。</p><p>  采用P1口作為LED的段碼輸出信號(hào),P3.0,P3.

16、1結(jié)合P1口作為位選和段選的控制信號(hào)。硬件電路的連接如圖3-2-2所示。</p><p>  圖3-2-2 LED顯示器接口電路原理</p><p>  該電路的工作原理:當(dāng)P0口輸出段碼信號(hào)的BCD碼后,輸出具有一定驅(qū)動(dòng)能力的七段字形碼,由于6-LED的段碼輸入管腳是并聯(lián)在一起的,所以每一位LED的段碼輸入管腳都能獲得這個(gè)段碼信號(hào)。若要控制在每一時(shí)刻只有一位LED被點(diǎn)亮,必須靠位碼信號(hào)控

17、制。P3.0為1則位選選通當(dāng)P1口某一位為0則該位數(shù)碼管點(diǎn)亮。如果P1口的位碼信號(hào)在每一時(shí)刻只有一位是“1”,其他位全為“0”,然后按時(shí)間順序改變輸出“1”的位置,控制在每一時(shí)刻只有一位LED被點(diǎn)亮,達(dá)到動(dòng)態(tài)顯示的目的。</p><p>  說明:第6位顯示轉(zhuǎn)換通道,0、1和2位顯示電壓表數(shù)值。</p><p>  3.3 A/D轉(zhuǎn)換模塊及轉(zhuǎn)化電路設(shè)計(jì)</p><p&g

18、t;  A/D轉(zhuǎn)換器的功能是將模擬量轉(zhuǎn)換為與其大小成正比的數(shù)字量信號(hào)。能實(shí)現(xiàn)這種轉(zhuǎn)換的原理和方法很多,此設(shè)計(jì)采用ADC0808轉(zhuǎn)換器。ADC0808是一種逐次逼近型的8位A/D轉(zhuǎn)換器件,片內(nèi)有8路模擬開關(guān),可輸入8個(gè)模擬量,單極性,量程為0~+5V。</p><p>  3.3.1 ADC0808簡介</p><p>  1. ADC0808引腳功能</p><p>

19、;  IN0~I(xiàn)N7:8路模擬量輸入。</p><p>  ADDA、ADDB、ADDC:模擬量輸入通道地址選擇,其8位編碼分別對應(yīng)IN0~I(xiàn)N7.</p><p>  ALE:地址鎖存允許,上升沿將通道選擇信號(hào)存入地址鎖存器。</p><p>  START:ADC轉(zhuǎn)換啟動(dòng)信號(hào),正脈沖有效,引腳信號(hào)要求保持在200ns以上,其上升沿將內(nèi)部逐次逼近寄存器清零。<

20、;/p><p>  EOC:轉(zhuǎn)換解釋信號(hào),可做為中斷請求信號(hào)或供CPU查詢。</p><p>  CLK:時(shí)鐘輸入端,要求頻率范圍在10kHz~1.2MHz.</p><p>  OE:允許輸出信號(hào)。</p><p>  Vcc:芯片工作電壓。</p><p>  VREF(+)、VREF(-):基準(zhǔn)參考電壓的正、負(fù)值。&

21、lt;/p><p>  OUT1~OUT8:8路數(shù)字量輸出端。</p><p>  3.3.2 A/D轉(zhuǎn)換電路設(shè)計(jì)</p><p>  集成摸數(shù)轉(zhuǎn)換芯片ADC0808實(shí)現(xiàn)的A/D轉(zhuǎn)換電路被測信號(hào)由ADC0808模擬輸入端輸入,完成A/D轉(zhuǎn)換后送入單片機(jī),經(jīng)相應(yīng)處理后送出顯示。</p><p>  圖3-3-2ADC0808外圍電路圖</p&

22、gt;<p><b>  四 軟件設(shè)計(jì)與說明</b></p><p>  軟件的設(shè)計(jì)分成兩個(gè)部分,即電壓顯示部分和時(shí)鐘顯示部分。</p><p>  其中整個(gè)電壓的顯示都在show_adc0808() 這個(gè)數(shù)值顯示總調(diào)用函數(shù)里面,讀取電壓值的函數(shù)分別為read_adc0808_1()(讀取電壓數(shù)值整數(shù)部分)read_adc0808_2();read_ad

23、c0808_3() (讀取數(shù)值小數(shù)部分)。電壓值分三部分顯示disp_2(read_1)顯示整數(shù)部分disp_1(read_2);disp_0(read_3)顯示小數(shù)部分。在調(diào)用show_adc0808()時(shí)以上的函數(shù)都會(huì)被調(diào)用。</p><p>  在調(diào)用該函數(shù)后又調(diào)用一個(gè)show_key( )的函數(shù)來顯示對應(yīng)的按鍵,所以當(dāng)按下某個(gè)鍵后就會(huì)顯示該鍵名的通道值和該通道的電壓值。</p><p

24、>  五 調(diào)試結(jié)果與必要的調(diào)試說明</p><p>  本設(shè)計(jì)的調(diào)試需要proteus和keil兩個(gè)軟件。而且還要對這兩個(gè)軟件進(jìn)行相應(yīng)的設(shè)置,使proteus能和keil一起聯(lián)調(diào)。</p><p>  調(diào)試時(shí),在按下1-8號(hào)鍵時(shí)應(yīng)該顯示相應(yīng)的測量口電壓,在按下*號(hào)鍵時(shí)應(yīng)可以顯示時(shí)間,按下#然后按下9或0應(yīng)可以調(diào)整時(shí)間。</p><p>  在調(diào)試在調(diào)試時(shí)發(fā)現(xiàn)電

25、壓顯示值和輸入值不對應(yīng),只能測量到0.0的范圍值,后來發(fā)現(xiàn)在對ADC0808傳遞來的數(shù)字信號(hào)處理時(shí)把“%”號(hào)誤打成了“/”,經(jīng)過修改后,輸出顯示正常,能顯示出0.00范圍的值。</p><p>  還發(fā)現(xiàn)當(dāng)按下1-8號(hào)鍵時(shí)時(shí)鐘停止,也就是說測量電壓后時(shí)間就還是在測量前的時(shí)間。經(jīng)過單步調(diào)試后找出只要在測量電壓的相關(guān)代碼上開啟定時(shí)器并且僅在第一個(gè)循環(huán)置入初值就可以在測量電壓時(shí)時(shí)鐘繼續(xù)運(yùn)行。注意,千萬不可在顯示函數(shù)里置

26、入初值,由于顯示部分是一個(gè)速度很快的循環(huán),每個(gè)循環(huán)都置入初值那么時(shí)鐘也會(huì)停滯。</p><p>  圖5-1正常的電壓顯示圖</p><p><b>  六 使用說明</b></p><p>  這個(gè)設(shè)計(jì)包含了電壓顯示以及時(shí)鐘的功能,其操作簡便,只要按數(shù)字1-8數(shù)碼管就會(huì)顯示相應(yīng)的測量口以及對應(yīng)的電壓值。當(dāng)然,首先要在相應(yīng)的測量口接入電壓才會(huì)有

27、值輸出,否則輸出為零。</p><p>  該電壓表的輸出值誤差為0.01。在第一次使用時(shí)應(yīng)該對時(shí)間進(jìn)行調(diào)整,要對小時(shí)進(jìn)行調(diào)整請按下#號(hào)鍵然后按9(數(shù)值增加)0(數(shù)值減少),再按一下#號(hào)鍵可以對分鐘進(jìn)行調(diào)整,同理,再按一次#號(hào)鍵就可對秒鐘進(jìn)行調(diào)整。按下*號(hào)鍵后可以全部顯示所設(shè)的時(shí)間。設(shè)置完后請按*號(hào)鍵顯示時(shí)間。如下圖所示:</p><p>  該設(shè)計(jì)考慮了指令運(yùn)行時(shí)間,已經(jīng)對其進(jìn)行調(diào)整,但

28、是在運(yùn)行幾天后應(yīng)該對其時(shí)鐘進(jìn)行重新調(diào)整。在使用過程中要持續(xù)為單片機(jī)供電否則斷電后時(shí)鐘歸零又要重新調(diào)整時(shí)鐘。</p><p>  由于設(shè)計(jì)時(shí)間限制,還有些問題有待改善,比如人手很容易碰到#號(hào)鍵,可以改成按下*再按#號(hào)鍵才能調(diào)整時(shí)間。還有部分功能需要添加,比如當(dāng)測量電壓超過量程時(shí)可以報(bào)警等。</p><p><b>  七 程序清單</b></p><

29、p>  #include <reg52.h></p><p>  sbit BChoise=P3^0;//位選</p><p>  sbit SChoise=P3^1;//段選</p><p>  sbit ShowDot=P1^7;//顯示小數(shù)點(diǎn)</p><p>  sbit ADD_Zero=P1^2;</p>

30、;<p>  sbit RA_1=P3^5;//行</p><p>  sbit RB_2=P3^6;</p><p>  sbit RC_3=P3^7;</p><p>  sbit RD_4=P2^7;</p><p>  sbit C1_1=P3^2;//列</p><p>  sbit C2_2=

31、P3^3;</p><p>  sbit C3_3=P3^4;</p><p>  int key=8;//初始顯示為第八個(gè)測量口,告知只有測量口8個(gè)</p><p>  int count=0;//計(jì)數(shù),計(jì)滿20個(gè)50ms</p><p>  int hour=0,minute=0,sec=0;</p><p>

32、;  //ADC0808引腳定義</p><p>  sbit ADD_A=P2^0;</p><p>  sbit ADD_B=P2^1;</p><p>  sbit ADD_C=P2^2;</p><p>  sbit ALE=P2^3;//地址所存</p><p>  sbit Start=P2^4;//開始轉(zhuǎn)

33、換</p><p>  sbit OE=P2^5; //輸出允許</p><p>  sbit EOC=P2^6;</p><p>  int show_adc0808();//電壓顯示</p><p>  int read_adc0808_1();//取整數(shù)部分</p><p>  int read_adc08

34、08_2();//取小數(shù)部分</p><p>  int read_adc0808_3();</p><p>  void delay_us(unsigned int );//延遲函數(shù)</p><p>  void disp_2( unsigned long num);</p><p>  void disp_1( unsigned long

35、 num);</p><p>  void disp_0( unsigned long num);//0.00顯示</p><p>  int Scan_KeyDown();//掃鍵函數(shù)</p><p>  int Scan_KeyDown_adjust_0();</p><p>  int Scan_KeyDown_adjust_1();

36、</p><p>  void show_key(int key);//鍵值顯示</p><p>  void hour_show(int hour);//小時(shí)顯示</p><p>  void minute_show(int minute);//分鐘顯示</p><p>  void sec_show(int sec);//秒鐘顯示<

37、/p><p>  unsigned int table[]={ //段選信號(hào)</p><p>  0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p><p>  0x7f,0x6f,0x77,0x7c,</p><p>  0x39,0x5e,0x79,0

38、x71,</p><p><b>  0x00};</b></p><p>  unsigned int Btable[]={ //位選信號(hào)</p><p>  0xfe,0xfd,0xfb,0xf7,0xef,</p><p><b>  0xff};</b></p><p

39、>  void main()</p><p><b>  { </b></p><p>  int key1=0,key2=0,key3=0,key4=0,adjust=1,on=1;</p><p>  ALE=0; //初始化adc0808</p><p><b>  Start=0;</

40、b></p><p><b>  OE=0;</b></p><p><b>  while(1)</b></p><p><b>  { </b></p><p><b>  EA=1;</b></p><p><b&

41、gt;  key1=0;</b></p><p>  key1=Scan_KeyDown(); //調(diào)用掃鍵函數(shù)</p><p>  if((key1<=8)&&(key1>=1)) </p><p><b>  { </b></p><p><b>  while

42、(on)</b></p><p><b>  {</b></p><p><b>  EA=1;</b></p><p><b>  ET1=1;</b></p><p><b>  TR1=1;</b></p><p&g

43、t;  TMOD=0x10;//定時(shí)T0方式1</p><p>  TH1=(65536-37000)/256; //0x3C;</p><p>  TL1=(65536-37000)%256; //0xB0;</p><p><b>  on=0;</b></p><p><b>  } <

44、;/b></p><p>  show_adc0808();//電壓值顯示</p><p>  show_key( key1); //顯示按鍵</p><p><b>  }</b></p><p>  /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/</p><p>

45、;  else if((key1==9)||(key1==10)||(key1==11)||(key1==12))//時(shí)鐘狀態(tài)</p><p><b>  {</b></p><p><b>  on=1;</b></p><p><b>  RD_4=1;</b></p><p

46、><b>  EA=1;</b></p><p><b>  EA=1;</b></p><p><b>  ET1=1;</b></p><p><b>  TR1=1;</b></p><p>  TMOD=0x10;//定時(shí)T0方式1</

47、p><p>  TH1=(65536-37000)/256; //0x3C;</p><p>  TL1=(65536-37000)%256; //0xB0;</p><p>  while((key1==10))</p><p><b>  {</b></p><p>  key1=Scan_K

48、eyDown();</p><p>  hour_show(hour);</p><p>  delay_us(1);</p><p>  minute_show( minute);</p><p>  delay_us(1);</p><p>  sec_show( sec);</p><p>

49、;  delay_us(1);</p><p><b>  }</b></p><p>  while((key1==12)) //時(shí)鐘調(diào)整</p><p><b>  {</b></p><p><b>  TR1=0;</b></p><p&g

50、t;<b>  key2=0;</b></p><p>  //delay_us(1);</p><p>  key2=Scan_KeyDown_adjust_0();</p><p>  if(key2==12)</p><p><b>  adjust++;</b></p><

51、;p>  if(adjust==4)</p><p>  {adjust=1;</p><p><b>  }</b></p><p><b>  //小時(shí)調(diào)整</b></p><p>  /***************************************/</p>

52、<p>  while(adjust==1)</p><p><b>  { </b></p><p>  hour_show(hour);</p><p>  delay_us(3);</p><p>  key3=Scan_KeyDown_adjust_1();</p><p> 

53、 if(key3==9)</p><p><b>  {</b></p><p>  delay_us(650);</p><p>  key3=Scan_KeyDown_adjust_1();</p><p>  if(key3==9)</p><p>  { hour++; </p&g

54、t;<p>  if(hour==24)</p><p><b>  {</b></p><p><b>  hour=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><

55、;p><b>  key3=0;</b></p><p><b>  }</b></p><p>  if(key3==11)</p><p><b>  { </b></p><p>  delay_us(650);</p><p>  key

56、3=Scan_KeyDown_adjust_1();</p><p>  if(key3==11)</p><p>  { hour--; </p><p>  if(hour==-1)</p><p><b>  {</b></p><p><b>  hour=23;</b&g

57、t;</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  key3=0; </b></p><p><b>  }</b></p><p>  key4=Scan_KeyDo

58、wn();</p><p>  if(((key4<=8)&&(key4>=1))||(key4==10)||(key4==12))//跳出9,11號(hào)鍵</p><p>  {key4=0; break;} </p><p><b>  }</b></p><p>  /***********

59、**********************************/</p><p><b>  //分鐘調(diào)整</b></p><p>  /***************************************/</p><p>  while(adjust==2)</p><p><b>  {

60、</b></p><p>  minute_show(minute);</p><p>  delay_us(3);</p><p>  key3=Scan_KeyDown_adjust_1();</p><p>  if(key3==9)</p><p><b>  {</b>&l

61、t;/p><p>  delay_us(650);</p><p>  key3=Scan_KeyDown_adjust_1();</p><p>  if(key3==9)</p><p><b>  { </b></p><p><b>  minute++;</b><

62、/p><p>  if(minute==60)</p><p><b>  {</b></p><p><b>  minute=0;</b></p><p><b>  }</b></p><p><b>  }</b></p&

63、gt;<p><b>  key3=0;</b></p><p><b>  }</b></p><p>  if(key3==11)</p><p><b>  { </b></p><p>  delay_us(650);</p><p&

64、gt;  key3=Scan_KeyDown_adjust_1(); //!!</p><p>  if(key3==11)</p><p><b>  { </b></p><p>  minute--; </p><p>  if(minute==-1)</p><p><b>

65、  {</b></p><p>  minute=59;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  key3=0; </b></p><p><b>  }</

66、b></p><p>  key4=Scan_KeyDown();</p><p>  if(((key4<=8)&&(key4>=1))||(key4==10)||(key4==12))//跳出9,11號(hào)鍵</p><p>  {key4=0; break;} </p><p><b>  }&l

67、t;/b></p><p>  /*********************************************/ </p><p><b>  //秒鐘調(diào)整</b></p><p>  /***************************************/</p><p>  while(

68、adjust==3)</p><p><b>  { </b></p><p>  sec_show(sec);</p><p>  delay_us(3);</p><p>  key3=Scan_KeyDown_adjust_1();</p><p>  if(key3==9)</p&

69、gt;<p><b>  { </b></p><p>  delay_us(650);</p><p>  key3=Scan_KeyDown_adjust_1();</p><p>  if(key3==9)</p><p><b>  { sec++; </b></p&g

70、t;<p>  if(sec==60)</p><p><b>  {</b></p><p><b>  sec=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p

71、><b>  key3=0; </b></p><p><b>  }</b></p><p>  if(key3==11)</p><p><b>  { </b></p><p>  delay_us(650);</p><p>  key3=

72、Scan_KeyDown_adjust_1();</p><p>  if(key3==11)</p><p><b>  { sec--;</b></p><p>  if(sec==-1)</p><p><b>  {</b></p><p><b>  se

73、c=59;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  key3=0;</b></p><p><b>  }</b></p><p>  key4

74、=Scan_KeyDown();</p><p>  if(((key4<=8)&&(key4>=1))||(key4==10)||(key4==12))//跳出9,11號(hào)鍵</p><p>  {key4=0; break;} </p><p><b>  }</b></p><p>  /

75、*********************************************/</p><p>  if(((key2<=8)&&(key2>=1))||(key2==10))//跳出12號(hào)鍵</p><p><b>  break; </b></p><p><b>  }</b>

76、;</p><p><b>  }</b></p><p>  /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/</p><p><b>  } </b></p><p><b>  }</b></p><p>  int show_ad

77、c0808() //數(shù)值顯示總調(diào)用</p><p>  { int on=1;</p><p>  int read_1=0,read_2=0,read_3=0;</p><p>  read_1=read_adc0808_1(); //讀取數(shù)值整數(shù)部分</p><p>  read_2=read_adc0808_2();

78、 //讀取數(shù)值小數(shù)部分</p><p>  read_3=read_adc0808_3(); </p><p>  disp_2(read_1);//顯示整數(shù)</p><p>  delay_us(10);</p><p>  disp_1(read_2); //顯示小數(shù)</p><p>  delay_us

79、(10);</p><p>  disp_0(read_3);</p><p>  delay_us(10);</p><p><b>  }</b></p><p>  int read_adc0808_1() //整數(shù)讀取函數(shù)</p><p><b>  {</b>

80、;</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if (EOC==0)</p><p><b>  { </b></p><p><b>  OE=1;</b>&

81、lt;/p><p>  return ((P0+1)/51);</p><p><b>  OE=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b>

82、</p><p>  int read_adc0808_2() //小數(shù)讀取函數(shù)</p><p><b>  {</b></p><p>  int num=0;</p><p><b>  while(1)</b></p><p><b>  {</b

83、></p><p>  if (EOC==0)</p><p><b>  { </b></p><p><b>  OE=1;</b></p><p>  //return ((((P0+1)%51)*10)/51);</p><p><b>  num=P

84、0;</b></p><p>  //num=189;</p><p>  num=num%51;</p><p>  num=num*10;</p><p>  num=num/51;</p><p>  return num;</p><p><b>  OE=0;&l

85、t;/b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b></p><p>  int read_adc0808_3() //小數(shù)讀取函數(shù)</p><p><

86、b>  {</b></p><p>  int num=0;</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if (EOC==0)</p><p><b>  { </b&g

87、t;</p><p><b>  OE=1;</b></p><p>  //return ((((((P0+1)%51)*10)/51)*10)%51);</p><p><b>  //P0=162;</b></p><p><b>  num=P0;</b></p&

88、gt;<p>  num=num%51;</p><p>  num=num*10;</p><p>  num=num%51;</p><p>  num=num*10;</p><p>  num=num/51;</p><p>  return num;</p><p>&l

89、t;b>  OE=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b></p><p>  void disp_2( unsigned long num) //整數(shù)顯示函數(shù)

90、</p><p><b>  {</b></p><p>  if(num>=0&&num<=9)</p><p><b>  //顯示個(gè)位</b></p><p><b>  {</b></p><p>  SChoise=

91、0;</p><p>  BChoise=0;</p><p>  delay_us(1);</p><p>  P1=table[16];</p><p>  SChoise=1;</p><p>  SChoise=0;</p><p>  // P1=table[tmp[0]];<

92、/p><p>  P1=table[num];</p><p>  SChoise=1;</p><p>  SChoise=0;</p><p><b>  P1=0x0fb;</b></p><p>  BChoise=1;</p><p>  BChoise=0;<

93、/p><p>  delay_us(3);</p><p><b>  P1=0x00;</b></p><p>  SChoise=1;</p><p>  SChoise=0;</p><p><b>  P1=0x0FF;</b></p><p> 

94、 BChoise=1;</p><p>  BChoise=0;</p><p>  P1=table[16];</p><p>  ShowDot=1;</p><p>  SChoise=1;</p><p>  SChoise=0;</p><p>  P1=Btable[2];<

95、/p><p>  BChoise=1;</p><p>  BChoise=0;</p><p>  delay_us(2);</p><p>  P1=table[16];</p><p>  SChoise=1;</p><p>  SChoise=0;</p><p&g

96、t;<b>  P1=0xFF;</b></p><p>  BChoise=1;</p><p>  BChoise=0;</p><p>  delay_us(2);</p><p><b>  }</b></p><p><b>  }</b>

97、</p><p>  void disp_1( unsigned long num) //小數(shù)顯示函數(shù)</p><p><b>  {</b></p><p>  if(num>=0&&num<=9)</p><p><b>  {</b></p><

98、;p><b>  //顯示十位</b></p><p>  SChoise=0;</p><p>  BChoise=0;</p><p>  delay_us(1);</p><p>  P1=table[16];</p><p>  SChoise=1;</p><

99、p>  SChoise=0;</p><p>  // P1=table[tmp[1]];</p><p>  P1=table[num];</p><p>  SChoise=1;</p><p>  SChoise=0;</p><p><b>  P1=0x0fd;</b></p

100、><p>  BChoise=1;</p><p>  BChoise=0;</p><p>  delay_us(3);</p><p><b>  P1=0x00;</b></p><p>  SChoise=1;</p><p>  SChoise=0;</p>

101、;<p><b>  P1=0x0FF;</b></p><p>  BChoise=1;</p><p>  BChoise=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  voi

102、d disp_0( unsigned long num) //小數(shù)顯示函數(shù)</p><p><b>  {</b></p><p><b>  //顯示個(gè)位</b></p><p>  if((num>=0)&&(num<=9))</p><p><b> 

103、 {</b></p><p>  SChoise=0;</p><p>  BChoise=0;</p><p>  delay_us(1);</p><p>  P1=table[16];</p><p>  SChoise=1;</p><p>  SChoise=0;<

104、/p><p>  //P1=table[tmp[0]];</p><p>  P1=table[num];</p><p>  SChoise=1;</p><p>  SChoise=0;</p><p><b>  P1=0x0fe;</b></p><p>  BChoi

105、se=1;</p><p>  BChoise=0;</p><p>  delay_us(3);</p><p><b>  P1=0x00;</b></p><p>  SChoise=1;</p><p>  SChoise=0;</p><p><b> 

106、 P1=0x0FF;</b></p><p>  BChoise=1;</p><p>  BChoise=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void delay_us(unsigned in

107、t us) //延遲函數(shù)</p><p><b>  {</b></p><p>  unsigned int i;</p><p>  unsigned int j;</p><p>  for(i=0;i<us;i++)</p><p><b>  {</b>

108、;</p><p>  for(j=0;j<10;j++); </p><p>  for(j=0;j<10;j++);</p><p><b>  }</b></p><p><b>  }</b></p><p>  int Scan_KeyDown()

109、 //掃鍵函數(shù)</p><p><b>  { </b></p><p>  int rrr=0;</p><p>  P3=0x0FF;//初始化P3口</p><p>  RD_4=1;//初始化P2^7</p><p>  delay_us(1);</p><p&g

110、t;  P3=0x0E3;//列全零 </p><p>  if((RA_1==0)&&(RB_2!=0)&&(RC_3!=0)&&(RD_4!=0))</p><p><b>  rrr=1;</b></p><p>  else if ((RA_1!=0)&&(

111、RB_2==0)&&(RC_3!=0)&&(RD_4!=0))</p><p><b>  rrr=2;</b></p><p>  else if((RA_1!=0)&&(RB_2!=0)&&(RC_3==0)&&(RD_4!=0))</p><p><b&

112、gt;  rrr=3;</b></p><p>  else if((RA_1!=0)&&(RB_2!=0)&&(RC_3!=0)&&(RD_4==0))</p><p><b>  rrr=4;</b></p><p>  else rrr=5;</p><p&

113、gt;  if(rrr==1)</p><p><b>  { </b></p><p><b>  P3=0x0FF;</b></p><p><b>  RA_1=0;</b></p><p>  if((C1_1==0)&&(C2_2!=0)&&

114、amp;(C3_3!=0))</p><p>  {key=1;ADD_C=0;ADD_B=0;ADD_A=0;}</p><p>  if((C1_1!=0)&&(C2_2==0)&&(C3_3!=0))</p><p>  {key=2;ADD_C=0;ADD_B=0;ADD_A=1;}</p><p&

115、gt;  if((C1_1!=0)&&(C2_2!=0)&&(C3_3==0))</p><p>  {key=3; ADD_C=0;ADD_B=1;ADD_A=0;}</p><p><b>  }</b></p><p>  delay_us(1);</p><p>  if(r

116、rr==2)</p><p><b>  { </b></p><p><b>  P3=0x0FF;</b></p><p><b>  RB_2=0;</b></p><p>  if((C1_1==0)&&(C2_2!=0)&&(C3_3

117、!=0))</p><p>  { key=4; ADD_C=0;ADD_B=1;ADD_A=1;}</p><p>  if((C1_1!=0)&&(C2_2==0)&&(C3_3!=0))</p><p>  {key=5; ADD_C=1;ADD_B=0;ADD_A=0;}</p><p&

118、gt;  if((C1_1!=0)&&(C2_2!=0)&&(C3_3==0))</p><p>  {key=6; ADD_C=1;ADD_B=0;ADD_A=1;} </p><p><b>  }</b></p><p>  delay_us(1);</p><p>

119、;  if(rrr==3)</p><p><b>  { </b></p><p><b>  P3=0x0FF;</b></p><p><b>  RC_3=0;</b></p><p>  if((C1_1==0)&&(C2_2!=0)&&am

120、p;(C3_3!=0))</p><p>  {key=7; ADD_C=1;ADD_B=1;ADD_A=0;}</p><p>  if((C1_1!=0)&&(C2_2==0)&&(C3_3!=0))</p><p>  {key=8;ADD_C=1;ADD_B=1;ADD_A=1;}</p><

121、p>  if((C1_1!=0)&&(C2_2!=0)&&(C3_3==0))</p><p><b>  key=9;</b></p><p><b>  }</b></p><p>  delay_us(1); </p><p>  if(rrr==4)&

122、lt;/p><p><b>  { </b></p><p><b>  P3=0x0FF;</b></p><p><b>  RD_4=0;</b></p><p>  if((C1_1==0)&&(C2_2!=0)&&(C3_3!=0))&l

123、t;/p><p><b>  key=10;</b></p><p>  if((C1_1!=0)&&(C2_2==0)&&(C3_3!=0))</p><p><b>  key=11;</b></p><p>  if((C1_1!=0)&&(C2_2

124、!=0)&&(C3_3==0))</p><p><b>  key=12;</b></p><p><b>  } else </b></p><p><b>  {</b></p><p><b>  ALE=0;</b></

125、p><p><b>  ALE=1;</b></p><p><b>  ALE=0;</b></p><p><b>  Start=0;</b></p><p>  delay_us(1);</p><p>  Start=~Start;</p&g

126、t;<p>  delay_us(2);</p><p>  Start=~Start;</p><p><b>  }</b></p><p>  return key;</p><p><b>  }</b></p><p>  /*###########

127、###########################*/</p><p>  int Scan_KeyDown_adjust_0()</p><p><b>  {</b></p><p>  int key_0=0;</p><p>  int rrr=0;</p><p>  P3=0x0F

128、F;//初始化P3口</p><p>  RD_4=1;//初始化P2^7</p><p>  delay_us(1);</p><p>  P3=0x0E3;//列全零 </p><p>  if((RA_1==0)&&(RB_2!=0)&&(RC_3!=0)&&(RD_4!

129、=0))</p><p><b>  rrr=1;</b></p><p>  else if ((RA_1!=0)&&(RB_2==0)&&(RC_3!=0)&&(RD_4!=0))</p><p><b>  rrr=2;</b></p><p>

130、  else if((RA_1!=0)&&(RB_2!=0)&&(RC_3==0)&&(RD_4!=0))</p><p><b>  rrr=3;</b></p><p>  else if((RA_1!=0)&&(RB_2!=0)&&(RC_3!=0)&&(RD_4=

131、=0))</p><p><b>  rrr=4;</b></p><p>  else rrr=5;</p><p>  if(rrr==1)</p><p><b>  { </b></p><p><b>  P3=0x0FF;</b></

132、p><p><b>  RA_1=0;</b></p><p>  if((C1_1==0)&&(C2_2!=0)&&(C3_3!=0))</p><p>  {key_0=1;}</p><p>  if((C1_1!=0)&&(C2_2==0)&&(C3_3

133、!=0))</p><p>  {key_0=2;}</p><p>  if((C1_1!=0)&&(C2_2!=0)&&(C3_3==0))</p><p>  {key_0=3;}</p><p><b>  }</b></p><p>  delay_us(

134、1);</p><p>  if(rrr==2)</p><p><b>  { </b></p><p><b>  P3=0x0FF;</b></p><p><b>  RB_2=0;</b></p><p>  if((C1_1==0)&

135、;&(C2_2!=0)&&(C3_3!=0))</p><p>  { key_0=4; }</p><p>  if((C1_1!=0)&&(C2_2==0)&&(C3_3!=0))</p><p>  {key_0=5; }</p><p>  if((C1_1!=0)&&

136、amp;(C2_2!=0)&&(C3_3==0))</p><p>  {key_0=6; } </p><p><b>  }</b></p><p>  delay_us(1);</p><p>  if(rrr==3)</p><p><b>  { <

137、;/b></p><p><b>  P3=0x0FF;</b></p><p><b>  RC_3=0;</b></p><p>  if((C1_1==0)&&(C2_2!=0)&&(C3_3!=0))</p><p>  {key_0=7; }</

138、p><p>  if((C1_1!=0)&&(C2_2==0)&&(C3_3!=0))</p><p>  {key_0=8; }</p><p>  if((C1_1!=0)&&(C2_2!=0)&&(C3_3==0))</p><p><b>  key_0=9;<

139、;/b></p><p><b>  }</b></p><p>  delay_us(1); </p><p>  if(rrr==4)</p><p><b>  { </b></p><p><b>  P3=0x0FF;</b><

140、/p><p><b>  RD_4=0;</b></p><p>  if((C1_1==0)&&(C2_2!=0)&&(C3_3!=0))</p><p><b>  key_0=10;</b></p><p>  if((C1_1!=0)&&(C2_2

141、==0)&&(C3_3!=0))</p><p><b>  key_0=11;</b></p><p>  if((C1_1!=0)&&(C2_2!=0)&&(C3_3==0))</p><p><b>  key_0=12;</b></p><p>

142、;<b>  }</b></p><p>  return key_0;</p><p><b>  }</b></p><p>  int Scan_KeyDown_adjust_1()</p><p><b>  {</b></p><p>  in

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論