




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、項(xiàng)目 電子鬧鐘主要內(nèi)容1、項(xiàng)目介紹2、相關(guān)知識(shí)3、難點(diǎn)、問題分析4、小結(jié)項(xiàng)目介紹學(xué)習(xí)內(nèi)容:動(dòng)態(tài)、靜態(tài)數(shù)碼結(jié)構(gòu)、特點(diǎn)與控制; 獨(dú)立、矩陣鍵盤結(jié)構(gòu)、特點(diǎn)與識(shí)別。(在proteus界面上仿真電路,完成C51程序的編制與功能調(diào)試。) ;帶8155擴(kuò)展的鍵盤系統(tǒng). 24課時(shí)任務(wù)一、0-9顯示器任務(wù)二、學(xué)號(hào)顯示器任務(wù)三、可控顯示器任務(wù)四、可設(shè)定顯示器任務(wù)五、定時(shí)報(bào)警鐘任務(wù)六、帶擴(kuò)展的電子鐘(8155)相關(guān)知識(shí)一、顯示 1、基礎(chǔ)知識(shí) 2、靜態(tài)顯示 3、動(dòng)態(tài)顯示二、按鍵 1、鍵盤接口 2、獨(dú)立按鍵 3、行列按鍵三、單片機(jī)應(yīng)用 1、數(shù)組 2、中斷 3、定時(shí)器四、拓展部分 51單片機(jī)常識(shí) 輔助任務(wù)難點(diǎn)、問題分析1
2、、數(shù)組2、地址的形成3、特殊功能寄存器(SFR)4、中斷(定時(shí)器) 八段LED顯示塊基礎(chǔ)知識(shí)-數(shù)碼顯示共陰結(jié)構(gòu)共陽結(jié)構(gòu)基礎(chǔ)知識(shí)-數(shù)碼顯示共陰數(shù)碼:假定 Px.0-a, Px.1-b, Px.2-c, Px.3-d, Px.4-e, Px.5-f, Px.6-g, Px.7-dp則從Px口,送0 x3f,顯示0,送0 x06,顯示1 送0 x5b,顯示2,送0 x4f,顯示3 送0 x66,顯示4,送0 x6d,顯示5 送0 x7d,顯示6,送0 x07,顯示7 送0 x7f, 顯示8,送0 x6f,顯示9 N位LED顯示器基礎(chǔ)知識(shí)-數(shù)碼顯示 四位靜態(tài)LED顯示器電路靜態(tài)數(shù)碼顯示每一個(gè)數(shù)碼管的顯
3、示筆畫都要占用單獨(dú)的具有鎖存功能的I/O接口。即需N8個(gè)I/O控制線靜態(tài)顯示數(shù)碼管相應(yīng)筆段一直處于點(diǎn)亮狀態(tài),因此功耗大,而且占用硬件資源多,幾乎只能用在顯示位數(shù)極少的場合。 優(yōu)點(diǎn):LED亮度高,可用在室外顯示場合。程序工作量小。 例如:靜態(tài)顯示技術(shù)靜態(tài)顯示技術(shù)顯示 60111 1101P2=0X7DDPabcdefg1 在proteus上畫出如下電路圖. 2 在keil中編制程序,要求能顯示學(xué)號(hào)最后4位數(shù).3 運(yùn)行程序,觀察電路中數(shù)碼管顯示.#include#define uchar unsigned charuchar xdata *Led_D; void main() Led_D=0 x0
4、800;*Led_D=0 x6f; /9 Led_D=0 x0900;*Led_D=0 x5b; /2 Led_D=0 x0a00;*Led_D=0 x06; /1 Led_D=0 x0b00;*Led_D=0 x3f; /0 while(1); 八位LED動(dòng)態(tài)顯示器電路 動(dòng)態(tài)數(shù)碼顯示所有數(shù)碼管的8個(gè)筆畫段同名端連在一起,公共端各自獨(dú)立。即需N+8個(gè)I/O控制線動(dòng)態(tài)顯示是多只數(shù)碼管共享段碼線,通過位選線(公共端)逐位逐位分時(shí)進(jìn)行掃描顯示(任時(shí)刻只有一只點(diǎn)亮)。其優(yōu)點(diǎn)是占用硬件資源少,功耗小。軟件工作量大. 必須注意:掃描周期必須控制在視覺停頓時(shí)間內(nèi),一般在20ms以內(nèi),否則會(huì)出現(xiàn)閃爍或跳動(dòng)現(xiàn)象
5、。最為廣泛的一種顯示方式。動(dòng)態(tài)顯示技術(shù)首先掃描最后掃描動(dòng)態(tài)顯示技術(shù)1 在proteus上畫出如下電路圖. 2 在keil中編制程序,要求能顯示學(xué)號(hào)最后8位數(shù).3 運(yùn)行程序,觀察電路中數(shù)碼管顯示.(注意:換位前先清段碼)#include#define uchar unsigned charvoid delay()uchar i;for(i=0;i100;i+);void main()while(1) P2=0Xfe;P0=0X7f;delay();/8 P2=0Xfd;P0=0X06;delay(); /1 P2=0Xfb;P0=0X5b;delay();/2 P2=0Xf7;P0=0X4f;d
6、elay();/3 P2=0Xef;P0=0X66;delay();/4 P2=0Xdf;P0=0X6d;delay();/5 P2=0Xbf;P0=0X7d;delay();/6 P2=0X7f;P0=0X07;delay();/7 P0=0X00;P0=0X00;P0=0X00;P0=0X00;P0=0X00;P0=0X00;P0=0X00;P0=0X00;消除拖尾重影現(xiàn)象#include#define uchar unsigned charcode uchar display =0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07,
7、0 x7f, 0 x6f,0 x00;code uchar Tab=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;void delay()uchar i;for(i=0;i100;i+);void main()while(1) P2= Tab7;P0= display 8; delay();/8 P2= Tab6;P0= display 1;delay(); /1 P2= Tab5;P0= display 2; delay();/2 P2= Tab4; P0= display 3; delay();/3 P2= Tab3; P0= displa
8、y 4; delay();/4 P2= Tab2; P0= display 5; delay();/5 P2= Tab1; P0= display 6; delay();/6 P2= Tab0; P0= display 7; delay();/7 P0= display 10;P0= display 10;P0= display 10;P0= display 10;P0= display 10;P0= display 10;P0= display 10;P0= display 10;使用數(shù)組1 在proteus上畫出如下電路圖. 2 在keil中編制程序,要求能顯示學(xué)號(hào)最后8位數(shù).3 運(yùn)行程序
9、,觀察電路中數(shù)碼管顯示.(注意:換位前先清段碼)#include#define uchar unsigned charuchar xdata *Led_D=0 xc000; uchar xdata *Led_W=0 xc800;code uchar display=0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07,0 x7f, 0 x6f,0 x0;code uchar Tab=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;uchar led8; /數(shù)組長度要給出void delay(
10、)uchar i;for(i=0;i100;i+); void display() int i; for(i=0;i8;i+) *Led_D=0; *Led_W=Tabi; *Led_D=ledi; delay(); void main() led0=display 0; led1=display 1; led2=display 2; led3=display 3; led4=display 4; led5=display 5; led6=display 6; led7=display 7; while(1) display(); 8個(gè)共陰數(shù)碼管1 根據(jù) 如上電路圖. 2 在keil中編制程序
11、,要求顯示時(shí)分秒.3 運(yùn)行程序,觀察電路中數(shù)碼管顯示.根據(jù)實(shí)驗(yàn)電路圖. 在keil中編制程序,要求能顯示學(xué)號(hào).輔助任務(wù)一 設(shè)計(jì)兩位數(shù)的十進(jìn)制減法顯示電路原理圖并編制程序.二 設(shè)計(jì)電子時(shí)鐘顯示(時(shí)-分-秒)電路原理圖并編制程序.三 設(shè)計(jì)用數(shù)碼顯示8只LED循環(huán)次數(shù),顯示的范圍為0-99.減法運(yùn)算顯示#include#define uchar unsigned charuchar xdata *Led_D=0 xc000; uchar xdata *Led_W=0 xc800;code uchar display_code=0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0
12、x6d, 0 x7d, 0 x07,0 x7f, 0 x6f,0 x40,0 x48;code uchar Tab=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;bit bzie=1; uchar led8; /數(shù)組長度要給出void delay()uchar i;for(i=0;i100;i+); void display() int i; for(i=0;i8;i+) *Led_D=0; *Led_W=Tabi; *Led_D=ledi; delay(); void main()unsigned int X=98,Y=56,Z; Z=X-Y
13、;*Led_D=0;*Led_W=0 xff;led2=display_code10; led5=display_code11;while(1) if(bzie) led0=display_codeX/10; led1=display_codeX%10;led3=display_codeY/10; led4=display_codeY%10;led6=display_codeZ/10; led7=display_codeZ%10; bzie=0; display(); X-Y=Z 顯示#include#include #define uchar unsigned char#define Led
14、_D XBYTE0 xc000#define Led_W XBYTE0 xc800uchar code display_code=0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07,0 x7f, 0 x6f,0 x40,0 x48;uchar code Tab=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;uchar led8; bit bzie=1;void delay()uchar i;for(i=0;i100;i+); void display() int i; for(i=0;i
15、8;i+) Led_D=0; Led_W=Tabi; Led_D=ledi; delay(); void main()unsigned int X=98,Y=56,Z; Z=X-Y;Led_D=0;Led_W=0 xff;led2=display_code10; led5=display_code11;while(1) if(bzie) led0=display_codeX/10; led1=display_codeX%10;led3=display_codeY/10; led4=display_codeY%10;led6=display_codeZ/10; led7=display_code
16、Z%10; bzie=0; display(); X-Y=Z 顯示#include#define uchar unsigned charuchar xdata *Led_D=0 xc000; uchar xdata *Led_W=0 xc800;code uchar display_code=0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07,0 x7f, 0 x6f,0 x40,0 x48;code uchar Tab=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;bit bzie=1
17、; int i; uchar led8; void display() interrupt 1 TH0=(256*256-1*f/12000)/256; TL0= (256*256-1*f/12000)%256; if (i=8) i=0; *Led_D=0; *Led_W=Tabi; *Led_D=ledi; i+;void main()unsigned int X=98,Y=56,Z; Z=X-Y; TH0=(256*256 -1*f/12000)/256; TL0= (256*256 -1*f/12000)%256; /1ms 時(shí)間間隔不能長i=0; IE=0 x82; TMOD=0 x
18、01; TCON=0 x10; led2=display_code10; led5=display_code11;while(1) if(bzie) led0=display_codeX/10; led1=display_codeX%10;led3=display_codeY/10; led4=display_codeY%10;led6=display_codeZ/10; led7=display_codeZ%10; bzie=0; X-Y=Z 顯示時(shí)鐘顯示#include#define uchar unsigned charuchar xdata *Led_D=0 xc000; uchar
19、xdata *Led_W=0 xc800;code uchar display_code=0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07,0 x7f, 0 x6f,0 x40;code uchar Tab=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;bit bzie=1; unsigned int x=0; uchar led8; /數(shù)組長度要給出void delay()uchar i;for(i=0;i100;i+); if(+x)=1000)x=0;bzie=1; void d
20、isplay() int i; for(i=0;i=60)sec=0; if(+mit)=60)mit=0; if(+hour)=24) hour=0; led0=display_codehour/10; led1=display_codehour%10; led3=display_codemit/10; led4=display_codemit%10; led6=display_codesec/10; led7=display_codesec%10; bzie=0; display(); 時(shí)分秒 顯示#include#include #define uchar unsigned char#d
21、efine Led_D XBYTE0 xc000#define Led_W XBYTE0 xc800uchar code display_code=0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07,0 x7f, 0 x6f,0 x40,0 x48;uchar code Tab=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;uchar led8; bit bzie=1; unsigned int x=0; void delay()uchar i;for(i=0;i100;i+); if(
22、+x)=1000)x=0;bzie=1; void display() int i; for(i=0;i=60)sec=0; if(+mit)=60)mit=0; if(+hour)=24 ) hour=0; led0=display_codehour/10; led1=display_codehour%10; led3=display_codemit/10; led4=display_codemit%10; led6=display_codesec/10; led7=display_codesec%10; bzie=0; display(); 時(shí)分秒顯示#include#define uch
23、ar unsigned charuchar xdata *Led_D=0 xc000; uchar xdata *Led_W=0 xc800;code uchar display_code=0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07,0 x7f, 0 x6f,0 x40,0 x48;code uchar Tab=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;bit bzie=1; int i; uchar led8; unsigned int x=0; void display(
24、) interrupt 1 TH0=(256*256-1*f/12000)/256; TL0= (256*256-1*f/12000)%256; if (i=8) i=0; *Led_D=0; *Led_W=Tabi; *Led_D=ledi; i+; if(+x)=1000) x=0;bzie=1;void main()unsigned int hour=0,mit =0,sec=0; TH0=(256*256 -1*f/12000)/256; TL0= (256*256 -1*f/12000)%256; /1ms,時(shí)間間隔不能長i=0; IE=0 x82; TMOD=0 x01; TCON
25、=0 x10; led2=display_code10; led5=display_code10;while(1) if(bzie) if(+sec)=60)sec=0; if(+mit)=60)mit=0; if(+hour)=24) hour=0; led0=display_codehour/10; led1=display_codehour%10;led3=display_codemit/10; led4=display_codemit%10;led6=display_codesec/10; led7=display_codesec%10; bzie=0; 時(shí)分秒顯示任務(wù)一:根據(jù)實(shí)驗(yàn)電路
26、圖. 在keil中編制程序,實(shí)現(xiàn)數(shù)碼管顯示LED循環(huán)點(diǎn)亮的次數(shù).#include#define uchar unsigned charcode uchar display_code=0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07,0 x7f, 0 x6f,0 x40,0 x48;code uchar Tab=0 x01,0 x02;unsigned int i; uchar led2; void display() interrupt 1 TH0=0 xf0;TL0=0 xa0; if (i=2) i=0; P0=0; P2=Tab
27、i; P0=ledi; i+;void main()uchar n; unsigned int m,j,k; TH0 =0 xf0;TL0=0 xa0;i=0; IE=0 x82; TMOD=0 x01; TCON=0 x10; while(1) for(j=0;j=99;j+) n=0 x01; for(m=0;m8;m+) P3=n; n=1; for(k=0;k10000;k+); led0=display_codej/10; led1=display_codej%10; xdata unsigned char OUTBIT _at_ 0 xc800; / 位控制口xdata unsig
28、ned char OUTSEG _at_ 0 xc000; / 段控制口unsigned char LEDBuf18,LEDBuf28; / 顯示緩沖 LEDBuf1為原碼, LEDBuf2中為段碼 code unsigned char LEDW8=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f; code unsigned char LEDMAP = 0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07, 0 x7f, 0 x6f, 0 x77, 0 x7c, 0 x39, 0 x5e,
29、0 x79, 0 x71;void Delay(unsigned char CNT) unsigned char i; while (CNT- - !=0) for (i=100; i !=0; i-); void DisplayLED() unsigned char i, Pos; for (i = 0; i 8; i+) OUTBIT = 0 xff; / 關(guān)所有八段管 Pos = LEDWi; OUTSEG = LEDBuf2i; OUTBIT = Pos; / 顯示一位八段管 Delay(1); / 顯示下一位 OUTBIT = 0 xff; / 關(guān)所有八段管void main() u
30、nsigned char i = 0, j; while(1) LEDBuf20 = LEDMAPLEDBuf10 & 0 x0f; LEDBuf21 = LEDMAP LEDBuf11 & 0 x0f;LEDBuf22 = LEDMAPLEDBuf12 & 0 x0f; LEDBuf23 = LEDMAPLEDBuf13 & 0 x0f;LEDBuf24 = LEDMAPLEDBuf14 & 0 x0f; LEDBuf25 = LEDMAPLEDBuf15 & 0 x0f;LEDBuf26 = LEDMAPLEDBuf16 & 0 x0f; LEDBuf27 = LEDMAPLEDBuf17
31、 & 0 x0f;DisplayLED(); 八位數(shù)碼顯示參考程序LED點(diǎn)陣結(jié)構(gòu)新任務(wù):根據(jù)實(shí)驗(yàn)電路圖. 在keil中編制程序,實(shí)現(xiàn)LED點(diǎn)陣顯示,循環(huán)顯示姓名字母.#include #define uchar unsigned char sbit key1=P10;sbit key2=P12;sbit key3=P14;sbit key4=P16;uchar nkey1=0,nkey2=0,nkey3=0,nkey4=0,nkey;code uchar dis =0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F;code
32、uchar wie =0 x01,0 x02;uchar led2;void delay() uchar k; for(k=0;k250;k+); void key() interrupt 0if (key1=0) nkey1+;nkey=nkey1; if (key2=0) nkey2+;nkey=nkey2; if (key3=0) nkey3+;nkey=nkey3; if (key4=0) nkey4+;nkey=nkey4; led1=nkey/10;led0=nkey%10;void main() uchar ii; IE=0X81;IP=0X0;TCON=0X01; while(
33、1) for(ii=0;ii2;ii+) P0=0 x00; P2=wieii; P0=disledii;delay(); #include #define uchar unsigned char sbit key1=P10;sbit key2=P12;sbit key3=P14;sbit key4=P16;sbit kled1=P34;sbit kled2=P35;sbit kled3=P36;sbit kled4=P37;uchar nkey1=0,nkey2=0,nkey3=0,nkey4=0,nkey;code uchar dis =0 x3F,0 x06,0 x5B,0 x4F,0
34、x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F;code uchar wie =0 x01,0 x02;uchar led2;void delay() uchar k; for(k=0;k250;k+); void key() interrupt 0 kled1=1;kled2=1;kled3=1;kled4=1;if (key1=0) nkey1+;nkey=nkey1; kled1=0;if (key2=0) nkey2+;nkey=nkey2; kled2=0;if (key3=0) nkey3+;nkey=nkey3; kled3=0;if (key4=0) nke
35、y4+;nkey=nkey4; kled4=0; led1=nkey/10;led0=nkey%10;void main() uchar ii; IE=0X81;IP=0X0;TCON=0X01; while(1) for(ii=0;ii2;ii+) P0=0 x00; P2=wieii; P0=disledii;delay(); 1 在proteus上畫出如下電路圖. 2 在keil中編制程序,要求能對(duì)應(yīng)LED顯示按鍵按下的次數(shù)值(累計(jì)).Key1Key2key3123#include #define uchar unsigned charuchar displayD2; / 顯示段碼緩沖單
36、元uchar code displayW=0 x01,0 x02; /顯示位碼uchar code displayB=0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07,0 x7f, 0 x6f;sbit led1=P10; sbit led2=P11; sbit led3=P12; / LED顯示uchar i=0, key=0;uchar NUMW=0,NUMC=0,NUMG=0; / 計(jì)數(shù) 初值 void disW() interrupt 0 using 1 /led1 if(+NUMW)=100) NUMW=0; key=0 x
37、01; void disG() interrupt 2 using 1 /led2 if(+NUMC)=100) NUMC=0; key=0 x02; void disC() interrupt 3 using 1 /led3 if(+NUMG)=100) NUMG=0;TH1=0 xff;TL1=0 xff; key=0 x03; void displlay() interrupt 1 using 2 /顯示程序 TH0=(65536-10*11059/12)/256; /10MS TL0=(65536-10*11059/12)%256; P0=0 x00; P2=displayWi; P0
38、=displayDi; if(+i=2) i=0; void main()IE=0 x8f;TMOD=0 x51;TH1=0 xff;TL1=0 xff; IP=0 x02; TH0=(65536-10*11059/12)/256; /10ms TL0=(65536-10*11059/12)%256; TCON=0 x55;/下降沿觸發(fā) 0 x50 電平觸發(fā) led1=0;led2=0;led3=0; P2=0 x0ff;displayD0=0 x3f;displayD1=0 x3f;while(1) switch(key) case 0 x01: displayD1=displayBNUMW
39、/10;displayD0=displayBNUMW%10; led1=1;led2=0;led3=0;break;case 0 x02:displayD1=displayBNUMC/10;displayD0=displayBNUMC%10; led1=0; led2=1;led3=0;break;case 0 x03:displayD1=displayBNUMG/10;displayD0=displayBNUMG%10; led1=0;led2=0; led3=1;break;default:break; 數(shù)組概念數(shù)組的本質(zhì)則是一系列的數(shù)據(jù)元素(變量)。該數(shù)組中若干個(gè)元素必須是同一個(gè)類的。對(duì)
40、象數(shù)組的定義、賦值和引用和普通數(shù)組相同。1. 數(shù)組的定義數(shù)組定義格式如下:.其中,指出該數(shù)組元素是屬于該類的對(duì)象,方括號(hào)內(nèi)的給出某一維的元素個(gè)數(shù)。一維對(duì)象數(shù)組只有一個(gè)方括號(hào),二維對(duì)象數(shù)組要有兩個(gè)方括號(hào),等等,例如:data dates7;表明dates是一維對(duì)象數(shù)組名,該數(shù)組有7個(gè)元素,每個(gè)元素都是類data的對(duì)象。2. 對(duì)象數(shù)組的賦值對(duì)象數(shù)組能夠被賦初值,也能在程序中被賦值(除 code類)。 例如 code add3=0 x3f,0 x06,0 x4f;數(shù)組應(yīng)用(查表程序)code unsigned char LEDMAP = 0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x
41、66, 0 x6d, 0 x7d, 0 x07, 0 x7f, 0 x6f, 0 x77, 0 x7c, 0 x39, 0 x5e, 0 x79, 0 x71;unsigned char i; unsigned char LED; .LED = LEDMAPi;/i取值0-15或16進(jìn)制0-F鍵盤接口技術(shù)1、鍵盤消抖2、鍵盤形式軟件去抖動(dòng)前沿抖動(dòng)穩(wěn)定后沿抖動(dòng) 按鍵抖動(dòng)信號(hào)波形鍵盤消抖即檢測出鍵閉合后執(zhí)行一個(gè)延時(shí)程序,產(chǎn)生5ms10ms的延時(shí),讓前沿抖動(dòng)消失后再一次檢測鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下。鍵盤消抖硬件消抖:如RC濾波電路鍵盤消抖硬件消抖:如雙穩(wěn)態(tài)電路:RS觸發(fā)
42、器為常用的硬件消抖電路。CD鍵盤的形式有以下兩種:獨(dú)立式鍵盤行列式鍵盤 2、鍵盤的形式獨(dú)立式鍵盤結(jié)構(gòu)每一個(gè)按鍵的電路是獨(dú)立的,占用一條I/O數(shù)據(jù)線1 在proteus上畫出如下電路圖. 2 在keil中編制程序,要求能顯示按鍵數(shù)值.3 運(yùn)行程序,觀察電路中數(shù)碼管顯示. if(P1=P1|0 x55)!=0 xff) delay(); if(P1=P1|0 x55)=0 xfd) *pled=0 x06; if(P1=P1|0 x55)=0 xf7) *pled=0 x5b; if(P1=P1|0 x55)=0 xdf) *pled=0 x4f; if(P1=P1|0 x55)=0 x7f) *
43、pled=0 x66; 1 在proteus上畫出如下電路圖. 2 在keil中編制程序,要求能顯示按鍵數(shù)值.3 運(yùn)行程序,觀察電路中數(shù)碼管顯示.行列式鍵盤結(jié)構(gòu)每一個(gè)按鍵的電路是由行列組成,每一個(gè)按鍵占用兩條I/O數(shù)據(jù)線。當(dāng)鍵盤按下時(shí),相應(yīng)的行列線呈現(xiàn)短路。求鍵的位置(行、列)若D1=0,則D5=0假定 S6 按下求鍵的位置(行、列)假定 S7 按下若D1=0,則D5=?只有D2=0,則D5=0掃描原理:首先確定是否有鍵閉合(消抖,再判)然后逐一掃描以進(jìn)一步確定是哪一鍵閉合 (用編碼方式,找出唯一) 以44鍵盤為例: (1)判斷是否有鍵按下:使列線D0D3都輸出0,檢測行線D4D7的電平。如果
44、D4D7上的電平全為高,則表示沒有鍵被按下。如果D4D7上的電平不全為高,則表示有鍵被按下。 (2)掃面按鍵鍵值:如果有鍵閉合,進(jìn)行逐列掃描,找出閉合鍵的鍵號(hào)。行列式鍵盤的工作原理unsigned char I; 全局變量void Scankey() unsigned char N, m, L;P1=P1&0Xf0; /列全送低電平 delay(1); /等低電平穩(wěn)定 while( ( P1 | 0X0f) != 0Xff) delay(2); /有按鍵,延時(shí) if ( ( P1 |0X0f) != 0Xff) /再判,有按鍵 L=0X01; /第一列 for(m=0;m4;m+) /共四列
45、P1 =L; /送m列零 delay(1); if ( (N= P1&0Xf0 ) !=0Xf0) I = N | L; return; /返回行列信息 L0;x-) for(y=110;y0;y-);void scanner() unchar col,row,scan,keyin,kcode; scan=0 xef; for(col=0;col4;col+) P3=scan; P2=disp; keyin=rowkey(); if(keyin!=0) for(row=0;row4;row+) if(keyin=(0 x01row) /判斷列號(hào) kcode=row+4*col;/求出具體的按鍵
46、號(hào) disp=tablekcode; P2=disp; /顯示 break; while(rowkey()!=0); delay(10); scan=(scan1)|0 x01;/這個(gè)掃描信號(hào)用來判斷行號(hào) void main() while(1) scanner(); 左邊程序?yàn)樾辛墟I盤、數(shù)碼顯示程序。要求: 分析程序功能,畫出原理圖,調(diào)試,并修正程序。1 在proteus上畫出如下電路圖. 2 在keil中編制程序,要求能顯示按鍵數(shù)值.3 運(yùn)行程序,觀察電路中數(shù)碼管顯示.提示逐列掃描參考:P1_4=0;P1_5=1;P1_6=1;P1_7=1; if(P1_0=0) P0=0X3F ; /K
47、EY0 if(P1_1=0) P0=0X 06 ; /KEY1 if(P1_2=0) P0=0X . ; /KEY2 if(P1_3=0) P0=0X. ; /KEY3P1_4=1;P1_5=0;P1_6=1;P1_7=1; if(P1_0=0) P0=0X. ; /KEY4 if(P1_1=0) P0=0X. ; /KEY5 if(P1_2=0) P0=0X. ; /KEY6 if(P1_3=0) P0=0X. ;/KEY7P1_4=1;P1_5=1;P1_6=0;P1_7=1; if(P1_0=0) P0=0X. ; /KEY8 if(P1_1=0) P0=0X. ; /KEY9 if(P
48、1_2=0) P0=0X. ; /KEY- if(P1_3=0) P0=0X. ; /KEY+P1_4=1;P1_5=1;P1_6=1;P1_7=0; if(P1_0=0) P0=0X. ; /KEY= if(P1_1=0) P0=0X. ; /KEY* if(P1_2=0) P0=0X. ; /KEY/ if(P1_3=0) P0=0X. ; /KEY MCS系列單片機(jī):以8XC51表示,X不同片內(nèi)ROM類型不同。 注:X=0,類型為:ROM X=7,類型為:EPROM (電寫入,紫外線擦除) X=9,類型為:FLSAH ROM(電改寫) 支持ISP(In System Programmin
49、g)在系統(tǒng)/線中編程 IAP(In Application Programming)應(yīng)用中編程51子系列和52子系列 “51”是基本,“52”是增強(qiáng):單片機(jī)芯片51子系列和52子系列單片機(jī)的區(qū)別片內(nèi)ROM:4K增加到8K片內(nèi)RAM:128B增加到256B定時(shí)器:2個(gè)增加到3個(gè)中斷源:5個(gè)增加到6個(gè)MCS-51單片機(jī)結(jié)構(gòu)內(nèi)部數(shù)據(jù)區(qū)內(nèi)部數(shù)據(jù)存儲(chǔ)器物理上分為兩大區(qū)域:00H 7FH即128B內(nèi)RAM區(qū) 80H FFH即SFR區(qū)(idata sbit bit)。R0、R1、R2、R3、R4、R5、R6、R7(using 03)即可位尋址,又可字節(jié)尋址(bit sbit bdata data idata
50、)數(shù)據(jù)緩沖區(qū)、堆棧區(qū)、工作單元(data idata) bit 與sbit區(qū)別:前者不能定義絕對(duì)地址。如:sbit T1_1=P11;MCS-51單片機(jī)的外部擴(kuò)展性能MCS-51單片機(jī)的片外總線結(jié)構(gòu) MCS-51系列單片機(jī)片外引腳可以構(gòu)成三總線結(jié)構(gòu): 地址總線(AB) 數(shù)據(jù)總線(DB) 控制總線(CB) 所有外部芯片都通過這三組總線進(jìn)行擴(kuò)展。三總線的概念:地址總線 AB,P0口提供(A7 A0); P2口提供(A15 A8),共16位。數(shù)據(jù)總線 DB,P0口提供(D7 D0),共8位。控制總線 CB,ALE 、 、 、 、 等。單片機(jī)總線引腳結(jié)構(gòu) 日常中斷的例子返回 你正在專心看書,突然電話鈴
51、響,于是你記下正在看的書的頁數(shù),去接電話,接完電話后再回來接著看書。時(shí)間 計(jì)算機(jī)中的中斷概念返回定義:中斷是指由于某種隨機(jī)事件的發(fā)生,計(jì)算機(jī)暫?,F(xiàn)行程序的運(yùn)行,轉(zhuǎn)去執(zhí)行另一程序(處理發(fā)生的事件),處理完畢后又自動(dòng)返回原來程序暫停的位置繼續(xù)運(yùn)行。將能引起中斷的事件稱為中斷源。CPU現(xiàn)行運(yùn)行的程序稱為主程序。處理隨機(jī)事件的程序稱為中斷服務(wù)子程序。 中斷技術(shù)的優(yōu)點(diǎn)提高工作效率 CPU可以同多個(gè)外設(shè)“同時(shí)”工作實(shí)時(shí)處理 CPU及時(shí)處理隨機(jī)事件(智能技術(shù))故障處理 電源掉電、存儲(chǔ)出錯(cuò)、運(yùn)算溢出 中斷處理過程 中斷處理過程分為三個(gè)階段:中斷響應(yīng)、中斷處理和中斷返回。 中斷響應(yīng) 中斷處理(又稱中斷服務(wù)) 中
52、斷返回 中斷請(qǐng)求撤除 中斷響應(yīng)中斷返回MCS-51中斷系統(tǒng)中斷源中斷標(biāo)志中斷允許中斷優(yōu)先級(jí)中斷寄存器(主要為5個(gè)學(xué)習(xí)重點(diǎn)) MCS-51的中斷系統(tǒng)中斷源8051單片機(jī)有5個(gè)中斷請(qǐng)求源:單片機(jī)INT0或 外部輸入中斷源INT0(P3.2)INT1或 外部輸入中斷源INT1(P3.3)T0 定時(shí)/記數(shù)器T0的溢出T1 定時(shí)/記數(shù)器T1的溢出串行口 片內(nèi)串行口發(fā)送或接收中斷源 MCS-51的中斷系統(tǒng)中斷標(biāo)志 每一個(gè)中斷源都有相應(yīng)的中斷標(biāo)志位; 某一個(gè)中斷源申請(qǐng)中斷,相應(yīng)中斷標(biāo)志位置1。特殊功能寄存器(SFR)IE 中斷允許SFRIP 中斷優(yōu)先SFRTCON 中斷控制SFRTMOD 定時(shí)器方式SFRS
53、CON 串行口控制SFR(SBUF 串行口緩沖SFR )單片機(jī)中斷響應(yīng)條件 中斷源有中斷請(qǐng)求; 此中斷源的中斷允許位為1; CPU開中斷(即EA=1)。以上三條同時(shí)滿足時(shí),CPU才有可能響應(yīng)中斷。MCS-51的中斷系統(tǒng)中斷寄存器 IE EA ESET1EX1ET0EX0IE寄存器中斷允許寄存器EA 中斷允許總控位ES 串行通訊中斷允許ET1、ET0 定時(shí)/記數(shù)1、0溢出中斷允許EX1、EX0 外部中斷1、0允許76543210SFR MCS-51的中斷系統(tǒng)中斷允許INT0INT1T0T1串口IE0TF0IE1TF1TIRI中斷源中斷標(biāo)志位 EA總中斷允許位,EA=1開放所有中斷,EA=0,禁止
54、所有中斷; 某一個(gè)中斷源還有相應(yīng)的中斷允許位,1允許相應(yīng)中斷源的中斷,0禁止相應(yīng)中斷源的中斷。中斷允許IEESET0EX0EX1ET1EA 51單片機(jī)有兩個(gè)中斷優(yōu)先級(jí)高級(jí)和低級(jí) 專用寄存器IP為中斷優(yōu)先級(jí)寄存器,用戶可用軟件設(shè)定 相應(yīng)位為1,對(duì)應(yīng)的中斷源被設(shè)置為高優(yōu)先級(jí),相應(yīng)位為0,對(duì)應(yīng)的中斷源被設(shè)置為低優(yōu)先級(jí) 系統(tǒng)復(fù)位時(shí),均為低優(yōu)先級(jí) PSPT1PX1PT0PX0MCS-51的中斷系統(tǒng)中斷寄存器 IP 76543210IP寄存器中斷優(yōu)先級(jí)寄存器SFR MCS-51的中斷系統(tǒng)中斷優(yōu)先級(jí)INT0INT1T0T1串口中斷源 單片機(jī)中有兩個(gè)中斷優(yōu)先級(jí),即高優(yōu)先級(jí)中斷和低優(yōu)先級(jí)中斷,前者優(yōu)先權(quán)高于后者
55、(在程序中設(shè)置,IP相應(yīng)位=1,為高優(yōu)先級(jí)); 同一優(yōu)先級(jí)別的中斷源按照自然優(yōu)先級(jí)順序確定優(yōu)先級(jí)別(硬件形成,無法改變)。自然優(yōu)先級(jí)高低優(yōu)先控制IPPSPT0PX0PX1PT1 同一優(yōu)先級(jí)(IP)中的中斷申請(qǐng)不止一個(gè)時(shí),則有中斷優(yōu)先權(quán)排隊(duì)問題。同一優(yōu)先級(jí)的中斷優(yōu)先權(quán)排隊(duì),由中斷系統(tǒng)硬件確定的自然優(yōu)先級(jí)形成,其排列如所示:MCS-51的中斷系統(tǒng)中斷寄存器 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCON T1溢出中斷標(biāo)志(TCON.7): T1啟動(dòng)計(jì)數(shù)(TR1=1)后,計(jì)滿溢出由硬件置位TF1=1,向CPU請(qǐng)求中斷,此標(biāo)志一直保持到CPU響應(yīng)中斷后,才由硬件自動(dòng)清0。也可用
56、軟件查詢?cè)摌?biāo)志,并由軟件清0。(同樣T0 在TR0=1,TF0的狀態(tài)處理)76543210TCON寄存器T0和T1控制寄存器SFR TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCON外部中斷INT1中斷標(biāo)志位(TCON.3) : IE11,外部中斷INT1 向CPU申請(qǐng)中斷 外部中斷INT1觸發(fā)方式控制位(TCON.2): IT1=0,電平觸發(fā)方式 IT1=1, 下降沿觸發(fā)方式76543210TCON寄存器T0和T1控制寄存器(同理 外部中斷INT0) TMODD7D6D5D4D3D2D1D0GATA M1M0GATAM1M0T1方式字段T0方式字段GATE 門控位。 GA
57、TE = 0 啟動(dòng)不受 /INT0或 /INT1的控制; GATE = 1 啟動(dòng)受 /INT0 或 /INT1 的控制。 C/T 外部計(jì)數(shù)器 / 定時(shí)器方式選擇位 C/T = 0 定時(shí)方式; C /T = 1 計(jì)數(shù)方式。 M1M0 工作模式選擇位(編程可決定四種工作模式)。 SFR(1)定時(shí)/計(jì)數(shù)器的工作方式M1M0 工作模式選擇位(編程可決定四種工作模式)0 0 13位定時(shí)/計(jì)數(shù)器 模式00 1 16位定時(shí)/計(jì)數(shù)器 模式1 0 8 位定時(shí)/計(jì)數(shù)器(自動(dòng)重裝初值) 模式21 1 T0 8位定時(shí)/計(jì)數(shù) 模式3 T1 停止工作 串行口控制寄存器SCONSM0、SM1:控制串行口的工作方式。SM2:
58、允許方式2和方式3進(jìn)行多機(jī)通信控制位。REN:允許串行接收控制位。REN=1,允許接收。TB8:是工作在方式2和方式3時(shí)要發(fā)送的第9位數(shù)據(jù),根據(jù)需要由軟件置位和復(fù)位。RB8:是工作在方式2和方式3時(shí)接收到的第9位數(shù)據(jù)。TI:發(fā)送中斷標(biāo)志位。必須由軟件清零。RI:接收中斷標(biāo)志位。必須由軟件清零。返回 TI (SCON.1)串行發(fā)送中斷標(biāo)志。 RI (SCON.0)串行接收中斷標(biāo)志。 TI RIMCS-51的中斷系統(tǒng)中斷寄存器SCON76543210SCON寄存器串行口控制寄存器SFR返回 TI (SCON.1)串行發(fā)送中斷標(biāo)志。 RI (SCON.0)串行接收中斷標(biāo)志。 TI RIMCS-51的
59、中斷系統(tǒng)中斷寄存器SCON76543210SCON寄存器串行口控制寄存器SFR中斷請(qǐng)求的撤除 CPU響應(yīng)某中斷請(qǐng)求后,在中斷返回前,應(yīng)該撤除該中斷請(qǐng)求,否則會(huì)引起另一次中斷。 定時(shí)器0或1溢出:CPU在響應(yīng)中斷后,硬件清除了有關(guān)的中斷請(qǐng)求標(biāo)志TFO或TF1,即中斷請(qǐng)求是自動(dòng)撤除的。 外部中斷:CPU在響應(yīng)中斷后,也是用硬件自動(dòng)清除有關(guān)的中斷請(qǐng)求標(biāo)志IE0或IE1。 串行口中斷:CPU響應(yīng)中斷后,沒有用硬件清除T1、R1,故這些中斷不能自動(dòng)撤除,而要靠軟件來清除相應(yīng)的標(biāo)志。C51中斷程序設(shè)計(jì)的完整語法如下:void 函數(shù)名 interrupt n using m m、n 為正整數(shù),不允許使用表達(dá)
60、式。n取值范圍05,對(duì)應(yīng)該中斷源的編號(hào)。通常對(duì)普通8051系列單片機(jī)來說,外部中斷0、定時(shí)器0、外部中斷1、定時(shí)器1、串口的中斷源編號(hào)依次為0、1、2、3、4。m取值范圍03。 例如: void serial_service interrupt 4 using 2 ; Keil C51編譯器用特定的編譯器指令分配寄存器組。當(dāng)前工作寄存器由using指定,“using”后的變量為一個(gè)03的整數(shù)。“using”只允許用于中斷函數(shù),它在中斷函數(shù)入口處將當(dāng)前寄存器組保留,并在中斷程序中使用指定的寄存器組,在函數(shù)退出前恢復(fù)原寄存器組。 中斷舉例程序中斷舉例程序#include #define uchar
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工藝?yán)L畫的藝術(shù)表現(xiàn)手法考核試卷
- 水產(chǎn)品市場流通環(huán)節(jié)管理考核試卷
- 森林康養(yǎng)與綠色健康生活考核試卷
- 儲(chǔ)備崗位合同標(biāo)準(zhǔn)文本
- 農(nóng)村約定合同標(biāo)準(zhǔn)文本
- 個(gè)人和公司合同范本
- 出租耐火廠房合同標(biāo)準(zhǔn)文本
- 住房裝修工程合同標(biāo)準(zhǔn)文本
- 代賣衣服服務(wù)合同范例
- 出租餐車合同標(biāo)準(zhǔn)文本
- 唐山市化工行業(yè)安全檢查手冊(cè)(2025版)
- 2025屆河南省豫西北教研聯(lián)盟(洛平許濟(jì))高三下學(xué)期3月二模生物學(xué)試卷(含答案)
- 中考科創(chuàng)班試題及答案
- 2025年江蘇省職業(yè)院校技能大賽中職組(網(wǎng)絡(luò)建設(shè)與運(yùn)維)考試題庫(含答案)
- 學(xué)校師德師風(fēng)建設(shè)經(jīng)驗(yàn)分享-校長匯報(bào):從“尊重被看見”出發(fā)打造“四有好老師”團(tuán)隊(duì)
- 某垃圾焚燒余熱發(fā)電廠投資建設(shè)項(xiàng)目節(jié)能評(píng)估報(bào)告
- 全國青少年科技輔導(dǎo)員專業(yè)水平認(rèn)證筆試考題
- 權(quán)責(zé)體系手冊(cè)
- 2024初級(jí)會(huì)計(jì)職稱考試題庫(附參考答案)
- 礦山轉(zhuǎn)讓協(xié)議書樣本礦山轉(zhuǎn)讓協(xié)議書
- 語言文字應(yīng)用44 看圖猜成語
評(píng)論
0/150
提交評(píng)論