单片机原理与应的项目——电子闹钟ppt课件_第1页
单片机原理与应的项目——电子闹钟ppt课件_第2页
单片机原理与应的项目——电子闹钟ppt课件_第3页
单片机原理与应的项目——电子闹钟ppt课件_第4页
单片机原理与应的项目——电子闹钟ppt课件_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、工程工程 电子闹钟电子闹钟 主要内容 1、工程引见 2、相关知识 3、难点、问题分析 4、小结工程引见 学习内容:动态、静态数码构造、特点与控制; 独立、矩阵键盘构造、特点与识别。(在proteus界面上仿真电路,完成C51程序的编制与功能调试。) ;带8155扩展的键盘系统. 24课时 义务一、0-9显示器 义务二、学号显示器 义务三、可控显示器 义务四、可设定显示器 义务五、定时报警钟 义务六、带扩展的电子钟(8155)相关知识 一、显示 1、根底知识 2、静态显示 3、动态显示 二、按键 1、键盘接口 2、独立按键 3、行列按键 三、单片机运用 1、数组 2、中断 3、定时器 四、拓展部

2、分 51单片机常识 辅助义务难点、问题分析 1、数组 2、地址的构成 3、特殊功能存放器SFR 4、中断定时器 八段LED显示块根底知识-数码显示共阴构造共阴构造共阳构造共阳构造根底知识-数码显示 共阴数码: 假定 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显示器根底知识-数码显示 GND/+5VGND/+5VGND/+5VGND/+5VGND/+5VI/O(1)I/O(2)I/O(3)I/O(4) 四位静态LED显示器电路静态数码显示每一个数码管的显示笔画都要占用单独的具有锁存功能的每一个数码管的显示笔画都要占用单独的具有锁存功能的I/O接口。即需接口。即需N8个个I/O控制线控制线 静态显示数码管相应笔段不断处于点亮形状,静态显示数码管相应

4、笔段不断处于点亮形状,因此功耗大,而且占用硬件资源多,几乎只因此功耗大,而且占用硬件资源多,几乎只能用在显示位数极少的场所。能用在显示位数极少的场所。 优点:优点:LED亮度高,可用在室外显示场所。亮度高,可用在室外显示场所。程序任务量小。程序任务量小。 例如:例如:静态显示技术静态显示技术静态显示技术静态显示技术显示显示 60111 1101P2=0X7DDPabcdefg1 在在proteus上画出如下电上画出如下电路图路图. 2 在在keil中编制程序中编制程序,要求要求能显示学号最后能显示学号最后4位数位数.3 运转程序运转程序,察看电路中数察看电路中数码管显示码管显示.#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动态显示器电路 I/O(1)DDDDDDDDI/O(2)75643210动态数码显示一切数码管的一切数码管的8个笔画段同名端连在一同,公共端各自独立。即需个笔画段同名端连在一同,公共端各自独立。即需N+

6、8个个I/O控制线控制线 动态显示是多只数码管共享段码线,经动态显示是多只数码管共享段码线,经过位选线公共端逐位逐位分时进展过位选线公共端逐位逐位分时进展扫描显示任时辰只需一只点亮。其扫描显示任时辰只需一只点亮。其优点是占用硬件资源少,功耗小。软件优点是占用硬件资源少,功耗小。软件任务量大任务量大. 必需留意:扫描周期必需控制在必需留意:扫描周期必需控制在视觉停顿时间内,普通在视觉停顿时间内,普通在20ms以内,否以内,否那么会出现闪烁或跳动景象。那么会出现闪烁或跳动景象。 最为广泛的一种显示方式。最为广泛的一种显示方式。动态显示技术动态显示技术首先扫描最后扫描动态显示技术动态显示技术1 在在

7、proteus上画出如下电路图上画出如下电路图. 2 在在keil中编制程序中编制程序,要求能显示学号要求能显示学号最后最后8位数位数.3 运转程序运转程序,察看电路中数码管显示察看电路中数码管显示.(留意留意:换位前先清段码换位前先清段码) #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;运用数组运用数组1 在在proteus上画出如下电路图上画出

11、如下电路图. 2 在在keil中编制程序中编制程序,要求能显示学要求能显示学号最后号最后8位数位数.3 运转程序运转程序,察看电路中数码管显示察看电路中数码管显示.(留意留意:换位前先清段码换位前先清段码)#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; /数组长度要给出数组长度要给出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个共阴数码管1 根据根据 如上电路图如上电路图. 2 在在keil中编制程序中编制程序,要求显示时分秒要求显示时分秒.3 运转程序运转程序,察看电路中数码管显示察看电路中数码管显示.根据实验电路图根据实验电路图. 在在keil中编制程序中编制程序,要求能显示学号要求能显示学号.辅助义务 一 设计两位数的十进制减法显示电路原理图并编制程序. 二 设计电子时钟显示(时-分-秒)电路原理图并编制程序. 三 设计用数码显示8只LED循环次数,显示的范围为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; /数组长度要给出数组长度要给出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; /数组长度要给出数组长度要给出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; 时分秒显示时分秒显示义务一义务一:根据实验电路图根据实验电路图. 在在keil中编制程序中编制程序,实现实现数码管显示数码管显示LED循环循环点亮的次数点亮的次数.#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; / 关一切八段管关一切八段管 Pos = LEDWi; OUTSEG = LEDBuf2i; OUTBIT = Pos; / 显示一位八段管显示一位八段管 Delay(1); / 显示下一位显示下一位 OUTBIT = 0 xff; / 关一切八段管关一切八段管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(); 八位数码显示参考程序八位数码显示参考程序LED点阵点阵构造构造新义务新义务:根据实验电路图根据实验电路图. 在在keil中中编制程序编制程序,实现实现LED点阵显点阵显示,循环显示姓名字母示,循环显示姓名字母.#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中编制程序中编制程序,要求能对应要求能对应LED显示按键按下的次数值显示按键按下的次数值(累计累计).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、/ 计数 初值 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; /下降沿触发 0 x50 电平触发 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; 数组概念 数组的本质那么是一系列的数据元素变量。该数组中数组的本质那么是一系列的数据元素变量。该数组中假设干个元素必需是同一个类的。对象数组的定义、赋值假设干个元素必需是同一个类的。对象数组的定义、赋值和援用和普通数组一样。和援用和普通数组一样。1. 数组的定义数组的定义数组定义格式如下:数组定义格式如下:.其中,其中,指出该数组元素是属于该类的对象,方指出该数组元素是属于该类的对象,方括号内的括号内的给出某一维的元素个数。一维对象数组只给出某一维的元素个数。一维对象数组只需一个方括号,二维对象数组要有两个方括号,等等,例需一

44、个方括号,二维对象数组要有两个方括号,等等,例如:如:data dates7;阐明阐明dates是一维对象数组名,该数组有是一维对象数组名,该数组有7个元素,每个元素,每个元素都是类个元素都是类data的对象。的对象。2. 对象数组的赋值对象数组的赋值对象数组可以被赋初值,也能在程序中被赋值除对象数组可以被赋初值,也能在程序中被赋值除 code类。类。 例如例如 code add3=0 x3f,0 x06,0 x4f;数组运用查表程序 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进制0-F键盘接口技术1、键盘消抖、键盘消抖2、键盘方式、键盘方式软件去抖动软件去抖动前沿抖动稳定后沿抖动 按键抖动信号波形键盘消抖键盘消抖即检测出键闭合后执行一个即检测出键闭合后执行一个延时程序延时程序,产生产生5ms10ms的延时的延时,让前沿抖动消逝后让前沿抖动消逝后再一次检测键的形状再一次检测键的形状,假设假设仍坚持闭合形状电平仍坚持闭合形状

46、电平,那么那么确以为真正有键按下。确以为真正有键按下。键盘消抖键盘消抖 硬件消抖:硬件消抖: 如如RC滤波电路滤波电路2RV5+1R1V2V图 5 - 3 滤波延时消抖电路SiVoV( D i )( D i )键盘消抖键盘消抖 硬件消抖:硬件消抖: 如双稳态电路如双稳态电路:RS触发器为常用的硬件消抖触发器为常用的硬件消抖电路。电路。CD 键盘的方式有以下两种: 独立式键盘 行列式键盘 2、键盘的方式独立式键盘构造独立式键盘构造每一个按键的电路是独立的,占用一条每一个按键的电路是独立的,占用一条I/O数据线数据线1 在在proteus上画出如下电路图上画出如下电路图. 2 在在keil中编制程

47、序中编制程序,要求能显示按键数值要求能显示按键数值.3 运转程序运转程序,察看电路中数码管显示察看电路中数码管显示. 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中编制程序中编制程序,要求能显示按键数要求能显示按键数

48、值值.3 运转程序运转程序,察看电路中数码管显示察看电路中数码管显示.行列式键盘构造行列式键盘构造每一个按键的电路是由行列组成,每一个按键占用两条每一个按键的电路是由行列组成,每一个按键占用两条I/O数据线。数据线。当键盘按下时,相应的行列线呈现短路。当键盘按下时,相应的行列线呈现短路。求键的位置行、列假设假设D1=0,那么,那么D5=0假定假定 S6 按下按下求键的位置行、列假定假定 S7 按下按下假设假设D1=0,那么,那么D5=?只需只需D2=0,那么,那么D5=0 扫描原理: 首先确定能否有键闭合消抖,再判 然后逐一扫描以进一步确定是哪一键闭合 (用编码方式,找出独一) 以44键盘为例

49、: 1判别能否有键按下:使列线D0D3都输出0,检测行线D4D7的电平。假设D4D7上的电平全为高,那么表示没有键被按下。假设D4D7上的电平不全为高,那么表示有键被按下。 2扫面按键键值:假设有键闭合,进展逐列扫描,找出闭合键的键号。行列式键盘的任务原理unsigned char I; 全局变量全局变量void Scankey() unsigned char N, m, L;P1=P1&0Xf0; /列全送低电平列全送低电平 delay(1); /等低电平稳定等低电平稳定 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;/求出详细的按键号求出详细的按键号 disp=tablekcode; P2=disp; /显示显示 break; while(rowkey()!=0); delay(10); scan=(scan1)|0 x01;/这个扫描信号用来判别行号这个扫描信号用来判别行号 void main() while(1) scanner(); 左边程序为行列键盘、数码显示程序。要求: 分析程序功能,画出原理图,调试,并修正程序。1 在在pro

52、teus上画出如下电路图上画出如下电路图. 2 在在keil中编制程序中编制程序,要求能显示按键数值要求能显示按键数值.3 运转程序运转程序,察看电路中数码管显示察看电路中数码管显示.提示提示逐列扫描参考:逐列扫描参考: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系列单片机:以系列单片机:以8XC51表示,表示,X不同片不同片内内ROM类型不同。类型不同。u 注:注:X=0,类型为:,类型为:ROM u X=7,类型为,类型为:EPROM (电写入电写入,紫外线紫外线擦除擦除)u X=9,类型为:,类型为:FLSAH ROM(电改写电改写)u 支持支持ISP(In System Programming)在系在系统统/线中编程线中编程u IAP(In Application Programming)运运用中编程用中编程u51子系列和子系列和52子系列子系列u “51

55、是根本,是根本,“52是加强:是加强:单片机芯片单片机芯片u51子系列和子系列和52子系列单片机的区别子系列单片机的区别u片内片内ROM:4K添加到添加到8Ku片内片内RAM:128B添加到添加到256Bu定时器:定时器:2个添加到个添加到3个个u中断源:中断源:5个添加到个添加到6个个MCS-51单片机构造振 荡 器 及定 时 电 路4KB程 序 存 储 器128KB数 据 存 储 器2个 16位 定 时 器/事 件 计 数 器CPU64KB总 线扩 展 控 制可 编 程串 行 口可 编 程 I/O中 断中 断频 率 基 准 源计 数 器串 行输 入串 行输 出并 行 I/O口控 制内部数内

56、部数据区据区组组通通用用寄寄存存器器区区第第 0组组通通用用寄寄存存器器区区第第 1组组通通用用寄寄存存器器区区第第2组组通通用用寄寄存存器器区区第第3)(位位地地址址位位寻寻址址区区FH7H00区区用用户户 RAMH00H08/H07H10/FH0H18/H17H20/FH1H30/FH2FH7内部数据存储器内部数据存储器物理上分为两大区域:物理上分为两大区域:00H 7FH即即128B内内RAM区区 80H FFH即即SFR区区(idata sbit bit)。R0、R1、R2、R3、R4、R5、R6、R7(using 03)即可位寻址,又可字节寻址即可位寻址,又可字节寻址(bit sbi

57、t bdata data idata)数据缓冲区、堆栈区、任务数据缓冲区、堆栈区、任务单元单元(data idata) bit 与sbit区别:前者不能定义绝对地址。如:sbit T1_1=P11;MCS-51单片机的外部扩展性能 MCS-51单片机的片外总线构造单片机的片外总线构造 MCS-51系列单片机片外引脚可以构成三系列单片机片外引脚可以构成三总线构造:总线构造: 地址总线地址总线AB 数据总线数据总线DB 控制总线控制总线CB 一切外部芯片都经过这三组总线进展扩一切外部芯片都经过这三组总线进展扩展。展。三总线的概念三总线的概念: :地址总线地址总线 AB AB,P0P0口提供口提供A

58、7 A0A7 A0; P2 P2口提供口提供A15 A15 A8A8,共,共1616位。位。数据总线数据总线 DB DB,P0P0口提供口提供D7 D0D7 D0,共,共8 8位。位。控制总线控制总线 CB CB,ALE ALE 、 、 、 、 等。等。EAPSENWRRD单片机总线引脚构造单片机总线引脚构造 日常中断的例子日常中断的例子 他正在专心看书,忽然铃响,于是他记下正在看的书的页数,去接,接完后再回来接着看书。时间时间 计算机中的中断概念计算机中的中断概念定义定义:中断是指由于某种随机事件的中断是指由于某种随机事件的发生,计算机暂停现行程序的运转,发生,计算机暂停现行程序的运转,转去

59、执行另一程序转去执行另一程序(处置发生的事件处置发生的事件),处置终了后又自动前往原来程序暂处置终了后又自动前往原来程序暂停的位置继续运转。停的位置继续运转。将能引起中断的事件称为中断源。将能引起中断的事件称为中断源。CPU现行运转的程序称为主程序。现行运转的程序称为主程序。处置随机事件的程序称为中断效力处置随机事件的程序称为中断效力子程序。子程序。 中断技术的优点 提高任务效率提高任务效率 CPU可以同多个外设可以同多个外设“同时任务同时任务 实时处置实时处置 CPU及时处置随机事件及时处置随机事件(智能技术智能技术) 缺点处置缺点处置 电源掉电、存储出错、运算溢出电源掉电、存储出错、运算溢

60、出 中断处置过程 中断处置过程分为三个阶段:中断呼应、中断处置和中断前往。 中断呼应 中断处置(又称中断效力) 中断前往 中断恳求撤除 中断响应中断返回MCS-51中断系统 中断源中断源 中断标志中断标志 中断允许中断允许 中断优先级中断优先级 中断存放器中断存放器(主要为主要为5个学习重个学习重点点) MCS-51的中断系统中断源8051单片机有单片机有5个中断恳求源:个中断恳求源:单片机单片机INT0或 外部输入中断源INT0(P3.2)INT1或 外部输入中断源INT1(P3.3)T0 定时/记数器T0的溢出T1 定时/记数器T1的溢出串行口 片内串行口发送或接纳中断源 MCS-51的中断系统中断标志 每一个中断源都有相应的中断标志位; 某一个中断源恳求中断

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论