




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第1111章章 單片機應用系統設計實例單片機應用系統設計實例11.1 單片機電子時鐘的設計單片機電子時鐘的設計11.2 多路數字電壓表的設計多路數字電壓表的設計11.1 單片機電子時鐘的設計單片機電子時鐘的設計 通常通過用單片機設計電子時鐘有兩種方法:通常通過用單片機設計電子時鐘有兩種方法:1、通過單片機內部的定時器、通過單片機內部的定時器/計數器。計數器。這種方法硬件線路簡單,采這種方法硬件線路簡單,采用軟件編程實現時鐘計數,一般稱為軟時鐘。系統的功能一般與用軟件編程實現時鐘計數,一般稱為軟時鐘。系統的功能一般與軟件設計相關,通常用在軟件設計相關,通常用在對時間精度要求不高對時間精度要求不
2、高的場合;的場合;2、采用時鐘芯片。、采用時鐘芯片。如:并行日歷時鐘芯片如:并行日歷時鐘芯片DS12887,串行日歷時,串行日歷時鐘芯片鐘芯片DS1302,它的功能強大,功能部件集成在芯片內部,自動,它的功能強大,功能部件集成在芯片內部,自動產生時鐘等相關功能。硬件成本相對較高,軟件編程簡單。通常產生時鐘等相關功能。硬件成本相對較高,軟件編程簡單。通常用在對用在對時鐘精度要求較高時鐘精度要求較高的場合。的場合。 11.1.1 軟時鐘的基本原理軟時鐘的基本原理 軟時鐘是利用軟時鐘是利用單片機內部的定時器單片機內部的定時器/計數器計數器來實現,它的處理來實現,它的處理過程如下:過程如下: 首先設定
3、單片機內部的一個定時器首先設定單片機內部的一個定時器/計數器工作于計數器工作于方式,方式,對機器周期計數形成基準時間(如對機器周期計數形成基準時間(如50ms或或10ms),然后用另一個),然后用另一個定時器定時器/計數器或軟件計數的方法對基準時間計數形成秒(對計數器或軟件計數的方法對基準時間計數形成秒(對50ms記數記數20次或次或10ms計數計數100次),秒計次),秒計60次形成分,分計次形成分,分計60次形成次形成小時,小時計小時,小時計24次則計滿一天。然后通過數碼管把它們的內容在相次則計滿一天。然后通過數碼管把它們的內容在相應位置顯示出來即可。應位置顯示出來即可。11.1.2 系統
4、硬件電路的設計系統硬件電路的設計共陽極共陽極陰極陰極驅動取反驅動取反AT89C5211.1.3 系統軟件程序的設計系統軟件程序的設計 電子時鐘的軟件系統由電子時鐘的軟件系統由主程序主程序和和子程序子程序組組成,主程序程序包含初始化參數設置、按鍵處成,主程序程序包含初始化參數設置、按鍵處理、數碼管顯示模塊等,在設計時各個模塊都理、數碼管顯示模塊等,在設計時各個模塊都采用子程序結構設計,在主程序中調用。由于采用子程序結構設計,在主程序中調用。由于定時器定時器/計數器采用中斷方式處理,因此還要編計數器采用中斷方式處理,因此還要編寫定時器寫定時器/中斷服務子程序,在定時器中斷服務子程序,在定時器/計數
5、器計數器中斷服務程序中對時鐘進行調整。中斷服務程序中對時鐘進行調整。開始開始顯示單元清零顯示單元清零T0、T1設為設為16位計數模式位計數模式允許允許T0中斷中斷調用顯示子程序調用顯示子程序進入功能程序進入功能程序按下鍵否?按下鍵否?否否是是一主程序一主程序 主程序執行流程如主程序執行流程如圖,主程序先對顯示圖,主程序先對顯示單元和定時器單元和定時器/計數器計數器初始化,然后重復調初始化,然后重復調用數碼管顯示模塊和用數碼管顯示模塊和按鍵處理模塊,當有按鍵處理模塊,當有鍵按下,則轉入相應鍵按下,則轉入相應的功能程序。的功能程序。二數碼管顯示模塊二數碼管顯示模塊 本系統共用本系統共用8個數碼管,
6、個數碼管,從右到左從右到左依次顯示秒個位、秒十位、依次顯示秒個位、秒十位、橫線、分個位、分十位、橫線、時個位和時十位。數碼管顯示的信橫線、分個位、分十位、橫線、時個位和時十位。數碼管顯示的信息用息用8個內存單元存放,這個內存單元存放,這8個內存單元稱為顯示緩沖區,其中秒個個內存單元稱為顯示緩沖區,其中秒個位和秒十位、分個位和分十位、時個位和時十位分別由秒數據、分位和秒十位、分個位和分十位、時個位和時十位分別由秒數據、分數據和小時數據分拆得到。在本系統中數碼管顯示采用數據和小時數據分拆得到。在本系統中數碼管顯示采用軟件譯碼動軟件譯碼動態顯示態顯示。在存儲器中首先建立一張顯示信息的字段碼表,顯示時
7、,。在存儲器中首先建立一張顯示信息的字段碼表,顯示時,先從顯示緩沖區中取出顯示的信息,然后通過查表程序在字段碼表先從顯示緩沖區中取出顯示的信息,然后通過查表程序在字段碼表中查出所顯示的信息的字段碼,從中查出所顯示的信息的字段碼,從P0口輸出,同時在口輸出,同時在P2口將對應口將對應的位選碼輸出選中顯示的數碼管,就能在相應的數碼管上顯示顯示的位選碼輸出選中顯示的數碼管,就能在相應的數碼管上顯示顯示緩沖區的內容。緩沖區的內容。三定時器三定時器/計數器計數器T0中斷服務程序中斷服務程序 定時器定時器/計數器計數器T0用于時間計時。用于時間計時。選擇選擇方式方式1,重復定時,定時,重復定時,定時時間設
8、為時間設為50ms,定時時間到則中斷,在中斷服務程序中用一個計數,定時時間到則中斷,在中斷服務程序中用一個計數器對器對50ms計數,計計數,計20次則對秒單元加次則對秒單元加1,秒單元加到,秒單元加到60則對分單元則對分單元加加1,同時秒單元清,同時秒單元清0;分單元加到;分單元加到60則對時單元加則對時單元加1,同時分單元清,同時分單元清0;時單元加到;時單元加到24則對時單元清則對時單元清0,標志一天時間計滿。在對各單元,標志一天時間計滿。在對各單元計數的同時,把它們的值放到存儲單元的指定位置。定時器計數的同時,把它們的值放到存儲單元的指定位置。定時器/計數器計數器T0中斷服務程序流程圖如
9、圖。中斷服務程序流程圖如圖。 開始開始現場保護,重置初值現場保護,重置初值啟動下一個啟動下一個50ms50ms 計數器加計數器加1秒單元加秒單元加1,50ms計數器清計數器清0,秒寫入秒個位和秒十位秒寫入秒個位和秒十位50ms 計數器計數器=20?否否是是分單元加分單元加1,秒單元清,秒單元清0,分寫入分個位和分十位分寫入分個位和分十位秒單元秒單元=60?時單元加時單元加1,分單元清,分單元清0,時寫入時個位和時十位時寫入時個位和時十位分單元分單元=60?時單元清時單元清0時單元時單元=24?中斷返回中斷返回否否否否否否是是是是是是定時器定時器/計數器計數器T0中斷服務程序:中斷服務程序:四按
10、鍵處理模塊四按鍵處理模塊按鍵處理設置為:按鍵處理設置為:如沒有按鍵,則時鐘正常走時。如沒有按鍵,則時鐘正常走時。按下按下K0鍵:進入調分狀態,時鐘停止走動;鍵:進入調分狀態,時鐘停止走動;按按K1和和K2鍵:可進行加鍵:可進行加1和減和減1操作;操作;繼續按繼續按K0鍵:可分別進行分和小時的調整;鍵:可分別進行分和小時的調整;最后按最后按K0鍵:退出調整狀態,時鐘開始計時運行。鍵:退出調整狀態,時鐘開始計時運行。五匯編語言源程序清單五匯編語言源程序清單ORG 0000HLJMP STARTORG 000BHLJMP INTT0;主程序;主程序START: MOV R0,#70H MOV R7,
11、#0CHINIT: MOV R0,#00H INC R0 DJNZ R7,INIT ;70H-7CH全部清全部清0 MOV TMOD,#01H ;T0工作在方式工作在方式1 MOV TL0,#0B0H ;T0定時定時50ms MOV TH0,#3CH SETB EA SETB ET0 SETB TR0START1: LCALL SCAN;調用顯示子程序調用顯示子程序 LCALL KEYSCAN ;調用鍵盤子程序調用鍵盤子程序 SJMP START1;延時;延時1ms子程序子程序DL1MS: PUSH 06H;保護現場保護現場R6的值的值 MOV R6,#14H;1sDL1: MOV R7,#1
12、9H;1sDL2: DJNZ R7,DL2;25次次2s=50s DJNZ R6,DL1 ;2s POP 06H ;恢復現場恢復現場R6的值的值 RET;2s2s+1s+(25次次2s+3s)20次次+2s+2s=1067s=1.067ms1ms;延時;延時20ms子程序子程序DL20MS: ACALL SCAN ACALL SCAN ACALL SCAN RET2T1T1T2T2T2T2T ;數碼管顯示程序;數碼管顯示程序 SCAN: MOV A,78H;秒秒 MOV B,#0AH DIV AB;A-商,商,B-余數余數 MOV 71H,A;秒十位秒十位 MOV 70H,B ;秒個位秒個位
13、MOV A,79H;分分 MOV B,#0AH DIV AB MOV 74H,A MOV 73H,B MOV A,7AH;時時 MOV B,#0AH DIV AB MOV 77H,A MOV 76H,B MOV R1,#70H;循環掃描循環掃描8位顯示位顯示 MOV R5,#0FEH;位選碼初值,顯示位選碼初值,顯示D0位位 MOV R6,#08H;8位顯示位顯示SCAN1: MOV A,R5 MOV P2,A ;位選碼位選碼 MOV A,R1 MOV DPTR,#TAB MOVC A,A+DPTR;遠程查表遠程查表 MOV P0,A ;段選碼段選碼 MOV A,R5 LCALL DL1MS
14、INC R1 MOV A,R5 RL A MOV R5,A DJNZ R6,SCAN MOV P2,#0FFH MOV P0,#0FFH RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H, 0F8H,80H,90H,0BFH ;“09”,“-”的七段共陽極字段的七段共陽極字段碼碼;定時器;定時器/計數器計數器T0中斷服務程序中斷服務程序INTT0: PUSH ACC;現場保護現場保護 PUSH PSW CLR ET0 CLR TR0 MOV TL0,#0B0H ;T0定時定時50ms MOV TH0,#3CH SETB TR0 INC 7BH ;50ms定
15、時到記數定時到記數 MOV A,7BH CJNE A,#14H,OUTT0 ;計計20次次(即即1s) MOV 7BH,#00 INC 78H ;秒加秒加1 MOV A,78H CJNE A,#3CH,OUTT0 ;計計60s MOV 78H,#00 INC 79H ;分加分加1 MOV A,79H CJNE A,#3CH,OUTT0 ;不等跳不等跳,計計60分分 MOV 79H,#00 INC 7AH ;時加時加1 MOV A,7AH CJNE A,#18H,OUTT0 ;計計24時時 MOV 7AH,#00 OUTT0:SETB ET0 RETI;按鍵處理程序;按鍵處理程序KEYSCAN:
16、 CLR EA JNB P1.0,KEYSCAN0 ;為為0跳跳 JNB P1.1,KEYSCAN1 JNB P1.2,KEYSCAN2KEYOUT: SETB EA RETKEYSCAN0: LCALL DL20MS ;K0去抖去抖 JB P1.0,KEYOUT ;為為1跳跳WAIT0: JNB P1.0,WAIT0 ;P1.0=0跳跳 INC 7CH ;K0松開后松開后7CH加加1 CLR ET0 CLR TR0 CJNE A,#03H,KEYOUT ;不等跳不等跳;K0 按按1下或下或2下返回下返回,按按3下下7CH清清0,不能調秒不能調秒 MOV 7CH,#00 SETB ET0 SE
17、TB TR0 SJMP KEYOUTKEYSCAN1: LCALL DL20MS ;K1鍵去抖鍵去抖 JB P1.1,KEYOUTWAIT1: JNB P1.1,WAIT1 ;P1.1=0跳跳,等待松開等待松開K1 MOV A,7CH ;按鍵次數按鍵次數 CJNE A,#02H,KSCAN11 ;不等跳不等跳,K0按按2下下,調整分調整分 INC 79H ;分加分加1 MOV A,79H CJNE A,#3CH,KEYOUT ;為為60分嗎?分嗎? MOV 79H,#00 SJMP KEYOUTKSCAN11: INC 7AH ;時加時加1 MOV A,7AH CJNE A,#18H,KEYO
18、UT ;為為24時嗎?時嗎? MOV 7AH,#00 SJMP KEYOUT/按按1下調時,按下調時,按2下調分下調分KEYSCAN2: LCALL DL20MS ;K2去抖去抖 JB P1.2,KEYOUT ;P1.2=1跳跳WAIT2: JNB P1.2,WAIT2 ;松開松開K2 MOV A,7CH CJNE A,#02H,KSCAN21 ;K2按按2下嗎下嗎?按按2下調整分下調整分 DEC 79H ;分減分減1 MOV A,79H CJNE A,#0FFH,KEYOUT MOV 79H,#3BH ;計計59分分 SJMP KEYOUTKSCAN21: DEC 7AH ;時減時減1 MO
19、V A,7AH CJNE A,#0FFH,KEYOUT MOV 7AH,#17H ;計計23時時 SJMP KEYOUT END六六C語言源程序清單語言源程序清單/采用采用8位位LED軟件譯碼動態顯示程序軟件譯碼動態顯示程序/使用使用AT89C51單片機,單片機,12MHz晶振,晶振,P0口輸出字段碼,口輸出字段碼,P2口輸出位選碼,口輸出位選碼, 用共陽極用共陽極LED數碼管,數碼管,key0為調時位選擇鍵,為調時位選擇鍵,key1為加為加1鍵,鍵,key2為減為減1鍵鍵#include “reg51.h”#define char unsigned charchar codedis_712=
20、0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xff,0 xbf;/共陽極共陽極LED數碼管數碼管“09”、“滅滅”和和“-”的字段碼的字段碼char data scan_con8=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/位選擇碼位選擇碼char data dis8=0 x00,0 x00,0 x0b,0 x00,0 x00,0 xb0,0 x00,0 x00;/顯示緩沖區,時、分、秒初始為顯示緩沖區,時、分、秒初始為0,0 x0b為為“-”的編碼的編碼cha
21、r data timedata3=0 x00,0 x00,0 x00; /分別為秒、分和小時的值分別為秒、分和小時的值char data ms50=0 x00,con=0 x00,con1=0 x00,con2=0 x00; /計數次數初值計數次數初值sbit key0=P10;sbit key1=P11;sbit key2=P12;/1ms延時函數延時函數delay1ms(int t)int i,j;for (i=0;it;i+)for (j=0;j=3)con=0;TR0=1;ET0=1; if (con!=0)if (key1=0)delay1ms(10); /K1去抖去抖while (
22、key1=0);timedatacon+;if (con=2) con1=24;else con1=60;if (timedatacon=con1)timedatacon=0;if (con!=0)if (key2=0)delay1ms(10); /K2去抖去抖while (key2=0);timedatacon-;if (con=2) con2=23;else con2=59;if (timedatacon=0)timedatacon=con2;EA=1;/數碼管顯示函數數碼管顯示函數scan( )char k;dis0=timedata0%10;dis1=timedata0/10;/秒秒d
23、is3=timedata1%10;dis4=timedata1/10; /分分dis6=timedata2%10;dis7=timedata2/10; /時時for (k=0;k8;k+)P0=dis_7disk;P2=scan_conk;delay1ms(1);P2=0 xff;/主函數主函數main( )TH0=0 x3c;TL0=0 xb0; /T0定時定時50msTMOD=0 x01;ET0=1;TR0=1;EA=1;while (1)scan( );keyscan( );/定時器、計數器定時器、計數器T0中斷服務函數中斷服務函數void time_intt0(void) interr
24、upt 1ET0=0;TR0=0;TH0=0 x3c;TL0=0 xb0;TR0=1;ms50+;If (ms50=20) /循環循環20次,計次,計1sms50=0 x00;timedata0+; /秒秒+1if (timedata0=60)timedata0=0;timedata1+; /分分+1if (timedata1=60) timedata1=0;timedata2+; /小時小時+1if (timedata2=24)timedata2=0; ET0=1;11.2 多路數字電壓表的設計多路數字電壓表的設計11.2.1 多路數字電壓表的原理及功能多路數字電壓表的原理及功能 多路數字式
25、電壓表應用系統主要利用多路數字式電壓表應用系統主要利用A/D轉換器,處理過程如下:轉換器,處理過程如下:先用先用A/D轉換器對各路電壓值進行轉換器對各路電壓值進行,得到相應的數字量,再按數,得到相應的數字量,再按數字量與模擬量成字量與模擬量成正比正比關系運算得到對應的模擬電壓值,然后把模擬值關系運算得到對應的模擬電壓值,然后把模擬值通過顯示器顯示出來。設計時假設待測的輸入電壓為通過顯示器顯示出來。設計時假設待測的輸入電壓為8路,電壓值的路,電壓值的范疇為范疇為05V,要求能在四位,要求能在四位LED數碼管上輪流顯示或單路選擇顯示。數碼管上輪流顯示或單路選擇顯示。測量的最小分辨率為測量的最小分辨
26、率為0.019V,測量誤差為,測量誤差為 0.02V。 根據系統的功能要求,控制系統采用根據系統的功能要求,控制系統采用AT89C52單片機,單片機,A/D轉轉換器采用換器采用ADC0809。ADC0809是是8位的位的A/D轉換器。當輸入電壓為轉換器。當輸入電壓為5.00V時,輸出的數據值為時,輸出的數據值為255(0FFH),因此最大分辨率為),因此最大分辨率為0.0196V(5/255)。ADC0809的具有的具有8路模擬量輸入端口,通過路模擬量輸入端口,通過3位位地址輸入端能從地址輸入端能從8路中選擇一路進行轉換。如每隔一段時間輪流依次路中選擇一路進行轉換。如每隔一段時間輪流依次改變改
27、變3位地址輸入端的地址,就能依次對位地址輸入端的地址,就能依次對8路輸入電壓進行測量。路輸入電壓進行測量。LED數碼管顯示采用軟件譯碼動態顯示。通過按鍵選擇可數碼管顯示采用軟件譯碼動態顯示。通過按鍵選擇可8路循環顯路循環顯示,也可單路顯示,單路顯示可通過按鍵選擇顯示的通道數。示,也可單路顯示,單路顯示可通過按鍵選擇顯示的通道數。11.2.2 系統硬件電路的設計系統硬件電路的設計2分頻分頻共陽極共陽極2MHz1MHz11.2.3 系統軟件程序的設計系統軟件程序的設計一主程序一主程序 主程序包含初始化部分、調用主程序包含初始化部分、調用A/D轉換子程序和調用顯示程序,轉換子程序和調用顯示程序,如下
28、圖。初始化包含存放通道數據的緩沖區初始化和顯示緩沖區初如下圖。初始化包含存放通道數據的緩沖區初始化和顯示緩沖區初始化。另外,對于單路顯示和循環顯示,系統設置了一個標志位始化。另外,對于單路顯示和循環顯示,系統設置了一個標志位00H控制,初始化時控制,初始化時00H位設置為位設置為0,默認為循環顯示,當它為,默認為循環顯示,當它為1時時改變為單路顯示控制,改變為單路顯示控制,00H位通過單路位通過單路/循環按鍵控制。循環按鍵控制。開始開始初始化初始化調用調用A/D轉換子程序轉換子程序調用顯示子程序調用顯示子程序 LED數碼管采樣軟件譯碼動態掃描方式。在顯示子數碼管采樣軟件譯碼動態掃描方式。在顯示
29、子程序中包含多路循環顯示程序和單路顯示程序,多路循程序中包含多路循環顯示程序和單路顯示程序,多路循環顯示程序把環顯示程序把8個存儲單元的數值依次取出送到四個數個存儲單元的數值依次取出送到四個數碼管上顯示,每一路顯示碼管上顯示,每一路顯示1秒。單路顯示程序只對當前秒。單路顯示程序只對當前選中的一路數據進行顯示。每路數據顯示時需經過轉換選中的一路數據進行顯示。每路數據顯示時需經過轉換變成十進制變成十進制BCD碼,放于四個數碼管的顯示緩沖區中。碼,放于四個數碼管的顯示緩沖區中。單路或循環顯示通過標志位單路或循環顯示通過標志位00H控制。在顯示控制程序控制。在顯示控制程序中加入了對單路或循環按鍵和通道
30、選擇按鍵的判斷。中加入了對單路或循環按鍵和通道選擇按鍵的判斷。二二A/D轉換子程序轉換子程序 A/D轉換子程序用于對轉換子程序用于對ADC0809八路輸入模擬電八路輸入模擬電壓進行壓進行A/D轉換,并將轉換的數值存入轉換,并將轉換的數值存入8個相應的存儲個相應的存儲單元中,如下圖。單元中,如下圖。A/D轉換子程序每隔一定時間調用一轉換子程序每隔一定時間調用一次,也即隔一段時間對輸入電壓采樣一次。次,也即隔一段時間對輸入電壓采樣一次。三顯示子程序三顯示子程序開始開始啟動一次轉換啟動一次轉換取數據(取數據(OE=0)0809通道地址加通道地址加1返回返回地址數小于地址數小于8?A/D轉換結束轉換結
31、束EOC=1?是是否否是是否否四匯編語言源程序清單四匯編語言源程序清單;測量電壓最大值為測量電壓最大值為5V,顯示最大值為,顯示最大值為5.00V;使用使用AT89C52單片機,單片機,12MHz晶振,晶振,P0口讀入口讀入A/D值,值,P2口為口為A/D轉轉換控制口換控制口;數碼管為共陽極連接,數碼管為共陽極連接,P1口為字段碼口,口為字段碼口,P3口為位選口口為位選口;P3.5為單路為單路/循環顯示轉換按鍵,循環顯示轉換按鍵,P3.6為單路顯示時當前通道選擇按鍵為單路顯示時當前通道選擇按鍵;70H-77H存放采樣的存放采樣的8個數據,個數據,78H-7BH為顯示緩沖區,分別為個位、為顯示緩
32、沖區,分別為個位、十位、百位和當前通道值十位、百位和當前通道值;00H位為單路位為單路/循環顯示控制位,當為循環顯示控制位,當為0時循環顯示,為時循環顯示,為1時單路顯示時單路顯示;主程序入口主程序入口 ORG 0000H LJMP START;主程序主程序START: CLR A MOV P2,A MOV R0,#70H MOV R2,#0DHLOOPMEM: MOV R0,A INC R0 DJNZ R2,LOOPMEM MOV 20H,#00H ;00H位在位在20H字節中字節中 MOV A,#0FFH MOV P0,A ;數據口數據口 MOV P1,A ;段碼口段碼口 MOV P3,A
33、 ;字位口字位口MAIN: LCALL TEST ;調用調用A/D轉換程序轉換程序 LCALL DISPLAY ;調用顯示程序調用顯示程序 AJMP MAIN;顯示子程序顯示子程序DISPLAY: JB 00H,DISP11 ;為為1跳跳DISP11 MOV R3,#08H ;00H位位=0循環顯示循環顯示 MOV R0,#70H ;首地址首地址 MOV 7BH,#00H ;選中選中0通道通道DISLOOP1: LCALL TUNBCD MOV R2,#0FFHDISLOOP2: LCALL DISP LCALL KEYWORK1 DJNZ R2,DISLOOP2 ;延時延時 INC R0 I
34、NC 7BH ;循環選中循環選中8通道通道 DJNZ R3,DISLOOP1 RETDISP11: MOV A,7BH ;00H位位=1跳來跳來,實現單路顯示實現單路顯示 SUBB A,#01H MOV 7BH,A ADD A,#70H MOV R0,ADISLOOP11: LCALL TUNBCD MOV R2, #0FFHDISLOOP22: LCALL DISP LCALL KEYWORK2 DJNZ R2,DISLOOP22 ;延時延時 INC 7BH ;通道號加通道號加1 RET ;顯示數據轉換為顯示數據轉換為3位位BCD碼子程序碼子程序TUNBCD: MOV A,R0 MOV B,
35、#51 DIV AB ;A-商,商,B-余數余數 MOV 7AH, A ;7AH-百位百位 MOV A,B ;A-余數余數 CLR F0 SUBB A,#1AH MOV F0,C ;余數余數26,F0=C=0;余數余數26,F0=C=1 MOV A,#10 MUL AB ;B-余數余數,余數余數10=BA MOV B,#51 DIV AB ;低字節低字節/51 JB F0,LOOP2 ;F0=1跳跳(余數余數26) ADD A,#5 LOOP2: MOV 79H,A ;79H-十位十位 MOV A,B ;余數處理余數處理 CLR F0 SUBB A,#1AH MOV F0,C MOV A,#1
36、0 MUL AB MOV B,#51 DIV AB JB F0,LOOP3 ADD A,#5 LOOP3: MOV 78H,A ;78H-個位個位 RET;LED掃描顯示子程序掃描顯示子程序DISP: MOV R1,#78H ;個位顯示個位顯示 MOV R5,#0FEH ;位選初值位選初值(顯示個位顯示個位)PLAY: MOV P1,#0FFH MOV A,R5 ANL P3,A MOV A,R1 MOV DPTR,#TAB MOVC A,A+DPTR ;遠程查表遠程查表 MOV P1,A ;輸出字段口輸出字段口 JB P3.2,PLAY1 ;為為1跳跳(整數位不亮整數位不亮) CLR P1.
37、7 ;點亮小數點點亮小數點PLAY1: LCALL DL1MS INC R1 ;十位顯示十位顯示 MOV A,P3 JNB ACC.3,ENDOUT ;通道號位為通道號位為0跳跳 RL A MOV R5,A MOV P3,#0FFHENDOUT: MOV P3,#0FFH MOV P1,#0FFH ;顯示顯示“滅滅”字字 RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H, 82H,F8H,80H,90H,0FFH ;共陽極七段字段碼表(顯示共陽極七段字段碼表(顯示“0”-“9”和和“滅滅”) ;延時子程序延時子程序DL10MS: MOV R6,#0D0H ;1sDL
38、1: MOV R7,#10H ;12sDL2: DJNZ R7,DL2 ;16次次2s=32s DJNZ R6,DL1 ;2sRET ;2sDL1MS: MOV R4,#0FFH ;1sDL3: DJNZ R4,DL3 ;255次次2s=510s MOV R4,0FFH ;1sDL4: DJNZ R4,DL4 ;510s RET ;2s1T1T2T2T2T1T2T1T2T2T;A/D轉換子程序轉換子程序TEST: CLR A MOV P2,A MOV R0,#70H ;通道號地址通道號地址 MOV R7,#08H ;8個通道個通道 LCALL TESTARTWAIT: JB P3.7,MOVD
39、 ;EOC=P3.7=1跳跳 AJMP WAITTESTART:SETB P2.3 ;ALE=1 NOP NOP CLR P2.3 SETB P2.4 ;START=1 NOP NOP CLR P2.4 NOP NOP NOP NOP RETMOVD: SETB P2.5 ;OE=1 MOV A,P0 MOV R0,A CLR P2.5 INC R0 ;指向下一通道指向下一通道 MOV A,P2 INC A ;地址加地址加1 MOV P2,A CJNE A,#08H,TESTENDTESTEND: JC TESTCON ;C=1跳跳 CLR A MOV P2,A MOV A,#0FFH MOV
40、 P0,A MOV P1,A MOV P2,A RETTESTCON: LCALL TESTART LJMP WAIT 查詢方式查詢方式讀取結果讀取結果啟動轉換啟動轉換;按鍵檢測子程序按鍵檢測子程序KEYWORK1: JNB P3.5,KEY1 ;K1=P3.5=0跳跳KEY1KEYOUT: RETKEY1: LCALL DISP ;按下按下K1后調用顯示程序后調用顯示程序 JB P3.5,KEYOUT ;K1=1跳(松開)跳(松開)WAIT11: JNB P3.5,WAIT12 ;K1=0跳跳 CPL 00H ;K1松開后切換顯示方式松開后切換顯示方式 MOV R2,#0AH MOV R3,
41、#01H RETWAIT12: LCALL DISP ;按按K1后調用顯示后調用顯示 AJMP WAIT11KEYWORK2: JNB P3.5,KEY1 ;按按K1后跳后跳 JNB P3.6,KEY2 ;K2=0跳跳KEY2 RETKEY2: LCALL DISP ;刷新顯示刷新顯示 JB P3.6,KEYOUT ;K2=1跳跳KEYOUTWAIT22: JNB P3.6,WAIT21 ;K2=0跳跳WAIT21 INC 7BH ;K2=1,通道號通道號+1 MOV A,7BH CJNE A,#08H,KEYOUT11KEYOUT11: JC KEYOUT1 ;C=1跳跳KEYOUT1 MO
42、V 7BH,#00H ;通道號通道號8,7BH清清0KEYOUT1: RETWAIT21: LCALL DISP ;刷新顯示刷新顯示 AJMP WAIT22 END五五C語言源程序清單語言源程序清單/測量電壓最大值為測量電壓最大值為5V,顯示最大值為,顯示最大值為5.00V/使用使用AT89C52單片機,單片機,12MHz晶振,晶振,P0口讀入口讀入A/D值,值,P2口為口為A/D轉換控制口轉換控制口/數碼管為共陽極連接,數碼管為共陽極連接,P1口為字段碼口,口為字段碼口,P3口為位選口口為位選口/KEY1(P3.5)為單路為單路/循環顯示轉換按鍵循環顯示轉換按鍵/KEY2(P3.6)為單路顯
43、示時當前通道選擇按鍵為單路顯示時當前通道選擇按鍵/FLAG為單路為單路/循環顯示控制位,當為循環顯示控制位,當為0時循環顯示,為時循環顯示,為1時單路顯示時單路顯示#include “reg52.h”#include “intrins.h” /調用調用_nop_( )延時函數延時函數#define ad_con P2 /ADC0809的控制口的控制口#define addata P0 /ADC0809的數據口的數據口#define disdata P1 /數碼管的字段碼輸出口數碼管的字段碼輸出口#define uchar unsigned char#define uint unsigned i
44、ntuchar number=0 x00; /存放單通道顯示時的當前通道數存放單通道顯示時的當前通道數sbit ALE=P23; /ADC0809的地址鎖存信號的地址鎖存信號 sbit START=P24; /ADC0809的啟動信號的啟動信號sbit OE=P25; /ADC0809的允許信號的允許信號sbit EOC=P37; /ADC0809的轉換結束信號的轉換結束信號sbit KEY1=P35; /循環或單路顯示選擇按鍵循環或單路顯示選擇按鍵sbit KEY2=P36; /通道選擇按鍵通道選擇按鍵sbit DISX=disdata7; /小數點位小數點位sbit FLAG=PSW0;
45、/循環或單路顯示標志位循環或單路顯示標志位uchar code dis_711=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8, 0 x80,0 x90,0 xFF; /LED的七段數碼管的字段碼(的七段數碼管的字段碼(0-9,滅)滅)uchar code scan_con4=0 xfe,0 xfd,0 xfb,0 xf7; /LED數碼管的位選碼數碼管的位選碼uchar data ad_data8=0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00; /ADC0809的的8個通道轉換數據緩沖區個通道轉
46、換數據緩沖區uint data dis5=0 x00,0 x00,0 x00,0 x00,0 x00; /前前4個為個為LED數碼管的顯示緩沖區數碼管的顯示緩沖區,最后一個為暫存單元最后一個為暫存單元/1ms延時子函數延時子函數 delay1ms(unit t) uint i,j; for(i=0;it;i+) for(j=0;j120;j+) ; /檢測按鍵子函數檢測按鍵子函數 keytest( ) if(KEY1=0) /檢測循環或單路選擇按鍵是否按下?檢測循環或單路選擇按鍵是否按下? FLAG=!FLAG; /標志位取反,循環、單路顯示間切換標志位取反,循環、單路顯示間切換 while(
47、KEY1=0); if(FLAG=1) /單路顯示方式單路顯示方式,檢測通道選擇按鍵是否按下?檢測通道選擇按鍵是否按下? if(KEY2=0) number+; /通道數通道數+1 if(number=8) number=0; while(KEY2=0) ; /顯示掃描子函數顯示掃描子函數 scan( ) uchar k,n; int h; if(FLAG=0) /循環顯示子程序循環顯示子程序 dis3=0 x00; /通道值清通道值清0 for(n=0;n8;n+) /8路通道路通道 dis2=ad_datan/51; /當前通道數據轉換為當前通道數據轉換為BCD碼存入顯示緩沖區碼存入顯示緩
48、沖區 dis4=ad_datan%51; /余數(電壓小數位)送暫存單元余數(電壓小數位)送暫存單元 dis4=dis4*10; /余數余數10 dis1= dis4/51; /再除以再除以51,結果取整送十位結果取整送十位 dis4= dis4%51; /結果取余送暫存單元結果取余送暫存單元 dis4= dis4*10; /余數余數10 dis0= dis4/51; /再除以再除以51,結果取整送個位結果取整送個位 for(h=0;h500;h+) /每個通道顯示每個通道顯示1s for(k=0;k4;k+) /4位位LED掃描顯示掃描顯示 disdata=dis_7disk; if(k=2
49、) DISX=0; /點亮小數點點亮小數點 P3=scan_conk; delay1ms(1);P3=0 xff; dis3+; /通道值加通道值加1 keytest( ); /按鍵檢測按鍵檢測 if(FLAG=1) /單路顯示子程序單路顯示子程序 dis3=number; /當前通道數送通道顯示當前通道數送通道顯示 for(k=0;k4;k+) disdata=dis_7disk; if(k=2) DISX=0; P3=scan_conk; delay1ms(1);P3=0 xff; keytest( ); /檢測按鍵檢測按鍵 /ADC0809轉換子函數轉換子函數 test( ) uchar
50、 m; uchar s=0 x00; /初始通道為初始通道為0 ad_con=s; /第一通道地址送第一通道地址送ADC0809控制口控制口 for(m=0;m8;m+) ALE=1;_nop_();_nop_(); ALE=0; /鎖存通道地址鎖存通道地址 START=1;_nop_();_nop_(); START=0; /啟動轉換啟動轉換 _nop_();_nop_() ;_nop_();_nop_(); while(EOC=0); /等待轉換結束等待轉換結束 OE=1;ad_datam=addata;OE=0; /讀取當前通道轉換讀取當前通道轉換0數據數據 s+;ad_con=s; /
51、改變通道地址改變通道地址 ad_con=0 x00; /通道地址恢復初值通道地址恢復初值 /主函數主函數main( ) P0=0 xff; /初始化端口初始化端口 P2=0 x00; P1=0 xff; /初始化為初始化為0通道通道 P3=0 xff; while(1) test( ); /測量轉換數據測量轉換數據 scan( ); /顯示數據顯示數據 11.3 單片機數字顯示溫度計單片機數字顯示溫度計11.3.1 單片機數字顯示溫度計的原理單片機數字顯示溫度計的原理 溫度測量通常可以使用兩種方式來實現:一種是用溫度測量通常可以使用兩種方式來實現:一種是用熱敏電阻之類的器件,由于感溫效應,熱敏電阻的阻值熱敏電阻之類的器件,由于感溫效應,熱敏電阻的阻值能夠隨溫度發生變化,當熱敏電阻接入電路,則流過它能夠隨溫度發生變化,當熱敏電阻接入電路,則流過它的電流或其兩端的電壓就會隨溫度發生相應的變化,再的電流或其兩端的電壓就會隨溫度發生相應的變化,再將隨溫度變化的電壓或電流采集過來,進行將隨溫度變化的電壓或電流
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天津市一中2025屆化學高二下期末達標檢測模擬試題含解析
- 新疆伊寧生產建設兵團第四師第一中學2025屆高二數學第二學期期末質量檢測試題含解析
- 人力資源財務代理服務合同范本
- 礦山開采場地平整與土地復墾合同
- 住宅小區公共區域裝修材料采購合同
- 長期金融顧問咨詢與管理合同
- 橙色插畫風秋季健康知識模板
- 二手商品房房屋買賣簡單合同(16篇)
- 噴漆承包合同集錦(15篇)
- 二手簡裝房交易合同(4篇)
- 2024-2030年電影放映機行業市場現狀供需分析及重點企業投資評估規劃分析研究報告
- 日內高頻交易策略研究
- 湖南省懷化市2022-2023學年五年級下學期語文期末試卷(含答案)
- DZ∕T 0004-2015 重力調查技術規范(150 000)(正式版)
- 《酒店消防安全培訓》課件完整版
- 二手人防車位使用權轉讓協議書
- PDCA提高臥床患者踝泵運動的執行率
- 河南省城市生命線安全工程建設指引V1
- 2024年河北建投能源投資股份有限公司招聘筆試參考題庫含答案解析
- JB T 6527-2006組合冷庫用隔熱夾芯板
- 質量管理制度
評論
0/150
提交評論