版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 目錄1</b></p><p><b> 1. 實驗任務(wù)2</b></p><p><b> 2.設(shè)計方案2</b></p><p><b> 2.1硬件設(shè)計2
2、</b></p><p> 2.1.1 MCU微控制單元2</p><p> 2.1.2 MQ-3酒精傳感器4</p><p> 2.1.3 TLC549模數(shù)轉(zhuǎn)換5</p><p> 2.1.4 LCD1602液晶顯示5</p><p><b> 2.2軟件設(shè)計6<
3、;/b></p><p> 2.2.1 編譯語言的選擇6</p><p> 2.2.2 主程序模塊6</p><p> 2.2.3 A/D轉(zhuǎn)換模塊6</p><p> 2.2.4 按鍵輸入模塊7</p><p> 2.2.5 液晶顯示輸出模塊8</p><p><
4、;b> 3.實驗結(jié)果9</b></p><p><b> 4.心得體會9</b></p><p><b> 附錄10</b></p><p> 附錄1 參考文獻(xiàn)10</p><p> 附錄2 硬件電路原理圖12</p><p> 附
5、錄3 硬件電路PCB圖14</p><p> 附錄4 程序清單15</p><p><b> 1. 實驗任務(wù)</b></p><p> 設(shè)計一個基于單片機的酒精濃度檢測系統(tǒng),檢測結(jié)果用LED或LCD顯示器顯示?;赟TC89C52單片機,MQ-3酒精濃度傳感器,本設(shè)計設(shè)計一種具有檢測及超限報警功能的酒精濃度測試系統(tǒng)。</p&
6、gt;<p><b> 2.設(shè)計方案</b></p><p><b> 2.1硬件設(shè)計</b></p><p> 由于本次設(shè)計需要用到單片機,來完成對酒精濃度的檢測,分析了網(wǎng)上的相似課題,有很多是用酒精濃度傳感器MQ-3來完成酒精濃度檢測系統(tǒng)的設(shè)計。鑒于本次時間限制,本次設(shè)計中采用的是STC89S52單片機來控制整個電路,電路
7、中采用的是LCD1602來顯示實驗實時數(shù)據(jù)。A/D芯片的選擇中,用到的是TI公司生產(chǎn)的TLC549,主要是這塊芯片的性能優(yōu)良,時序操作簡單,能很好的解決本次設(shè)計中對實時數(shù)據(jù)轉(zhuǎn)換的要求。系統(tǒng)結(jié)構(gòu)框圖如圖1所示:</p><p><b> 圖1 系統(tǒng)結(jié)構(gòu)框圖</b></p><p> 2.1.1微控制單元STC89C52</p><p> 基
8、于本系統(tǒng)設(shè)計內(nèi)容的需要,綜合考慮后,我們選擇STC89C52單片機為控制核心。主要基于考慮STC89C52是低功耗,超低價,高速,高可靠,強抗靜電,強抗干擾,功能強大的單片機。</p><p> STC89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,2個讀寫口線,片內(nèi)振蕩器及時鐘電路。同時STC89C52可降至0Hz的靜態(tài)邏
9、輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時/計數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其他所有部件工作直到下一個硬件復(fù)位。其將通用的微處理器和Flash存儲器結(jié)合在一起,特別是可反復(fù)擦寫的Flash存儲器可有效地降低開發(fā)本。STC單片機有PDIP、PQFP/TQFP及PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。</p><p&
10、gt; STC89C52單片機引腳如圖2:</p><p> 圖2 STC89C52引腳圖</p><p><b> ?Vcc:電源電壓</b></p><p><b> ?GND:地</b></p><p> ?P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。
11、</p><p> ?P1口:P1是一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。</p><p> ?P2口:P2是一個帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅(qū)(吸收或輸出電流)4個TTL邏輯門電路。</p><p> ?P3口:P3口時一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩
12、沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。</p><p> ?RST:復(fù)位輸入。當(dāng)振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片機復(fù)位。</p><p> ?ALE :當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。<
13、/p><p> ? :程序儲存允許( )輸出是外部程序存儲器的讀選通信號,當(dāng)89C5X單片機由外部程序存儲器取指令(或數(shù)據(jù))時,每個機器周期兩次 有效,即輸出兩個脈沖。在次期間,當(dāng)訪問外部數(shù)據(jù)存儲器,將跳過兩次 信號。</p><p> ? /VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFH), 端必須保持低電平(接地)。</p>&l
14、t;p> ?XTAL1:振蕩器反相放大器及內(nèi)部時鐘發(fā)生器的輸入端。</p><p> ?XTAL2:振蕩器反相放大器的輸出端</p><p> 2.1.2 MQ-3酒精傳感器</p><p> MQ-3酒精傳感器對乙醇蒸氣有很高的靈敏度,并且響應(yīng)和恢復(fù)快速。另外,MQ-3酒精傳感器簡單的驅(qū)動回路和可靠的穩(wěn)定性是相比較于其他型號傳感器的優(yōu)點。MQ-3酒
15、精傳感器可用于機動車駕駛?cè)藛T及其他嚴(yán)禁酒后作業(yè)人員的現(xiàn)場檢測,也可用于其他場所乙醇蒸氣的檢測。</p><p> MQ-3酒精傳感器有6只針狀管腳,其中4個管腳(兩個A和兩個B)用于信號讀取,兩個H腳用于提供加熱電流。電路圖如下圖3:</p><p> 圖3 MQ-3傳感器電路原理圖</p><p> 2.1.3 TLC549模數(shù)轉(zhuǎn)換</p>
16、<p> TLC549是 TI公司生產(chǎn)的一種低價位、高性能的8位 A/D轉(zhuǎn)換器,它以8位開關(guān)電容逐次逼近的方法實現(xiàn) A/D轉(zhuǎn)換,其轉(zhuǎn)換速度小于 17us,最大轉(zhuǎn)換速率為 40000HZ,4MHZ典型內(nèi)部系統(tǒng)時鐘,電源為 3V至 6V。它能方便地采用三線串行接口方式與各種微處理器連接,構(gòu)成各種廉價的測控應(yīng)用系統(tǒng)。TLC549有8引腳,為雙列直插是封裝,起相應(yīng)引腳功能如下:</p><p> REF+
17、:正基準(zhǔn)電壓輸入 2.5V≤REF+≤Vcc+0.1。 </p><p> REF-:負(fù)基準(zhǔn)電壓輸入端,-0.1V≤REF-≤2.5V。且要求:(REF+)-(REF-)≥1V。 </p><p> VCC:系統(tǒng)電源3V≤Vcc≤6V。 </p><p><b> GND:接地端。 </b></p><p> :
18、芯片選擇輸入端,要求輸入高電平 VIN≥2V,輸入低電平 VIN≤0.8V。 </p><p> DATA OUT:轉(zhuǎn)換結(jié)果數(shù)據(jù)串行輸出端,與 TTL 電平兼容,輸出時高位在前,低位在后。 </p><p> ANALOGIN:模擬信號輸入端,0≤ANALOGIN≤Vcc,當(dāng) ANALOGIN≥REF+電壓時,轉(zhuǎn)換結(jié)果為全“1”(0FFH),ANALOGIN≤REF-電壓時,轉(zhuǎn)換結(jié)果為
19、全“0”(00H)。 </p><p> I/O CLOCK:外接輸入/輸出時鐘輸入端,同于同步芯片的輸入輸出操作,無需與芯片內(nèi)部系統(tǒng)時鐘同步。</p><p> 在實際使用過程中,起時序圖如圖4所示。</p><p> 圖4 TLC549時序圖</p><p> 2.1.4 LCD1602液晶顯示</p><
20、p> LCD1602字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD,目前常用16×1,16×2,20×2和40×2行等的液晶顯示模塊,模塊組件內(nèi)部主要由LCD顯示屏、控制器、列驅(qū)動器和偏壓產(chǎn)生電路構(gòu)成。</p><p><b> 2.2軟件設(shè)計</b></p><p> 2.2.1 編譯語言的選擇
21、</p><p> 對于單片機的開發(fā)應(yīng)用中,逐漸引入了高級語言,C語言就是其中的一種。匯編語言的可控性較高級語言來說更具優(yōu)越性。程序編寫語言比較常見的有C語言、匯編語言。匯編語言的機器代碼生成效率高,控制性好,但就是移植性不高。</p><p> C語言編寫的程序比用匯編編寫的程序更符合人們的思考習(xí)慣。還有很多處理器都支持C編譯器,這樣意味著處理器也能很快上手。且具有良好的模塊化、容易
22、閱讀、維護(hù)等優(yōu)點,且編寫的模塊程序易于移植?;贑語言和匯編語言的優(yōu)缺點,本系統(tǒng)采用C語言編寫方法。</p><p> 軟件編寫的主體思路是將系統(tǒng)按功能模塊化劃分,然后根據(jù)模塊要實現(xiàn)的功能寫各個子程序。整個軟件程序的編寫采用查詢式方式編寫的。</p><p> 2.2.2 主程序模塊</p><p> 主程序?qū)崿F(xiàn)的功能:與硬件相結(jié)合實現(xiàn)酒精濃度檢測系統(tǒng)的各個功
23、能。主要是檢測與顯示,門限調(diào)整與顯示,檢測數(shù)據(jù)顯示功能子函數(shù)的調(diào)用。見圖5</p><p> 圖5 主程序流程圖</p><p> 2.2.3 A/D轉(zhuǎn)換模塊</p><p> (1)模數(shù)轉(zhuǎn)換模塊的主要功能就是將經(jīng)放大器放大的模擬電壓信號轉(zhuǎn)化為MCU能夠處理的數(shù)字信號,并傳送給MCU。</p><p> (2)TLC549轉(zhuǎn)換的流程
24、圖見下圖6</p><p> 圖 6 數(shù)轉(zhuǎn)換流程圖</p><p> 當(dāng)變?yōu)榈碗娖胶螅?TLC549芯片被選中, 同時前次轉(zhuǎn)換結(jié)果的最高有效位MSB (A7)自 DATA OUT 端輸出,接著要求自 I/O CLOCK 端輸入8個外部時鐘信號,前7個 I/O CLOCK信號的作用,是配合 TLC549 輸出前次轉(zhuǎn)換結(jié)果的 A6-A0 位,并為本次轉(zhuǎn)換做準(zhǔn)備:在第4個 I/O CLOC
25、K 信號由高至低的跳變之后,片內(nèi)采樣/保持電路對輸入模擬量采樣開始,第8個 I/O CLOCK 信號的下降沿使片內(nèi)采樣/保持電路進(jìn)入保持狀態(tài)并啟動 A/D開始轉(zhuǎn)換。轉(zhuǎn)換時間為 36 個系統(tǒng)時鐘周期,最大為 17us。直到 A/D轉(zhuǎn)換完成前的這段時間內(nèi),TLC549 的控制邏輯要求:或者保持高電平,或者 I/O CLOCK 時鐘端保持36個系統(tǒng)時鐘周期的低電平。由此可見,在自 TLC549的 I/O CLOCK 端輸入8個外部時鐘信號期間
26、需要完成以下工作:讀入前次A/D轉(zhuǎn)換結(jié)果;對本次轉(zhuǎn)換的輸入模擬信號采樣并保持;啟動本次 A/D轉(zhuǎn)換開始。</p><p> 2.2.4 按鍵輸入模塊</p><p> (1)按鍵時顯現(xiàn)人機對話的一個控制按鈕,通過按鍵的操作,對系統(tǒng)進(jìn)行發(fā)送操作指令,后經(jīng)與MCU串行通信,然后在液晶上顯示。</p><p> (2)按鍵查詢式的流程圖見下圖7:</p>
27、<p> 圖 7 按鍵查詢式的流程圖</p><p> 按鍵的四個鍵分別接P1.0,P1.1,P1.2,P1.3,由于P1口具有上拉電阻,所以不再需要加上拉電阻進(jìn)行電壓的放大。</p><p> 2.2.5 液晶顯示輸出模塊</p><p> LCD1602模塊在本系統(tǒng)中主要起著開界面數(shù)字顯示,以及各控制效果的顯示。采用直接訪問方式。液晶顯示
28、的操作流程圖見下圖8:</p><p> 圖8 液晶顯示的操作流程圖</p><p> 液晶顯示D0到D7口接P0.0到 P0.7,單獨使用一個口,為了避免數(shù)據(jù)的干擾,由于P0口沒有上拉電阻,所以需要一個排阻進(jìn)行電壓的擴大.</p><p><b> 3.實驗結(jié)果</b></p><p> 本次設(shè)計的酒精濃度檢測
29、系統(tǒng),通過設(shè)計相關(guān)的硬件電路及進(jìn)行相應(yīng)的軟件調(diào)試,最后實現(xiàn)了實時檢測酒精濃度,并的在LCD1602上顯示的目的。設(shè)計出的電路,完全符合本次實驗的設(shè)計要求,通過按鍵可以實現(xiàn)調(diào)整門限值,對于檢測到的酒精濃度高于設(shè)定門限值時,會顯示實時酒精濃度值,系統(tǒng)會自動實現(xiàn)燈光報警功能。</p><p> 硬件成品圖 硬件上電開機界面</p><
30、p> 酒精濃度低 紅燈不報警 酒精濃度高 紅燈報警</p><p><b> 4.心得體會</b></p><p> 通過本次課程設(shè)計,讓我重新的系統(tǒng)的復(fù)習(xí)了微機原理與單片機方面的知識,收獲頗豐。首先,對于以前學(xué)習(xí)過的有關(guān)單片機方面的知識,在設(shè)計電路過程中又有了新的認(rèn)識,對于各種概念的理解也有了提高。<
31、/p><p> 在做板的過程中要非常小心。硬件調(diào)試過程是相對繁鎖的,要特別注意以下幾點。其一,通電之后看AT89S51晶振是否起振,晶振起振后是標(biāo)準(zhǔn)的正弦波,示波器測得其頻率為11.0592MHz;其二,硬件電路的設(shè)計既要追求實際功能的實現(xiàn),也要考慮元器件的購買方便。</p><p> 在本次課設(shè)中學(xué)到的知識,我將它們發(fā)揮到其他的學(xué)習(xí)中去,也將在今后的學(xué)習(xí)中不斷的提高和完善;而在此期間發(fā)現(xiàn)
32、的不足,我將努力改善,通過學(xué)習(xí)實踐等方式不斷提高,克服那些知識障礙,以求在今后的學(xué)習(xí)過程中獲得更大的進(jìn)步!</p><p><b> 附錄</b></p><p><b> 附錄1 參考文獻(xiàn)</b></p><p> [1]《微機原理及應(yīng)用》 黃冰等編著 重慶:重慶大學(xué)出版社 ,2003</p>&l
33、t;p> [2] 李維提,郭強.《液晶顯示應(yīng)用技術(shù)》 北京:電子工業(yè)出版社,2000.</p><p> [3]《基于Proteus的電路及單片機系統(tǒng)設(shè)計與仿真》 周潤景等編著 北京:北京航空航天大學(xué)出版社,2006</p><p> [4]《單片機實驗與實踐教程》萬光毅等編著 北京:北京航空航天大學(xué)出版社,2006</p><p> [5]《單片機
34、人機接口實例集》公茂法等編著 北京:北京航空航天大學(xué)出版社,1997</p><p> [6]《單片機應(yīng)用設(shè)計200例》張洪潤等編著 北京:北京航空航天大學(xué)出版社,2006</p><p> [7]《單片機程序設(shè)計實例》先鋒工作室編著 北京:清華大學(xué)出版社,2003</p><p> [8]《單片機C語言編程與實例》趙亮,侯國銳編著 北京:人民郵電出版社,20
35、03</p><p> [9]《新編MCS-51單片機應(yīng)用設(shè)計》張毅剛等編著 哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2004</p><p> 附錄2 硬件電路原理圖</p><p> 附錄3 硬件電路PCB圖</p><p><b> 附錄4 程序清單</b></p><p> 主程序
36、main.c</p><p> #include<reg52.h></p><p> #include<intrins.h></p><p> /*******************宏定義**********************/ </p><p> #define uint unsigned int&l
37、t;/p><p> #define uchar unsigned char</p><p> sbit k0=P1^0; //start the system</p><p> sbit k1=P1^1; //setup the stand_value</p><p> sbit k2=P1^2; //the stand_valu
38、e up</p><p> sbit k3=P1^3; //the stand_value down</p><p> sbit alarm=P2^0; //the alarm port</p><p> /*************************變量及字符串的定義*************************/</p><
39、;p> uchar LCD_Char[]="0123456789ABCDEF-.";</p><p> uchar LCD_string0[]="welcome to guet";</p><p> uchar LCD_string1[]="102021226";</p><p> uchar
40、 M_Time[]="2011--9--8";// show time</p><p> uchar M_Detect[]="Detect:"; //檢測 </p><p> uchar M_Detect1[]="Alcohol:"; </p><p> uchar M_Detect2[
41、]="set_val:"; </p><p> //uchar M_time1[]={"Time"}; //時間</p><p> //uchar M_Storage[]={"Storage"}; //memory</p><p> uint data_temp=0;</p&
42、gt;<p> uint flag=0;</p><p> /*******************函數(shù)聲明**********************/ </p><p> extern void initial_lcd1602(void); </p><p> extern void Display_List_Char(uchar
43、 x,uchar y,uchar *str); //the extern have no mean ,only to explain the function is in the other file</p><p> extern void write_lcd_command( uchar write_data); //the funct
44、ion of write command</p><p> extern void Display_One_Char(uchar x,uchar y,uchar dat); </p><p> extern void write_lcd_command( uchar write_data); </p><p> extern void xs_int(un
45、signed int shuju,bit t); </p><p> extern unsigned char ADconv(void);</p><p> extern void display(unsigned int shuju,bit t);</p><p> /*******************子函數(shù)*********************
46、*/ </p><p> void delay_ms(uint n)</p><p> { uint i,j; //delay 10ms</p><p> for(i=n;i>0;i--)</p><p><b> {</b></p><p> for(j=
47、1200;j>0;j--) </p><p><b> {</b></p><p> _nop_(); </p><p><b> }</b></p><p><b> }</b></p><p><b> }</b&g
48、t;</p><p> /******************主函數(shù)**********************/ </p><p> void main()</p><p><b> {</b></p><p> uint set_value=200; //is mean 20.
49、0mg/ml ; the big_value is 800.0mg/ml mean alcohol; alcohol drive is 20.0mg/100ml=0.2mg/ml</p><p> uchar data_char=0;</p><p> initial_lcd1602();</p><p> delay_ms(100);</p>
50、<p> Display_List_Char(0,0,LCD_string0); //welcome </p><p> delay_ms(100); //delay 3s</p><p> Display_List_Char(1,0,LCD_string1); //welcome
51、</p><p> delay_ms(300);</p><p> write_lcd_command(0x01); //clean screen </p><p> Display_List_Char(0,0,M_Time); //show time
52、 </p><p> delay_ms(30);</p><p> Display_List_Char(0,0,M_Time); //show time </p><p> delay_ms(100);</p><p> Display_List_Char(1,0,M_Detect); //show det
53、ect interface</p><p> delay_ms(100);</p><p> // Display_List_Char(1,0,M_Detect); //show detect interface</p><p> // delay_ms(300);</p><p><b> wh
54、ile(1)</b></p><p><b> {</b></p><p><b> _nop_();</b></p><p> if(k0==0||k1==0||k2==0||k3==0)</p><p><b> {</b></p><
55、;p><b> if(k0==0)</b></p><p><b> { </b></p><p><b> flag=0;</b></p><p> Display_List_Char(1,0,M_Detect1); //show detect interface</p
56、><p> delay_ms(50);</p><p> data_char=ADconv();</p><p> data_temp=data_char;</p><p> delay_ms(10);</p><p> xs_int(data_temp,1);</p><p> del
57、ay_ms(10);</p><p> if(data_temp>=set_value)</p><p><b> {</b></p><p><b> alarm=0;</b></p><p><b> }</b></p><p> e
58、lse { alarm=1;}</p><p><b> }</b></p><p><b> if(k1==0)</b></p><p><b> {</b></p><p> Display_List_Char(1,0,M_Detect2); </p>
59、<p> xs_int(set_value,1);</p><p><b> flag=1;</b></p><p><b> }</b></p><p> if(k2==0&&flag==1)</p><p><b> {</b><
60、;/p><p> delay_ms(10);</p><p><b> if(k2==0)</b></p><p><b> { </b></p><p> set_value=set_value+10;</p><p> xs_int(set_value,1); &l
61、t;/p><p><b> }</b></p><p> delay_ms(50);</p><p><b> }</b></p><p> if(k3==0&&flag==1)</p><p><b> {</b></p&g
62、t;<p> delay_ms(10);</p><p><b> if(k3==0)</b></p><p><b> {</b></p><p> set_value=set_value-10;</p><p> xs_int(set_value,1); </p&g
63、t;<p><b> }</b></p><p> delay_ms(50);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p>
64、;<b> }</b></p><p> 顯示程序 LCD1602.c</p><p> #include<reg52.h></p><p> #include<string.h></p><p> #define uchar unsigned char</p><p
65、> #define uint unsigned int </p><p> #define LCDPORT P0</p><p> sbit RS=P2^5;//RS數(shù)據(jù)命令選擇端,高電平數(shù)據(jù),低電平命令</p><p> sbit RW=P2^6;//RW讀寫選擇端,高電平讀操作,低電平寫操作</p><p&
66、gt; sbit EN=P2^7;//EN使能控制端,E高電平跳變?yōu)榈碗娖綍rLCD執(zhí)行命令</p><p> /******************************LCD1602驅(qū)動程序*************************************/</p><p> void lcd_delay(uchar delaytime)</p>
67、<p><b> {</b></p><p> while(delaytime)delaytime--;</p><p><b> }</b></p><p> void write_lcd_command(uchar write_command)</p><p><b>
68、; {</b></p><p> lcd_delay(40);</p><p><b> RS=0;</b></p><p><b> RW=0;</b></p><p> LCDPORT=write_command;</p><p><b>
69、 EN=1;</b></p><p><b> EN=0;</b></p><p><b> }</b></p><p> void write_lcd_data(uchar write_data)</p><p><b> {</b></p>
70、<p> lcd_delay(40);</p><p><b> RS=1;</b></p><p><b> RW=0;</b></p><p> LCDPORT=write_data;</p><p><b> EN=1;</b></p>
71、<p><b> EN=0;</b></p><p><b> }</b></p><p> void Display_One_Char( uchar x,uchar y,uchar dat) //x表示行,y表示列</p><p><b> {</b></p>&
72、lt;p><b> switch(x)</b></p><p><b> {</b></p><p><b> case 0:</b></p><p> write_lcd_command(0x80+y);</p><p><b> break;<
73、;/b></p><p><b> case 1:</b></p><p> write_lcd_command(0xc0+y);</p><p><b> break;</b></p><p><b> }</b></p><p> w
74、rite_lcd_data(dat); </p><p><b> } </b></p><p> void Display_List_Char(uchar x,uchar y,uchar *str)</p><p><b> {</b></p><p> /*switch(x)<
75、;/p><p><b> {</b></p><p><b> case 0:</b></p><p> write_lcd_command(0x80+y);</p><p><b> break;</b></p><p><b> ca
76、se 1:</b></p><p> write_lcd_command(0xc0+y);</p><p><b> break;</b></p><p><b> }</b></p><p> while (*str!='\0')</p><
77、p><b> {</b></p><p> write_lcd_data(*str);</p><p><b> str++;</b></p><p><b> }</b></p><p><b> */</b></p>&l
78、t;p> while (*str!='\0')</p><p><b> {</b></p><p> Display_One_Char(x,y,*str);</p><p><b> str++;</b></p><p><b> y++;</b&g
79、t;</p><p><b> if(y==16)</b></p><p> { //若y等于16,進(jìn)入if語句</p><p> y=0;x^=1; // y賦0,x與1按位異或取反</p><p><b> } </b></p><p&
80、gt;<b> }</b></p><p><b> }</b></p><p> void xs_int(unsigned int shuju,bit t) //顯示一個數(shù)字</p><p> {unsigned int huancun[6]={0};</p><p> unsign
81、ed char biaozhi=0,i;</p><p> if (shuju < 10) biaozhi = 1;</p><p> else if(shuju < 100) biaozhi = 2;</p><p> else if(shuju < 1000) biaozhi = 3;</p><p> el
82、se if(shuju < 10000) biaozhi = 4;</p><p> else if(shuju <=65535) biaozhi = 5;</p><p> switch(biaozhi)</p><p> {case 5:huancun[0] = shuju/10000; </p><p> case
83、4:huancun[5] = shuju%10000/1000;</p><p> case 3:huancun[4] = shuju%1000/100;</p><p> case 2:huancun[3] = shuju%100/10;</p><p> case 1:huancun[1] = shuju%10; </p><p>
84、<b> break;</b></p><p> default:break;</p><p><b> }</b></p><p> for(i=6;i>1;i--)</p><p> {if(i==3)Display_One_Char(t,12,'.');<
85、/p><p> else Display_One_Char(t,15-i,0x30+huancun[i-1]); } </p><p> Display_One_Char(t,14,'m');</p><p> Display_One_Char(t,15,'g'); </p><p><b>
86、} </b></p><p> void display(unsigned int shuju,bit t) //顯示一個數(shù)字</p><p> {unsigned int huancun[6]={0};</p><p> unsigned char biaozhi=0,i;</p><p> if (shuju
87、< 10) biaozhi = 1;</p><p> else if(shuju < 100) biaozhi = 2;</p><p> else if(shuju < 1000) biaozhi = 3;</p><p> else if(shuju < 10000) biaozhi = 4;</p><p&g
88、t; else if(shuju <=65535) biaozhi = 5;</p><p> switch(biaozhi)</p><p> {case 5:huancun[5] = shuju/10000; </p><p> case 4:huancun[4] = shuju%10000/1000;</p><p>
89、case 3:huancun[3] = shuju%1000/100;</p><p> case 2:huancun[2] = shuju%100/10;</p><p> case 1:huancun[1] = shuju%10; </p><p><b> break;</b></p><p> defau
90、lt:break;</p><p><b> }</b></p><p> for(i=6;i>1;i--)</p><p><b> {</b></p><p> Display_One_Char(t,15-i,0x30+huancun[i-1]);</p><p
91、><b> } </b></p><p> Display_One_Char(t,14,'*');</p><p> Display_One_Char(t,15,'g'); </p><p><b> } </b></p><p> void init
92、ial_lcd1602(void) //初始化LCD1602</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> EN=0;</b></p><p> for(i=200;i>0;i--)
93、</p><p> lcd_delay(248);</p><p> write_lcd_command(0x38);//0x38命令,雙行顯示,顯示5x7的點陣字符</p><p> for(i=4;i>0;i--)</p><p> lcd_delay(248);</p><p> writ
94、e_lcd_command(0x38);//再寫一次0x38命令,雙行顯示,顯示5x7的點陣字符</p><p> for(i=4;i>0;i--)</p><p> lcd_delay(248);</p><p> write_lcd_command(0x0c); //無光標(biāo),不閃爍</p><p>
95、for(i=4;i>0;i--)</p><p> lcd_delay(248);</p><p> write_lcd_command(0x06); //光標(biāo)右移,文字不移動</p><p> for(i=4;i>0;i--)</p><p> lcd_delay(248);</p><p
96、> write_lcd_command(0x01);//清屏</p><p> for(i=4;i>0;i--)</p><p> lcd_delay(248);</p><p><b> }</b></p><p> A/D轉(zhuǎn)換程序Tlc549.c</p><p>
97、 #include<reg52.h></p><p> #include <intrins.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit CLK = P3^4;
98、 /* AD時鐘信號 */</p><p> sbit CS = P3^5; /* AD片選信號 */</p><p> sbit DOUT = P3^3; /* 數(shù)據(jù)輸出 */</p><p> uchar adc_result = 0; /* AD計算結(jié)果 */</p>
99、<p> void delay(uchar us) </p><p><b> {</b></p><p> while(us--);</p><p><b> }</b></p><p> /* 讀取AD輸出的8bit數(shù)據(jù) */</p><p>
100、 uchar ADconv(void)</p><p><b> {</b></p><p> uchar data_out=0;</p><p><b> uchar i;</b></p><p><b> CS = 1;</b></p><p&
101、gt;<b> _nop_();</b></p><p><b> CS = 0;</b></p><p> for (i=0; i<8; i++) /* 讀取8位數(shù)據(jù) */</p><p> { </p><p><b> CLK = 0;<
102、/b></p><p> data_out = (data_out<<1)|DOUT;</p><p><b> CLK = 1;</b></p><p> _nop_(); </p><p> } </p><p&g
103、t; CLK = 0; </p><p><b> CS = 1; </b></p><p> delay(2); /*轉(zhuǎn)換間隔 延時21us以上 */ </p><p> return(data_out);</p><p><b> }<
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計報告--基于stc89c52單片機的實驗平臺開發(fā)設(shè)計
- 單片機課程設(shè)計報告--基于stc89c52單片機的實驗平臺開發(fā)設(shè)計
- 基于單片機模塊stc89c52模塊的酒精濃度測試畢業(yè)論文
- STC89C52單片機.doc
- STC89C52單片機.doc
- STC89C52單片機.doc
- stc89c52單片機.pdf
- stc89c52單片機.pdf
- STC89C52單片機.doc
- stc89c52單片機.pdf
- STC89C52單片機.doc
- STC89C52單片機.doc
- STC89C52單片機.doc
- STC89C52單片機.doc
- STC89C52單片機.doc
- stc89c52單片機.pdf
- STC89C52單片機.doc
- stc89c52單片機.pdf
- 單片機課程設(shè)計---基于stc89c52的旋轉(zhuǎn)led時鐘
- 單片機課程設(shè)計報告--基于stc89c52單片機的電子時鐘(日歷)
評論
0/150
提交評論