单片机原理与应的项目电子闹钟课件

上传人:人*** 文档编号:571146265 上传时间:2024-08-08 格式:PPT 页数:111 大小:1.79MB
返回 下载 相关 举报
单片机原理与应的项目电子闹钟课件_第1页
第1页 / 共111页
单片机原理与应的项目电子闹钟课件_第2页
第2页 / 共111页
单片机原理与应的项目电子闹钟课件_第3页
第3页 / 共111页
单片机原理与应的项目电子闹钟课件_第4页
第4页 / 共111页
单片机原理与应的项目电子闹钟课件_第5页
第5页 / 共111页
点击查看更多>>
资源描述

《单片机原理与应的项目电子闹钟课件》由会员分享,可在线阅读,更多相关《单片机原理与应的项目电子闹钟课件(111页珍藏版)》请在金锄头文库上搜索。

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

2、、问题分析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口,送0x3f,显示0,送0x06,显示1 送0x5b,显示2,送0x4f,显示3 送0x66,显示4,送0x6d,显示5 送0x7d,显示6,送0x07,显示7 送0x7f, 显示8,送0x6f,显示9 N位LED显示器基础知识-数码显示 四位静态LED显示器电路静态数码显示每一个数

3、码管的显示笔画都要占用每一个数码管的显示笔画都要占用单独单独的具有锁存功能的的具有锁存功能的I/O接口。即需接口。即需N8个个I/O控制线控制线静态显示数码管相应笔段一直处于点亮状态,静态显示数码管相应笔段一直处于点亮状态,因此功耗大,而且占用硬件资源多,几乎只因此功耗大,而且占用硬件资源多,几乎只能用在显示位数极少的场合。能用在显示位数极少的场合。 优点:优点:LED亮度高,可用在室外显示场合。亮度高,可用在室外显示场合。程序工作量小。程序工作量小。 例如:例如:静态显示技术静态显示技术静态显示技术静态显示技术显示显示 60111 1101P2=0X7DDPabcdefg1 在在proteu

4、s上画出如下电上画出如下电路图路图. 2 在在keil中编制程序中编制程序,要求要求能显示学号最后能显示学号最后4位数位数.3 运行程序运行程序,观察电路中数观察电路中数码管显示码管显示.#include#define uchar unsigned charuchar xdata *Led_D; void main() Led_D=0x0800;*Led_D=0x6f; /9 Led_D=0x0900;*Led_D=0x5b; /2 Led_D=0x0a00;*Led_D=0x06; /1 Led_D=0x0b00;*Led_D=0x3f; /0 while(1); 八位LED动态显示器电路

5、动态数码显示所有数码管的所有数码管的8个笔画段个笔画段同名端连同名端连在一起,在一起,公共端公共端各自独立。即需各自独立。即需N+8个个I/O控制线控制线动态显示是多只数码管共享段码线,通动态显示是多只数码管共享段码线,通过位选线(公共端)逐位逐位过位选线(公共端)逐位逐位分时分时进行进行扫描显示(任时刻只有扫描显示(任时刻只有一只一只点亮)。其点亮)。其优点是占用硬件资源少,功耗小。软件优点是占用硬件资源少,功耗小。软件工作量大工作量大. 必须注意:扫描周期必须控制在视必须注意:扫描周期必须控制在视觉停顿时间内,一般在觉停顿时间内,一般在20ms以内,否则以内,否则会出现闪烁或跳动现象。会出

6、现闪烁或跳动现象。最为广泛的一种显示方式。最为广泛的一种显示方式。动态显示技术动态显示技术首先扫描最后扫描动态显示技术动态显示技术1 在在proteus上画出如下电路图上画出如下电路图. 2 在在keil中编制程序中编制程序,要求能显示学号要求能显示学号最后最后8位数位数.3 运行程序运行程序,观察电路中数码管显示观察电路中数码管显示.(注意注意:换位前先清段码换位前先清段码)#include#define uchar unsigned charvoid delay()uchar i;for(i=0;i100;i+);void main()while(1) P2=0Xfe;P0=0X7f;de

7、lay();/8 P2=0Xfd;P0=0X06;delay(); /1 P2=0Xfb;P0=0X5b;delay();/2 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

8、 unsigned charcode uchar display =0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f,0x00;code uchar Tab=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;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

9、2; delay();/2 P2= Tab4; P0= display 3; delay();/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;P

10、0= display 10;使用数组使用数组1 在在proteus上画出如下电路图上画出如下电路图. 2 在在keil中编制程序中编制程序,要求能显示学要求能显示学号最后号最后8位数位数.3 运行程序运行程序,观察电路中数码管显示观察电路中数码管显示.(注意注意:换位前先清段码换位前先清段码)#include#define uchar unsigned charuchar xdata *Led_D=0xc000; uchar xdata *Led_W=0xc800;code uchar display=0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07

11、,0x7f, 0x6f,0x0;code uchar Tab=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;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=

12、display 4; led5=display 5; led6=display 6; led7=display 7; while(1) display(); 8个共阴数码管1 根据根据 如上电路图如上电路图. 2 在在keil中编制程序中编制程序,要求显示时分秒要求显示时分秒.3 运行程序运行程序,观察电路中数码管显示观察电路中数码管显示.根据实验电路图根据实验电路图. 在在keil中编制程序中编制程序,要求能显示学号要求能显示学号.辅助任务一 设计两位数的十进制减法显示电路原理图并编制程序.二 设计电子时钟显示(时-分-秒)电路原理图并编制程序.三 设计用数码显示8只LED循环次数,显示的范

13、围为0-99.减法运算显示#include#define uchar unsigned charuchar xdata *Led_D=0xc000; uchar xdata *Led_W=0xc800;code uchar display_code=0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f,0x40,0x48;code uchar Tab=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;bit bzie=1; uchar led8; /数组长度要给出数组长度要给出void delay()u

14、char 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=0xff;led2=display_code10; led5=display_code11;while(1) if(bzie) led0=display_codeX/10; led1=display_codeX%10;led3=display_codeY/10; l

15、ed4=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 XBYTE0xc000#define Led_W XBYTE0xc800uchar code display_code=0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f,0x40,0x48;uchar code Tab=0x7

16、f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;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=0xff;led2=display_code10; led5=display_code11;while(1) if(bzie) le

17、d0=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=0xc000; uchar xdata *Led_W=0xc800;code uchar display_code=0x3f, 0x06, 0x5b, 0x4f, 0

18、x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f,0x40,0x48;code uchar Tab=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;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; *Led_D=ledi; i+;void main()unsigned int X=98,Y=5

19、6,Z; Z=X-Y; TH0=(256*256 -1*f/12000)/256; TL0= (256*256 -1*f/12000)%256; /1ms 时间间隔不能长i=0; IE=0x82; TMOD=0x01; TCON=0x10; 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=di

20、splay_codeZ%10; bzie=0; X-Y=Z 显示显示时钟显示#include#define uchar unsigned charuchar xdata *Led_D=0xc000; uchar xdata *Led_W=0xc800;code uchar display_code=0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f,0x40;code uchar Tab=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;bit bzie=1; unsigned int x=0; uc

21、har 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; led3=display_codemit/10; led4=display_codemit%10; led6=display_codesec/10; led

22、7=display_codesec%10; bzie=0; display(); 时分秒时分秒 显示显示#include#include #define uchar unsigned char#define Led_D XBYTE0xc000#define Led_W XBYTE0xc800uchar code display_code=0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f,0x40,0x48;uchar code Tab=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;uchar l

23、ed8; 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_codehour/10; led1=display_codehour%10; led3=display_codemit/10; led4=display_codemit%10; led6=display_code

24、sec/10; led7=display_codesec%10; bzie=0; display(); 时分秒显示时分秒显示#include#define uchar unsigned charuchar xdata *Led_D=0xc000; uchar xdata *Led_W=0xc800;code uchar display_code=0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f,0x40,0x48;code uchar Tab=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;bit

25、 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=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 -

26、1*f/12000)%256; /1ms,时间间隔不能长i=0; IE=0x82; TMOD=0x01; TCON=0x10; 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_code

27、sec/10; led7=display_codesec%10; bzie=0; 时分秒显示时分秒显示任务一任务一:根据实验电路图根据实验电路图. 在在keil中编制程序中编制程序,实现实现数码管显示数码管显示LED循环循环点亮的次数点亮的次数.#include#define uchar unsigned charcode uchar display_code=0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f,0x40,0x48;code uchar Tab=0x01,0x02;unsigned int i; uchar led

28、2; void display() interrupt 1 TH0=0xf0;TL0=0xa0; if (i=2) i=0; P0=0; P2=Tabi; P0=ledi; i+;void main()uchar n; unsigned int m,j,k; TH0 =0xf0;TL0=0xa0;i=0; IE=0x82; TMOD=0x01; TCON=0x10; while(1) for(j=0;j=99;j+) n=0x01; for(m=0;m8;m+) P3=n; n=1; for(k=0;k10000;k+); led0=display_codej/10; led1=display

29、_codej%10; xdata unsigned char OUTBIT _at_ 0xc800; / 位控制口位控制口xdata unsigned char OUTSEG _at_ 0xc000; / 段控制口段控制口unsigned char LEDBuf18,LEDBuf28; / 显示缓冲显示缓冲 LEDBuf1为原码为原码, LEDBuf2中为段码中为段码 code unsigned char LEDW8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; code unsigned char LEDMAP = 0x3f, 0x06, 0x5b, 0x

30、4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71;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 = 0xff; / 关所有八段管关所有八段管 Pos = LEDWi; OUTSEG = LEDBuf2i; OUTBIT = Pos

31、; / 显示一位八段管显示一位八段管 Delay(1); / 显示下一位显示下一位 OUTBIT = 0xff; / 关所有八段管关所有八段管void main() unsigned char i = 0, j; while(1) LEDBuf20 = LEDMAPLEDBuf10 & 0x0f; LEDBuf21 = LEDMAP LEDBuf11 & 0x0f;LEDBuf22 = LEDMAPLEDBuf12 & 0x0f; LEDBuf23 = LEDMAPLEDBuf13 & 0x0f;LEDBuf24 = LEDMAPLEDBuf14 & 0x0f; LEDBuf25 = LEDM

32、APLEDBuf15 & 0x0f;LEDBuf26 = LEDMAPLEDBuf16 & 0x0f; LEDBuf27 = LEDMAPLEDBuf17 & 0x0f;DisplayLED(); 八位数码显示参考程序八位数码显示参考程序LED点阵点阵结构结构新任务新任务:根据实验电路图根据实验电路图. 在在keil中中编制程序编制程序,实现实现LED点阵显点阵显示,循环显示姓名字母示,循环显示姓名字母.#include #define uchar unsigned char sbit key1=P10;sbit key2=P12;sbit key3=P14;sbit key4=P16;uch

33、ar nkey1=0,nkey2=0,nkey3=0,nkey4=0,nkey;code uchar dis =0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;code uchar wie =0x01,0x02;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

34、 (key4=0) nkey4+;nkey=nkey4; led1=nkey/10;led0=nkey%10;void main() uchar ii; IE=0X81;IP=0X0;TCON=0X01; while(1) for(ii=0;ii2;ii+) P0=0x00; 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 kl

35、ed3=P36;sbit kled4=P37;uchar nkey1=0,nkey2=0,nkey3=0,nkey4=0,nkey;code uchar dis =0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;code uchar wie =0x01,0x02;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

36、=0;if (key2=0) nkey2+;nkey=nkey2; kled2=0;if (key3=0) 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=0x00; P2=wieii; P0=disledii;delay(); 1 在在proteus上画出如下电路图上画出如下电路图. 2 在在keil中

37、编制程序中编制程序,要求能对应要求能对应LED显示按键按下的次数值显示按键按下的次数值(累计累计).Key1Key2key3123#include #define uchar unsigned charuchar displayD2; / 显示段码缓冲单元uchar code displayW=0x01,0x02; /显示位码uchar code displayB=0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f;sbit led1=P10; sbit led2=P11; sbit led3=P12; / LED显示uchar

38、i=0, key=0;uchar NUMW=0,NUMC=0,NUMG=0; / 计数 初值 void disW() interrupt 0 using 1 /led1 if(+NUMW)=100) NUMW=0; key=0x01; void disG() interrupt 2 using 1 /led2 if(+NUMC)=100) NUMC=0; key=0x02; void disC() interrupt 3 using 1 /led3 if(+NUMG)=100) NUMG=0;TH1=0xff;TL1=0xff; key=0x03; void displlay() interr

39、upt 1 using 2 /显示程序 TH0=(65536-10*11059/12)/256; /10MS TL0=(65536-10*11059/12)%256; P0=0x00; P2=displayWi; P0=displayDi; if(+i=2) i=0; void main()IE=0x8f;TMOD=0x51;TH1=0xff;TL1=0xff; IP=0x02; TH0=(65536-10*11059/12)/256; /10ms TL0=(65536-10*11059/12)%256; TCON=0x55; /下降沿触发 0x50 电平触发 led1=0;led2=0;le

40、d3=0; P2=0x0ff;displayD0=0x3f;displayD1=0x3f;while(1) switch(key) case 0x01: displayD1=displayBNUMW/10;displayD0=displayBNUMW%10; led1=1;led2=0;led3=0;break;case 0x02:displayD1=displayBNUMC/10;displayD0=displayBNUMC%10; led1=0; led2=1;led3=0;break;case 0x03:displayD1=displayBNUMG/10;displayD0=displa

41、yBNUMG%10; led1=0;led2=0; led3=1;break;default:break; 数组概念数组的本质则是一系列的数据元素(变量)。数组的本质则是一系列的数据元素(变量)。该数组中若干个元素必须是同一个类的。对象数组的定义、赋值和引用和普通数组相同。1. 数组的定义数组的定义数组定义格式如下:.其中,指出该数组元素是属于该类的对象,方括号内的给出某一维的元素个数。一维对象数组只有一个方括号,二维对象数组要有两个方括号,等等,例如:data dates7;表明dates是一维对象数组名,该数组有7个元素,每个元素都是类data的对象。2. 对象数组的赋值对象数组的赋值对象

42、数组能够被赋初值,也能在程序中被赋值(除 code类)。 例如 code add3=0x3f,0x06,0x4f;数组应用(查表程序)code unsigned char LEDMAP = 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71;unsigned char i; unsigned char LED; .LED = LEDMAPi;/i取值0-15或16进制0-F键盘接口技术1、键盘消抖、键盘消抖2、键盘形式、键盘形式软件去抖动软件去抖动前沿抖动稳

43、定后沿抖动 按键抖动信号波形键盘消抖键盘消抖即检测出键闭合后执行一个即检测出键闭合后执行一个延时程序延时程序,产生产生5ms10ms的延时的延时,让前沿抖动消失后让前沿抖动消失后再一次检测键的状态再一次检测键的状态,如果如果仍保持闭合状态电平仍保持闭合状态电平,则确则确认为真正有键按下。认为真正有键按下。键盘消抖键盘消抖硬件消抖硬件消抖:如RC滤波电路键盘消抖键盘消抖硬件消抖硬件消抖:如双稳态电路:RS触发器为常用的硬件消抖电路。CDl键盘的形式有以下两种:独立式键盘行列式键盘 2、键盘的形式独立式键盘结构独立式键盘结构每一个按键的电路是独立的,占用每一个按键的电路是独立的,占用一条一条I/O

44、数据线数据线1 在在proteus上画出如下电路图上画出如下电路图. 2 在在keil中编制程序中编制程序,要求能显示按键数值要求能显示按键数值.3 运行程序运行程序,观察电路中数码管显示观察电路中数码管显示. if(P1=P1|0x55)!=0xff) delay(); if(P1=P1|0x55)=0xfd) *pled=0x06; if(P1=P1|0x55)=0xf7) *pled=0x5b; if(P1=P1|0x55)=0xdf) *pled=0x4f; if(P1=P1|0x55)=0x7f) *pled=0x66; 1 在在proteus上画出如下电路图上画出如下电路图. 2

45、在在keil中编制程序中编制程序,要求能显示按键数要求能显示按键数值值.3 运行程序运行程序,观察电路中数码管显示观察电路中数码管显示.行列式行列式键盘结构键盘结构每一个按键的电路是由行列组成,每一个按键占用每一个按键的电路是由行列组成,每一个按键占用两条两条I/O数据线。数据线。当键盘按下时,相应的行列线呈现当键盘按下时,相应的行列线呈现短路短路。求键的位置(行、列)若若D1=0,则,则D5=0假定假定 S6 按下按下求键的位置(行、列)假定假定 S7 按下按下若若D1=0,则,则D5=?只有只有D2=0,则,则D5=0扫描原理:首先确定是否有键闭合(消抖,再判)然后逐一扫描以进一步确定是哪

46、一键闭合 (用编码方式,找出唯一) 以44键盘为例: (1 1)判断是否有键按下:使列线)判断是否有键按下:使列线D0D0D3D3都输都输出出0 0,检测行线,检测行线D4D4D7D7的电平。如果的电平。如果D4D4D7D7上上的电平全为高,则表示没有键被按下。如果的电平全为高,则表示没有键被按下。如果D4D4D7D7上的电平不全为高,则表示有键被按下。上的电平不全为高,则表示有键被按下。 (2 2)扫面按键键值:如果有键闭合,进行)扫面按键键值:如果有键闭合,进行逐列扫描,找出闭合键的键号。逐列扫描,找出闭合键的键号。行列式键盘的工作原理unsigned char I; 全局变量全局变量vo

47、id Scankey() unsigned char N, m, L;P1=P1&0Xf0; /列全送低电平列全送低电平 delay(1); /等低电平稳定等低电平稳定 while( ( P1 | 0X0f) != 0Xff) delay(2); /有按键,延时有按键,延时 if ( ( P1 |0X0f) != 0Xff) /再判,有按键再判,有按键 L=0X01; /第一列第一列 for(m=0;m4;m+) /共四列共四列 P1 =L; /送送m列零列零 delay(1); if ( (N= P1&0Xf0 ) !=0Xf0) I = N | L; return; /返回行列信返回行列信

48、息息 L0;x-) for(y=110;y0;y-);void scanner() unchar col,row,scan,keyin,kcode; scan=0xef; for(col=0;col4;col+) P3=scan; P2=disp; keyin=rowkey(); if(keyin!=0) for(row=0;row4;row+) if(keyin=(0x01row) /判断列号判断列号 kcode=row+4*col;/求出具体的按键号求出具体的按键号 disp=tablekcode; P2=disp; / 显示显示 break; while(rowkey()!=0); de

49、lay(10); scan=(scan1)|0x01;/这个扫描信号用来判断行号这个扫描信号用来判断行号 void main() while(1) scanner(); 左边程序为行列键盘、数码显示程序。要求: 分析程序功能,画出原理图,调试,并修正程序。1 在在proteus上画出如下电路图上画出如下电路图. 2 在在keil中编制程序中编制程序,要求能显示按键数值要求能显示按键数值.3 运行程序运行程序,观察电路中数码管显示观察电路中数码管显示.提示提示逐列扫描参考:逐列扫描参考:P1_4=0;P1_5=1;P1_6=1;P1_7=1; if(P1_0=0) P0=0X3F ; /KEY0

50、 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(P1_2

51、=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 uMCSMCS系列单片机:以系列单片机:以8XC518XC51表示,表示,X X不同片内不同片内ROMROM类型类型不同。不同。 注:注:X=0X=0,类型为:,类型为:ROM ROM X=7 X=7,类型为,类型为:EPROM (:EPROM (

52、电写入电写入, ,紫外线擦除紫外线擦除) ) X=9 X=9,类型为:,类型为:FLSAH ROM(FLSAH ROM(电改写电改写) ) 支持支持ISP(InISP(In System Programming) System Programming)在系统在系统/ /线中编程线中编程 IAP(InIAP(In Application Programming) Application Programming)应用中编程应用中编程u5151子系列和子系列和5252子系列子系列 “ “51”51”是基本,是基本,“52”52”是增强:是增强:单片机芯片单片机芯片u51子系列和子系列和52子系列单片

53、机的区别子系列单片机的区别l片内片内ROM:4K增加到增加到8Kl片内片内RAM:128B增加到增加到256Bl定时器:定时器:2个增加到个增加到3个个l中断源:中断源:5个增加到个增加到6个个MCS-51单片机结构内部数内部数据区据区内部数据存储器内部数据存储器物理上分为两大区域:物理上分为两大区域:00H 7FH即即128B内内RAM区区 80H FFH即即SFR区区(idata sbit bit)。R0、R1、R2、R3、R4、R5、R6、R7(using 03)即可位寻址,又可字节寻址即可位寻址,又可字节寻址(bit sbit bdata data idata)数据缓冲区、堆栈区、工作

54、数据缓冲区、堆栈区、工作单元单元(data idata) bit 与sbit区别:前者不能定义绝对地址。如:sbit T1_1=P11;MCS-51单片机的外部扩展性能MCS-51单片机的片外总线结构单片机的片外总线结构 MCS-51系系列列单单片片机机片片外外引引脚脚可可以以构构成成三三总线结构:总线结构: 地址总线(地址总线(AB) 数据总线(数据总线(DB) 控制总线(控制总线(CB) 所所有有外外部部芯芯片片都都通通过过这这三三组组总总线线进进行行扩扩展。展。三总线的概念三总线的概念: :地址总线地址总线AB,P0口提供(口提供(A7A0););P2口提供(口提供(A15A8),共),

55、共16位。位。数据总线数据总线DB,P0口提供(口提供(D7D0),共),共8位。位。控制总线控制总线CB,ALE、等。等。单片机总线引脚结构单片机总线引脚结构 日常中断的例子日常中断的例子返回 你正在专心看书,突你正在专心看书,突然电话铃响,于是你然电话铃响,于是你记下记下正在看的书的页数,去接正在看的书的页数,去接电话,接完电话后再回来电话,接完电话后再回来接着接着看书。看书。时间时间 计算机中的中断概念计算机中的中断概念返回定义定义:中断中断是指由于某种是指由于某种随机随机事件事件的发生,计算机的发生,计算机暂停暂停现行程序的运现行程序的运行,转去执行另一程序行,转去执行另一程序(处理发

56、生的处理发生的事件事件),处理完毕后又自动返回原来,处理完毕后又自动返回原来程序暂停的位置程序暂停的位置继续继续运行。运行。将能引起中断的将能引起中断的事件事件称为称为中断源中断源。CPU现行运行的现行运行的程序程序称为称为主程序主程序。处理随机事件的处理随机事件的程序程序称为称为中断服务中断服务子程序子程序。 中断技术的优点中断技术的优点提高工作效率提高工作效率 CPUCPU可以同多个外设可以同多个外设“同时同时”工作工作实时处理实时处理 CPUCPU及时处理随机事件及时处理随机事件( (智能技术智能技术) )故障处理故障处理 电源掉电、存储出错、运算溢出电源掉电、存储出错、运算溢出 中断处

57、理过程 中断处理过程分为三个阶段:中断处理过程分为三个阶段:中断响应、中断中断响应、中断处理和中断返回。处理和中断返回。v中断响应中断响应v中断处理中断处理(又称中断服务又称中断服务)v中断返回中断返回 v 中断请求撤除 中断响应中断返回MCS-51中断系统中断源中断源中断标志中断标志中断允许中断允许中断优先级中断优先级中断寄存器中断寄存器( (主要为主要为5 5个个学习重点学习重点) ) MCS-51MCS-51的中断系统的中断系统中断源中断源8051单片机有单片机有5个中断请求源:个中断请求源:单片机单片机INT0或 外部输入中断源外部输入中断源INT0(P3.2)INT1或 外部输入中断

58、源外部输入中断源INT1(P3.3)T0 定时定时/记数器记数器T0的溢出的溢出T1 定时定时/记数器记数器T1的溢出的溢出串行口 片内串行口发送或接收中断源片内串行口发送或接收中断源 MCS-51MCS-51的中断系统的中断系统中断标志中断标志 每一个中断源都有相应的中断标志位;每一个中断源都有相应的中断标志位;某一个中断源申请中断,相应中断标志位某一个中断源申请中断,相应中断标志位置置1。特殊功能寄存器(SFR)IE 中断允许中断允许SFRIP 中断优先中断优先SFRTCON 中断控制中断控制SFRTMOD 定时器方式定时器方式SFRSCON 串行口控制串行口控制SFR(SBUF 串行口缓

59、冲串行口缓冲SFR )单片机单片机中断响中断响应条件条件 中断源有中断请求;中断源有中断请求; 此中断源的中断允许位为此中断源的中断允许位为1; CPU开中断(即开中断(即EA=1)。)。以上三条同时满足时,以上三条同时满足时,CPU才有可能响才有可能响应中断应中断。MCS-51MCS-51的中断系统的中断系统中断寄存器中断寄存器 IE EA ESET1EX1 ET0EX0IE寄存器寄存器中断允许寄存器中断允许寄存器EA中断允许总控位中断允许总控位ES串行通讯中断允许串行通讯中断允许ET1、ET0定时定时/记数记数1、0溢出中断允许溢出中断允许EX1、EX0外部中断外部中断1、0允许允许765

60、43210SFR MCS-51MCS-51的中断系统的中断系统中断允许中断允许INT0INT1T0T1串口IE0TF0IE1TF1TIRI中断源中断源中断标志位中断标志位 EA总中断允许位,总中断允许位,EA=1开放所有中断,开放所有中断,EA=0,禁止所有中断;禁止所有中断;某一个中断源还有相应的中断允许位,某一个中断源还有相应的中断允许位,1允许相应中断源的中断,允许相应中断源的中断,0禁禁止相应中断源的中断。止相应中断源的中断。中断允许中断允许IEESET0EX0EX1ET1EA 51单片机有两个中断优先级单片机有两个中断优先级高级和低级高级和低级专用寄存器专用寄存器IP为中断优先级寄存

61、器,用户可用软件设定为中断优先级寄存器,用户可用软件设定相应位为相应位为1,对应的中断源被设置为,对应的中断源被设置为高优先级高优先级,相应位为,相应位为0,对应的中断源被设置为低优先级,对应的中断源被设置为低优先级系统复位时,均为低优先级系统复位时,均为低优先级 PSPT1PX1PT0PX0MCS-51MCS-51的中断系统的中断系统中断寄存器中断寄存器 IP 76543210IP寄存器寄存器中断优先级寄存器中断优先级寄存器SFR MCS-51MCS-51的中断系统的中断系统中断优先级中断优先级INT0INT1T0T1串口中断源中断源单片机中有两个中断优先级,即单片机中有两个中断优先级,即高

62、高优先级中断和优先级中断和低低优先级中断,前者优优先级中断,前者优先权高于后者(在程序中设置,先权高于后者(在程序中设置,IPIP相应位相应位=1=1,为高优先级,为高优先级);); 同一优先级别的中断源按照自然优先级顺序确定优先级别(硬件形成,同一优先级别的中断源按照自然优先级顺序确定优先级别(硬件形成,无法改变)。无法改变)。自然优先级自然优先级高低优先控制优先控制IPPSPT0PX0PX1PT1 同一优先级同一优先级(IP)中的中断申请不止一个时,则中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的

63、自然优先级形成,其排队,由中断系统硬件确定的自然优先级形成,其排列如所示:排列如所示:MCS-51MCS-51的中断系统的中断系统中断寄存器中断寄存器 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCON T1溢出中断标志溢出中断标志(TCON.7): T1启动计数启动计数(TR1=1)后,计满溢出由硬件置位后,计满溢出由硬件置位TF1=1,向,向CPU请求中断,此标志一直保持到请求中断,此标志一直保持到CPU响应中断后,响应中断后,才由硬件自动清才由硬件自动清0。也可用软件查询该。也可用软件查询该标志,并由软件清标志,并由软件清0。(同样同样T0在在TR0=1,TF0的状态

64、处理的状态处理)76543210TCON寄存器寄存器T0和和T1控制寄存器控制寄存器SFR TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCON外部中断外部中断INT1中断标中断标志位志位(TCON.3): IE11,外部中断,外部中断INT1 向向CPU申请中断申请中断外部中断外部中断INT1触发方触发方式控制位式控制位(TCON.2):IT1=0,电平触发方电平触发方式式IT1=1,下降沿触发下降沿触发方式方式76543210TCONTCON寄存器寄存器T0T0和和T1T1控制寄存器控制寄存器(同理同理 外部中断外部中断INT0)D7D6D5D4D3D2D1D0GATA

65、M1M0GATAM1M0T1方式字段方式字段T0方式字段方式字段GATE门控位。门控位。GATE=0启动不受启动不受/INT0或或/INT1的控制;的控制;GATE=1启动受启动受/INT0或或/INT1的控制。的控制。C/T外部计数器外部计数器/定时器方式选择位定时器方式选择位C/T=0定时方式;定时方式;C/T=1计数方式计数方式。M1M0工作模式选择位(编程可决定四种工作模式)工作模式选择位(编程可决定四种工作模式)。SFR(1)定时)定时/计数器的工作方式计数器的工作方式M1M0工作模式选择位(编程可决定四种工作模式)工作模式选择位(编程可决定四种工作模式)0013位定时位定时/计数器

66、计数器模式模式00116位定时位定时/计数器计数器模式模式1108位定时位定时/计数器(自动重装初值)计数器(自动重装初值)模式模式2211T08位定时位定时/计数计数模式模式33T1停止工作停止工作4串行口控制寄存器SCONSM0、SM1:控制串行口的工作方式。SM2:允许方式2和方式3进行多机通信控制位。REN:允许串行接收控制位。REN=1,允许接收。TB8:是工作在方式2和方式3时要发送的第9位数据,根据需要由软件置位和复位。RB8:是工作在方式2和方式3时接收到的第9位数据。TI:发送中断标志位。必须由软件清零。RI:接收中断标志位。必须由软件清零。返回 TI(SCON.1)串行发送

67、中断标志。串行发送中断标志。RI(SCON.0)串行接收中断标志。串行接收中断标志。 TI RIMCS-51MCS-51的中断系统的中断系统中断寄存器中断寄存器SCON76543210SCON寄存器寄存器串行口控制寄存器串行口控制寄存器SFR返回 TI(SCON.1)串行发送中断标志。串行发送中断标志。RI(SCON.0)串行接收中断标志。串行接收中断标志。 TI RIMCS-51MCS-51的中断系统的中断系统中断寄存器中断寄存器SCON76543210SCON寄存器寄存器串行口控制寄存器串行口控制寄存器SFR中断请求的撤除中断请求的撤除 CPU响应某中断请求后,在中断返回前,应该撤除该中断

68、响应某中断请求后,在中断返回前,应该撤除该中断请求,否则会引起另一次中断。请求,否则会引起另一次中断。 定时器定时器0或或1溢出:溢出:CPU在响应中断后,在响应中断后,硬件硬件清除了有关的中清除了有关的中断请求标志断请求标志TFO或或TF1,即中断请求是自动撤除的。,即中断请求是自动撤除的。 外部中断:外部中断:CPU在响应中断后,也是用在响应中断后,也是用硬件硬件自动清除有关的自动清除有关的中断请求标志中断请求标志IE0或或IE1。 串行口中断:串行口中断:CPU响应中断后,没有用硬件清除响应中断后,没有用硬件清除T1、R1,故这些中断不能自动撤除,而要靠故这些中断不能自动撤除,而要靠软件

69、软件来清除相应的标志。来清除相应的标志。C51中断程序设计的完整语法如下:void void 函数名函数名 interrupt n using m interrupt n using m m、n 为正整数,不允许使用表达式。n取值范围05,对应该中断源的编号。通常对普通8051系列单片机来说,外部中断0、定时器0、外部中断1、定时器1、串口的中断源编号依次为0、1、2、3、4。m取值范围03。 例如: void serial_service interrupt 4 using 2 ; Keil C51编译器用特定的编译器指令分配寄存器组。当前工作寄存器由编译器用特定的编译器指令分配寄存器组。当

70、前工作寄存器由using指定,指定,“using”后的变量为一个后的变量为一个03的整数。的整数。“using”只允许用于中断函数,它在中断函只允许用于中断函数,它在中断函数入口处将当前寄存器组保留,并在中断程序中使用指定的寄存器组,在函数退出前数入口处将当前寄存器组保留,并在中断程序中使用指定的寄存器组,在函数退出前恢复原寄存器组。恢复原寄存器组。 中断举例中断举例程序中断举例中断举例程序#include #define uchar unsigned char sbit key1=P10;sbit key2=P12;sbit key3=P14;sbit key4=P16;uchar nkey

71、1=0,nkey2=0,nkey3=0,nkey4=0,nkey;code uchar dis =0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;code uchar wie =0x01,0x02;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=

72、0) nkey4+;nkey=nkey4; led1=nkey/10;led0=nkey%10;void main() uchar ii; IE=0X81;IP=0X0;TCON=0X01; while(1) for(ii=0;ii2;ii+) P0=0x00; 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

73、;sbit kled4=P37;uchar nkey1=0,nkey2=0,nkey3=0,nkey4=0,nkey;code uchar dis =0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;code uchar wie =0x01,0x02;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 (

74、key2=0) nkey2+;nkey=nkey2; kled2=0;if (key3=0) 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=0x00; P2=wieii; P0=disledii;delay(); C51中断服务程序的注意事项:1)为提高中断响应的实时性,中断服务程序应尽量简短,并避免使

75、用复杂变量类型及复杂算术运算。通常在中断服务程序中使用一些标志,由主程序或相应背景程序根据对应的标志作相应的处理。 2)外部中断0、1及定时器0、1的中断申请标志在CPU响应中断后会自动清0,但串行口中断标志TI/RI及定时器2的中断申请标志TF2不会自动清0,必须在中断服务程序中用软件清0,否则会立即产生重复中断,程序会陷入死循环。对于串口中断,通常要判别是RI或TI中断。1 工作原理 计数器存储单元THx、TLx 可预置的加法存储器 溢出 TCON中的TFx,申请中断2 工作模式 13、16、8位 -TMOD中M1M03 工作方式 计管脚脉冲TMOD中C/T=1 (TLx加) 计(晶振振荡

76、数/12)TMOD中C/T=0 (TLx加) 定时延时概念4 编程定时计数器溢出值=预置值+计数值延时时间=计数值x T x 12=计数值x 12/f时间(计1 )=T X12预置值(THx,TLx)=溢出值-(延时时间 x f /12)怎样编制计数程序?怎样编制计数程序?首先必须对定时计数器进行初始化,然后再开启定时或首先必须对定时计数器进行初始化,然后再开启定时或计数。简单的总结一下,定时计数器的初始化包括以下内计数。简单的总结一下,定时计数器的初始化包括以下内容。容。(1)确定工作方式)确定工作方式对对TMOD赋值;赋值;如:如:TMOD=0x01; /定时器定时器0方式方式1(2)预置

77、定时计数器中计数的初值)预置定时计数器中计数的初值直接写入直接写入TH和和TL;如:如:TH0=0xf8; TL0=0x30; /装入时间常数装入时间常数(3)根据需要开放定时器)根据需要开放定时器/计数器的中断计数器的中断对对IE位赋值;位赋值;如:如: IE=0x82; /开启定时器开启定时器0中断中断(4)启动定时器)启动定时器/计数器;计数器;如:如: TR0=1; /启动定时器启动定时器T0 ,或,或TCON=0X10思考:若同时启动 定时器 T0、T1,如何设置TCON= 0X50定时器定时器/ /计数器的控制主要是通过以下几计数器的控制主要是通过以下几个寄存器实现的:个寄存器实现

78、的:TCON-TCON-定时器定时器/ /计数器控制寄存器计数器控制寄存器TMOD-TMOD-定时器定时器/ /计数器工作方式控制寄存器计数器工作方式控制寄存器IE -IE -中断允许控制寄存器中断允许控制寄存器* *定时定时/ /计数计数计内部时钟计内部时钟( (晶振的频率晶振的频率/12)/12) / - / -计管脚的脉冲计管脚的脉冲 定时器定时器/ /计数器的控制计数器的控制在计数工作方式下,计数器的计数值范围是:在计数工作方式下,计数器的计数值范围是:18192(2的的13方)方)256*32=8192当为定时工作方式时,定时时间的计算公式为:当为定时工作方式时,定时时间的计算公式为

79、:(8192-计数初值)计数初值)晶振周期晶振周期12或或(8192-计数初值)计数初值)机器周期机器周期其时间单位与晶振周期或机器周期相同。其时间单位与晶振周期或机器周期相同。如果单片机的晶振选为如果单片机的晶振选为6.000MHz,则最小定时时间为:,则最小定时时间为:81928191210-6=210-6(s)=2(us)最长定时时间为:最长定时时间为:(81920)210-6=1638410-6(s)=16,384(us)。模式模式0(溢出值-计数初值)X晶振周期X12=定时时间或溢出值-定时时间X晶振频率/12=计数初值 思考:思考: 12M晶振最长、最短时间?晶振最长、最短时间?

80、方式方式1 方式方式1的计数位数是的计数位数是16位,由位,由TL0作为低作为低8位、位、TH0作为高作为高8位,组成了位,组成了16位加位加1计数器计数器 。计数个数与计数初值的关系为:计数个数与计数初值的关系为: 计数值计数值 = 溢出值溢出值 - 初值初值在在工作方式工作方式1下,计数器的计数值范围是:下,计数器的计数值范围是:165536(2的的16方)方)256*256=65536当为定时工作方式当为定时工作方式1时,定时延时时间的计算公式为:时,定时延时时间的计算公式为:(65536计数初值)计数初值)晶振周期晶振周期12或或(65536计数初值)计数初值)机器周期机器周期其时间单

81、位与晶振周期或机器周期相同。其时间单位与晶振周期或机器周期相同。如果单片机的晶振选为如果单片机的晶振选为6.000MHz,则最小定时时间为:,则最小定时时间为:6553665535210-6=210-6(s)=2(us)最长定时时间为:最长定时时间为:(655360)210-6=13107210-6(s)=131072(us)。(溢出值-计数初值)X晶振周期X12=定时时间或溢出值-定时时间X晶振频率/12=计数初值方式方式2与方式与方式0、1的区别:的区别:工作方式工作方式0和工作方式和工作方式1的最大特点就是计数溢出后,计的最大特点就是计数溢出后,计数器为全数器为全0,因而循环定时或循环计

82、数应用时就存在反复设,因而循环定时或循环计数应用时就存在反复设置初值的问题,这给程序设计带来许多不便,同时也会影置初值的问题,这给程序设计带来许多不便,同时也会影响计时精度。响计时精度。工作方式工作方式2就具有就具有自动重装载自动重装载功能,即自动加载计数初值,功能,即自动加载计数初值,所以也有的文献称之为自动重加载工作方式。在这种工作所以也有的文献称之为自动重加载工作方式。在这种工作方式中,方式中,16位计数器分为两部分,即以位计数器分为两部分,即以TL0为计数器,以为计数器,以TH0作为预置寄存器,初始化时把计数初值分别加载至作为预置寄存器,初始化时把计数初值分别加载至TL0和和TH0中,

83、当计数溢出时,不再象方式中,当计数溢出时,不再象方式0和方式和方式1那样需要那样需要“人工干预人工干预”,由软件重新赋值,而是由预置寄存器,由软件重新赋值,而是由预置寄存器TH以以硬件方法自动给计数器硬件方法自动给计数器TL0重新加载。重新加载。方式方式2在串口通讯时,常用作波特率发生器。在串口通讯时,常用作波特率发生器。如果定时如果定时/计数器计数器0工作于工作于工作方式工作方式3,那么定时,那么定时/计数器计数器1的工作方式就因为自己的一些控制位已被定的工作方式就因为自己的一些控制位已被定时时/计数器计数器0借用,只能工作在方式借用,只能工作在方式0、方式、方式1或方式或方式2下下.例例要

84、求从P1.1引脚输出周期为4ms的方波。解:此处对定时器0采用中断方式编程。C51源程序如下:小结1、单片机内部结构。 2、显示编程方法3、按键4、中断5、查表(数组)、延时、调用子程序、地址(指针)应用、中断程序应用(精确定时).多点温度测量-实训拓展任务描述1、系统由、系统由18B20温度传感器、数码管显示温度、温度传感器、数码管显示温度、51单片机单片机等器件构成。等器件构成。 2、按键选择显示各测温点数据(至少三个温测点)。、按键选择显示各测温点数据(至少三个温测点)。3、没有选择测温时,显示开机运行的时间,显示格式、没有选择测温时,显示开机运行的时间,显示格式 为为 时时-分分-秒秒。任务要求 1、完成详细电路图及软件设计、调试。、完成详细电路图及软件设计、调试。 2、说明电路中各主要器件的功能。、说明电路中各主要器件的功能。 3、详细标注软件中各主要程序、关键语句的功能。说明主、详细标注软件中各主要程序、关键语句的功能。说明主程序流程。程序流程。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号