單片機(jī)原理與應(yīng)項目——電子鬧鐘ppt課件_第1頁
單片機(jī)原理與應(yīng)項目——電子鬧鐘ppt課件_第2頁
單片機(jī)原理與應(yīng)項目——電子鬧鐘ppt課件_第3頁
單片機(jī)原理與應(yīng)項目——電子鬧鐘ppt課件_第4頁
單片機(jī)原理與應(yīng)項目——電子鬧鐘ppt課件_第5頁
已閱讀5頁,還剩106頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、工程工程 電子鬧鐘電子鬧鐘 主要內(nèi)容 1、工程引見 2、相關(guān)知識 3、難點、問題分析 4、小結(jié)工程引見 學(xué)習(xí)內(nèi)容:動態(tài)、靜態(tài)數(shù)碼構(gòu)造、特點與控制; 獨立、矩陣鍵盤構(gòu)造、特點與識別。(在proteus界面上仿真電路,完成C51程序的編制與功能調(diào)試。) ;帶8155擴(kuò)展的鍵盤系統(tǒng). 24課時 義務(wù)一、0-9顯示器 義務(wù)二、學(xué)號顯示器 義務(wù)三、可控顯示器 義務(wù)四、可設(shè)定顯示器 義務(wù)五、定時報警鐘 義務(wù)六、帶擴(kuò)展的電子鐘(8155)相關(guān)知識 一、顯示 1、根底知識 2、靜態(tài)顯示 3、動態(tài)顯示 二、按鍵 1、鍵盤接口 2、獨立按鍵 3、行列按鍵 三、單片機(jī)運用 1、數(shù)組 2、中斷 3、定時器 四、拓展部

2、分 51單片機(jī)常識 輔助義務(wù)難點、問題分析 1、數(shù)組 2、地址的構(gòu)成 3、特殊功能存放器SFR 4、中斷定時器 八段LED顯示塊根底知識-數(shù)碼顯示共陰構(gòu)造共陰構(gòu)造共陽構(gòu)造共陽構(gòu)造根底知識-數(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,顯示9a b c d e f

3、 Rdpa b c d e f Rdpa b c d e f Rdpa b c d e f Rdpa b c d e f Rdp3.83.83.83.83.8 I/O口位選控制 I/O口段選控制 N位LED顯示器根底知識-數(shù)碼顯示 GND/+5VGND/+5VGND/+5VGND/+5VGND/+5VI/O(1)I/O(2)I/O(3)I/O(4) 四位靜態(tài)LED顯示器電路靜態(tài)數(shù)碼顯示每一個數(shù)碼管的顯示筆畫都要占用單獨的具有鎖存功能的每一個數(shù)碼管的顯示筆畫都要占用單獨的具有鎖存功能的I/O接口。即需接口。即需N8個個I/O控制線控制線 靜態(tài)顯示數(shù)碼管相應(yīng)筆段不斷處于點亮形狀,靜態(tài)顯示數(shù)碼管相應(yīng)

4、筆段不斷處于點亮形狀,因此功耗大,而且占用硬件資源多,幾乎只因此功耗大,而且占用硬件資源多,幾乎只能用在顯示位數(shù)極少的場所。能用在顯示位數(shù)極少的場所。 優(yōu)點:優(yōu)點:LED亮度高,可用在室外顯示場所。亮度高,可用在室外顯示場所。程序任務(wù)量小。程序任務(wù)量小。 例如:例如:靜態(tài)顯示技術(shù)靜態(tài)顯示技術(shù)靜態(tài)顯示技術(shù)靜態(tài)顯示技術(shù)顯示顯示 60111 1101P2=0X7DDPabcdefg1 在在proteus上畫出如下電上畫出如下電路圖路圖. 2 在在keil中編制程序中編制程序,要求要求能顯示學(xué)號最后能顯示學(xué)號最后4位數(shù)位數(shù).3 運轉(zhuǎn)程序運轉(zhuǎn)程序,察看電路中數(shù)察看電路中數(shù)碼管顯示碼管顯示.#includ

5、e#define uchar unsigned charuchar xdata *Led_D; void main() Led_D=0 x0800;*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動態(tài)顯示器電路 I/O(1)DDDDDDDDI/O(2)75643210動態(tài)數(shù)碼顯示一切數(shù)碼管的一切數(shù)碼管的8個筆畫段同名端連在一同,公共端各自獨立。即需個筆畫段同名端連在一同,公共端各自獨立。即需N+

6、8個個I/O控制線控制線 動態(tài)顯示是多只數(shù)碼管共享段碼線,經(jīng)動態(tài)顯示是多只數(shù)碼管共享段碼線,經(jīng)過位選線公共端逐位逐位分時進(jìn)展過位選線公共端逐位逐位分時進(jìn)展掃描顯示任時辰只需一只點亮。其掃描顯示任時辰只需一只點亮。其優(yōu)點是占用硬件資源少,功耗小。軟件優(yōu)點是占用硬件資源少,功耗小。軟件任務(wù)量大任務(wù)量大. 必需留意:掃描周期必需控制在必需留意:掃描周期必需控制在視覺停頓時間內(nèi),普通在視覺停頓時間內(nèi),普通在20ms以內(nèi),否以內(nèi),否那么會出現(xiàn)閃爍或跳動景象。那么會出現(xiàn)閃爍或跳動景象。 最為廣泛的一種顯示方式。最為廣泛的一種顯示方式。動態(tài)顯示技術(shù)動態(tài)顯示技術(shù)首先掃描最后掃描動態(tài)顯示技術(shù)動態(tài)顯示技術(shù)1 在在

7、proteus上畫出如下電路圖上畫出如下電路圖. 2 在在keil中編制程序中編制程序,要求能顯示學(xué)號要求能顯示學(xué)號最后最后8位數(shù)位數(shù).3 運轉(zhuǎn)程序運轉(zhuǎn)程序,察看電路中數(shù)碼管顯示察看電路中數(shù)碼管顯示.(留意留意:換位前先清段碼換位前先清段碼) #include #define uchar unsigned char void 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

8、 P2=0Xf7;P0=0X4f;delay();/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;消除拖尾消除拖尾重影景象重影景象#include#define uchar unsigned charcode uchar display =0 x3f, 0 x06, 0 x5b, 0 x4f, 0

9、 x66, 0 x6d, 0 x7d, 0 x07,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

10、();/3 P2= Tab3; P0= display 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ù)組運用數(shù)組1 在在proteus上畫出如下電路圖上畫出

11、如下電路圖. 2 在在keil中編制程序中編制程序,要求能顯示學(xué)要求能顯示學(xué)號最后號最后8位數(shù)位數(shù).3 運轉(zhuǎn)程序運轉(zhuǎn)程序,察看電路中數(shù)碼管顯示察看電路中數(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=

12、0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;uchar led8; /數(shù)組長度要給出數(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() led0=display 0; led1=display 1; led2=display 2; led3=display 3; led4=display 4; led5=display

13、 5; led6=display 6; led7=display 7; while(1) display(); 8個共陰數(shù)碼管1 根據(jù)根據(jù) 如上電路圖如上電路圖. 2 在在keil中編制程序中編制程序,要求顯示時分秒要求顯示時分秒.3 運轉(zhuǎn)程序運轉(zhuǎn)程序,察看電路中數(shù)碼管顯示察看電路中數(shù)碼管顯示.根據(jù)實驗電路圖根據(jù)實驗電路圖. 在在keil中編制程序中編制程序,要求能顯示學(xué)號要求能顯示學(xué)號.輔助義務(wù) 一 設(shè)計兩位數(shù)的十進(jìn)制減法顯示電路原理圖并編制程序. 二 設(shè)計電子時鐘顯示(時-分-秒)電路原理圖并編制程序. 三 設(shè)計用數(shù)碼顯示8只LED循環(huán)次數(shù),顯示的范圍為0-99.減法運算顯示#includ

14、e#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; uchar led8; /數(shù)組長度要給出數(shù)組長度要給出void delay(

15、)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;*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

16、; 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_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;u

17、char 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;i8;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_c

18、ode11;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#define uchar unsigned charuchar xdata *Led_D=0 xc000; uchar xdata *Led_W=0 xc800;code uchar display_co

19、de=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; 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;

20、*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 時間間隔不能時間間隔不能長長i=0; IE=0 x82; TMOD=0 x01; TCON=0 x10; led2=display_code10; led5=display_code11;while(1) if(bzie) led0=display_codeX/10; led1=display_codeX%10;led3=display_code

21、Y/10; led4=display_codeY%10;led6=display_codeZ/10; led7=display_codeZ%10; bzie=0; 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;code uchar Tab=0

22、 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ù)組長度要給出數(shù)組長度要給出void delay()uchar i;for(i=0;i100;i+); if(+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;

23、 led3=display_codemit/10; led4=display_codemit%10; led6=display_codesec/10; led7=display_codesec%10; bzie=0; display(); 時分秒時分秒 顯示顯示#include#include #define uchar unsigned char#define 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,

24、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(+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_codeh

25、our/10; led1=display_codehour%10; led3=display_codemit/10; led4=display_codemit%10; led6=display_codesec/10; led7=display_codesec%10; bzie=0; display(); 時分秒顯示時分秒顯示#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

26、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() 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=l

27、edi; 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,時間間隔不能長時間間隔不能長i=0; IE=0 x82; TMOD=0 x01; TCON=0 x10; led2=display_code10; led5=display_code10;while(1) if(bzie) if(+sec)=60)sec=0; if(+mit)=60)mit=0; if(+ho

28、ur)=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; 時分秒顯示時分秒顯示義務(wù)一義務(wù)一:根據(jù)實驗電路圖根據(jù)實驗電路圖. 在在keil中編制程序中編制程序,實現(xiàn)實現(xiàn)數(shù)碼管顯示數(shù)碼管顯示LED循環(huán)循環(huán)點亮的次數(shù)點亮的次數(shù).#include#define uchar unsigned charcode ucha

29、r 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=Tabi; P0=ledi; i+;void main()uchar n; unsigned int m,j,k; TH0 =0 xf0;TL0=0 xa0;

30、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 unsigned char OUTSEG _at_ 0 xc000; / 段控制口段控制口unsigned char LEDBuf18,LEDBuf28;

31、 / 顯示緩沖顯示緩沖 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, 0 x79, 0 x71;void Delay(unsigned char CNT) unsigned char

32、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)一切八段管關(guān)一切八段管 Pos = LEDWi; OUTSEG = LEDBuf2i; OUTBIT = Pos; / 顯示一位八段管顯示一位八段管 Delay(1); / 顯示下一位顯示下一位 OUTBIT = 0 xff; / 關(guān)一切八段管關(guān)一切八段管void main() unsigned char i = 0, j; while(1) L

33、EDBuf20 = 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 &

34、; 0 x0f;DisplayLED(); 八位數(shù)碼顯示參考程序八位數(shù)碼顯示參考程序LED點陣點陣構(gòu)造構(gòu)造新義務(wù)新義務(wù):根據(jù)實驗電路圖根據(jù)實驗電路圖. 在在keil中中編制程序編制程序,實現(xiàn)實現(xiàn)LED點陣顯點陣顯示,循環(huá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 x

35、4F,0 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 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(

36、) uchar ii; IE=0X81;IP=0X0;TCON=0X01; while(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,nke

37、y;code uchar dis =0 x3F,0 x06,0 x5B,0 x4F,0 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

38、) nkey3+;nkey=nkey3; kled3=0;if (key4=0) nkey4+;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中編制程序中編制程序,要求能對應(yīng)要求能對應(yīng)LED顯示按鍵按下的次數(shù)值顯示按鍵按下的次數(shù)值(累計累計).K

39、ey1Key2key3123#include #define uchar unsigned charuchar displayD2; / 顯示段碼緩沖單元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;

40、/ 計數(shù) 初值 void disW() interrupt 0 using 1 /led1 if(+NUMW)=100) NUMW=0; key=0 x01; 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*

41、11059/12)/256; /10MS TL0=(65536-10*11059/12)%256; P0=0 x00; P2=displayWi; P0=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=

42、0 x3f;displayD1=0 x3f;while(1) switch(key) case 0 x01: displayD1=displayBNUMW/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;le

43、d2=0; led3=1;break;default:break; 數(shù)組概念 數(shù)組的本質(zhì)那么是一系列的數(shù)據(jù)元素變量。該數(shù)組中數(shù)組的本質(zhì)那么是一系列的數(shù)據(jù)元素變量。該數(shù)組中假設(shè)干個元素必需是同一個類的。對象數(shù)組的定義、賦值假設(shè)干個元素必需是同一個類的。對象數(shù)組的定義、賦值和援用和普通數(shù)組一樣。和援用和普通數(shù)組一樣。1. 數(shù)組的定義數(shù)組的定義數(shù)組定義格式如下:數(shù)組定義格式如下:.其中,其中,指出該數(shù)組元素是屬于該類的對象,方指出該數(shù)組元素是屬于該類的對象,方括號內(nèi)的括號內(nèi)的給出某一維的元素個數(shù)。一維對象數(shù)組只給出某一維的元素個數(shù)。一維對象數(shù)組只需一個方括號,二維對象數(shù)組要有兩個方括號,等等,例需一

44、個方括號,二維對象數(shù)組要有兩個方括號,等等,例如:如:data dates7;闡明闡明dates是一維對象數(shù)組名,該數(shù)組有是一維對象數(shù)組名,該數(shù)組有7個元素,每個元素,每個元素都是類個元素都是類data的對象。的對象。2. 對象數(shù)組的賦值對象數(shù)組的賦值對象數(shù)組可以被賦初值,也能在程序中被賦值除對象數(shù)組可以被賦初值,也能在程序中被賦值除 code類。類。 例如例如 code add3=0 x3f,0 x06,0 x4f;數(shù)組運用查表程序 code unsigned char LEDMAP = 0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x

45、07, 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、鍵盤方式、鍵盤方式軟件去抖動軟件去抖動前沿抖動穩(wěn)定后沿抖動 按鍵抖動信號波形鍵盤消抖鍵盤消抖即檢測出鍵閉合后執(zhí)行一個即檢測出鍵閉合后執(zhí)行一個延時程序延時程序,產(chǎn)生產(chǎn)生5ms10ms的延時的延時,讓前沿抖動消逝后讓前沿抖動消逝后再一次檢測鍵的形狀再一次檢測鍵的形狀,假設(shè)假設(shè)仍堅持閉合形狀電平仍堅持閉合形狀

46、電平,那么那么確以為真正有鍵按下。確以為真正有鍵按下。鍵盤消抖鍵盤消抖 硬件消抖:硬件消抖: 如如RC濾波電路濾波電路2RV5+1R1V2V圖 5 - 3 濾波延時消抖電路SiVoV( D i )( D i )鍵盤消抖鍵盤消抖 硬件消抖:硬件消抖: 如雙穩(wěn)態(tài)電路如雙穩(wěn)態(tài)電路:RS觸發(fā)器為常用的硬件消抖觸發(fā)器為常用的硬件消抖電路。電路。CD 鍵盤的方式有以下兩種: 獨立式鍵盤 行列式鍵盤 2、鍵盤的方式獨立式鍵盤構(gòu)造獨立式鍵盤構(gòu)造每一個按鍵的電路是獨立的,占用一條每一個按鍵的電路是獨立的,占用一條I/O數(shù)據(jù)線數(shù)據(jù)線1 在在proteus上畫出如下電路圖上畫出如下電路圖. 2 在在keil中編制程

47、序中編制程序,要求能顯示按鍵數(shù)值要求能顯示按鍵數(shù)值.3 運轉(zhuǎn)程序運轉(zhuǎn)程序,察看電路中數(shù)碼管顯示察看電路中數(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) *pled=0 x66; 1 在在proteus上畫出如下電路圖上畫出如下電路圖. 2 在在keil中編制程序中編制程序,要求能顯示按鍵數(shù)要求能顯示按鍵數(shù)

48、值值.3 運轉(zhuǎn)程序運轉(zhuǎn)程序,察看電路中數(shù)碼管顯示察看電路中數(shù)碼管顯示.行列式鍵盤構(gòu)造行列式鍵盤構(gòu)造每一個按鍵的電路是由行列組成,每一個按鍵占用兩條每一個按鍵的電路是由行列組成,每一個按鍵占用兩條I/O數(shù)據(jù)線。數(shù)據(jù)線。當(dāng)鍵盤按下時,相應(yīng)的行列線呈現(xiàn)短路。當(dāng)鍵盤按下時,相應(yīng)的行列線呈現(xiàn)短路。求鍵的位置行、列假設(shè)假設(shè)D1=0,那么,那么D5=0假定假定 S6 按下按下求鍵的位置行、列假定假定 S7 按下按下假設(shè)假設(shè)D1=0,那么,那么D5=?只需只需D2=0,那么,那么D5=0 掃描原理: 首先確定能否有鍵閉合消抖,再判 然后逐一掃描以進(jìn)一步確定是哪一鍵閉合 (用編碼方式,找出獨一) 以44鍵盤為例

49、: 1判別能否有鍵按下:使列線D0D3都輸出0,檢測行線D4D7的電平。假設(shè)D4D7上的電平全為高,那么表示沒有鍵被按下。假設(shè)D4D7上的電平不全為高,那么表示有鍵被按下。 2掃面按鍵鍵值:假設(shè)有鍵閉合,進(jìn)展逐列掃描,找出閉合鍵的鍵號。行列式鍵盤的任務(wù)原理unsigned char I; 全局變量全局變量void Scankey() unsigned char N, m, L;P1=P1&0Xf0; /列全送低電平列全送低電平 delay(1); /等低電平穩(wěn)定等低電平穩(wěn)定 while( ( P1 | 0X0f) != 0Xff) delay(2); /有按鍵,延時有按鍵,延時 if

50、( ( P1 |0X0f) != 0Xff) /再判,有按鍵再判,有按鍵 L=0X01; /第一列第一列 for(m=0;m4;m+) /共四列共四列 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=rowke

51、y(); if(keyin!=0) for(row=0;row4;row+) if(keyin=(0 x01row) /判別列號判別列號 kcode=row+4*col;/求出詳細(xì)的按鍵號求出詳細(xì)的按鍵號 disp=tablekcode; P2=disp; /顯示顯示 break; while(rowkey()!=0); delay(10); scan=(scan1)|0 x01;/這個掃描信號用來判別行號這個掃描信號用來判別行號 void main() while(1) scanner(); 左邊程序為行列鍵盤、數(shù)碼顯示程序。要求: 分析程序功能,畫出原理圖,調(diào)試,并修正程序。1 在在pro

52、teus上畫出如下電路圖上畫出如下電路圖. 2 在在keil中編制程序中編制程序,要求能顯示按鍵數(shù)值要求能顯示按鍵數(shù)值.3 運轉(zhuǎn)程序運轉(zhuǎn)程序,察看電路中數(shù)碼管顯示察看電路中數(shù)碼管顯示.提示提示逐列掃描參考:逐列掃描參考:P1_4=0;P1_5=1;P1_6=1;P1_7=1; if(P1_0=0) P0=0X3F ; /KEY0 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

53、 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(P1_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)

54、 P0=0X. ; /KEY/ if(P1_3=0) P0=0X. ; /KEY uMCS系列單片機(jī):以系列單片機(jī):以8XC51表示,表示,X不同片不同片內(nèi)內(nèi)ROM類型不同。類型不同。u 注:注:X=0,類型為:,類型為:ROM u X=7,類型為,類型為:EPROM (電寫入電寫入,紫外線紫外線擦除擦除)u X=9,類型為:,類型為:FLSAH ROM(電改寫電改寫)u 支持支持ISP(In System Programming)在系在系統(tǒng)統(tǒng)/線中編程線中編程u IAP(In Application Programming)運運用中編程用中編程u51子系列和子系列和52子系列子系列u “51

55、是根本,是根本,“52是加強(qiáng):是加強(qiáng):單片機(jī)芯片單片機(jī)芯片u51子系列和子系列和52子系列單片機(jī)的區(qū)別子系列單片機(jī)的區(qū)別u片內(nèi)片內(nèi)ROM:4K添加到添加到8Ku片內(nèi)片內(nèi)RAM:128B添加到添加到256Bu定時器:定時器:2個添加到個添加到3個個u中斷源:中斷源:5個添加到個添加到6個個MCS-51單片機(jī)構(gòu)造振 蕩 器 及定 時 電 路4KB程 序 存 儲 器128KB數(shù) 據(jù) 存 儲 器2個 16位 定 時 器/事 件 計 數(shù) 器CPU64KB總 線擴(kuò) 展 控 制可 編 程串 行 口可 編 程 I/O中 斷中 斷頻 率 基 準(zhǔn) 源計 數(shù) 器串 行輸 入串 行輸 出并 行 I/O口控 制內(nèi)部數(shù)內(nèi)

56、部數(shù)據(jù)區(qū)據(jù)區(qū)組組通通用用寄寄存存器器區(qū)區(qū)第第 0組組通通用用寄寄存存器器區(qū)區(qū)第第 1組組通通用用寄寄存存器器區(qū)區(qū)第第2組組通通用用寄寄存存器器區(qū)區(qū)第第3)(位位地地址址位位尋尋址址區(qū)區(qū)FH7H00區(qū)區(qū)用用戶戶 RAMH00H08/H07H10/FH0H18/H17H20/FH1H30/FH2FH7內(nèi)部數(shù)據(jù)存儲器內(nèi)部數(shù)據(jù)存儲器物理上分為兩大區(qū)域:物理上分為兩大區(qū)域:00H 7FH即即128B內(nèi)內(nèi)RAM區(qū)區(qū) 80H FFH即即SFR區(qū)區(qū)(idata sbit bit)。R0、R1、R2、R3、R4、R5、R6、R7(using 03)即可位尋址,又可字節(jié)尋址即可位尋址,又可字節(jié)尋址(bit sbi

57、t bdata data idata)數(shù)據(jù)緩沖區(qū)、堆棧區(qū)、任務(wù)數(shù)據(jù)緩沖區(qū)、堆棧區(qū)、任務(wù)單元單元(data idata) bit 與sbit區(qū)別:前者不能定義絕對地址。如:sbit T1_1=P11;MCS-51單片機(jī)的外部擴(kuò)展性能 MCS-51單片機(jī)的片外總線構(gòu)造單片機(jī)的片外總線構(gòu)造 MCS-51系列單片機(jī)片外引腳可以構(gòu)成三系列單片機(jī)片外引腳可以構(gòu)成三總線構(gòu)造:總線構(gòu)造: 地址總線地址總線AB 數(shù)據(jù)總線數(shù)據(jù)總線DB 控制總線控制總線CB 一切外部芯片都經(jīng)過這三組總線進(jìn)展擴(kuò)一切外部芯片都經(jīng)過這三組總線進(jìn)展擴(kuò)展。展。三總線的概念三總線的概念: :地址總線地址總線 AB AB,P0P0口提供口提供A

58、7 A0A7 A0; P2 P2口提供口提供A15 A15 A8A8,共,共1616位。位。數(shù)據(jù)總線數(shù)據(jù)總線 DB DB,P0P0口提供口提供D7 D0D7 D0,共,共8 8位。位??刂瓶偩€控制總線 CB CB,ALE ALE 、 、 、 、 等。等。EAPSENWRRD單片機(jī)總線引腳構(gòu)造單片機(jī)總線引腳構(gòu)造 日常中斷的例子日常中斷的例子 他正在專心看書,忽然鈴響,于是他記下正在看的書的頁數(shù),去接,接完后再回來接著看書。時間時間 計算機(jī)中的中斷概念計算機(jī)中的中斷概念定義定義:中斷是指由于某種隨機(jī)事件的中斷是指由于某種隨機(jī)事件的發(fā)生,計算機(jī)暫停現(xiàn)行程序的運轉(zhuǎn),發(fā)生,計算機(jī)暫?,F(xiàn)行程序的運轉(zhuǎn),轉(zhuǎn)去

59、執(zhí)行另一程序轉(zhuǎn)去執(zhí)行另一程序(處置發(fā)生的事件處置發(fā)生的事件),處置終了后又自動前往原來程序暫處置終了后又自動前往原來程序暫停的位置繼續(xù)運轉(zhuǎn)。停的位置繼續(xù)運轉(zhuǎn)。將能引起中斷的事件稱為中斷源。將能引起中斷的事件稱為中斷源。CPU現(xiàn)行運轉(zhuǎn)的程序稱為主程序。現(xiàn)行運轉(zhuǎn)的程序稱為主程序。處置隨機(jī)事件的程序稱為中斷效力處置隨機(jī)事件的程序稱為中斷效力子程序。子程序。 中斷技術(shù)的優(yōu)點 提高任務(wù)效率提高任務(wù)效率 CPU可以同多個外設(shè)可以同多個外設(shè)“同時任務(wù)同時任務(wù) 實時處置實時處置 CPU及時處置隨機(jī)事件及時處置隨機(jī)事件(智能技術(shù)智能技術(shù)) 缺點處置缺點處置 電源掉電、存儲出錯、運算溢出電源掉電、存儲出錯、運算溢

60、出 中斷處置過程 中斷處置過程分為三個階段:中斷呼應(yīng)、中斷處置和中斷前往。 中斷呼應(yīng) 中斷處置(又稱中斷效力) 中斷前往 中斷懇求撤除 中斷響應(yīng)中斷返回MCS-51中斷系統(tǒng) 中斷源中斷源 中斷標(biāo)志中斷標(biāo)志 中斷允許中斷允許 中斷優(yōu)先級中斷優(yōu)先級 中斷存放器中斷存放器(主要為主要為5個學(xué)習(xí)重個學(xué)習(xí)重點點) MCS-51的中斷系統(tǒng)中斷源8051單片機(jī)有單片機(jī)有5個中斷懇求源:個中斷懇求源:單片機(jī)單片機(jī)INT0或 外部輸入中斷源INT0(P3.2)INT1或 外部輸入中斷源INT1(P3.3)T0 定時/記數(shù)器T0的溢出T1 定時/記數(shù)器T1的溢出串行口 片內(nèi)串行口發(fā)送或接納中斷源 MCS-51的中斷系統(tǒng)中斷標(biāo)志 每一個中斷源都有相應(yīng)的中斷標(biāo)志位; 某一個中斷源懇求中斷

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論