简易加减计数器和交通信号灯设计概述课件.ppt
《简易加减计数器和交通信号灯设计概述课件.ppt》由会员分享,可在线阅读,更多相关《简易加减计数器和交通信号灯设计概述课件.ppt(98页珍藏版)》请在三一办公上搜索。
1、单片机原理及应用,任务1 简易加减计数器的设计,1.技能要求 单片机输出口接3位数码管和三个独立按键,这3位数码管分别显示一个变量的个位、十位和百位,三个按键分别作为“加”、“减”和“清零”功能,当按下“加”键时,数码管显示的变量加1,当按下“减”键时,数码管显示的变量减1,当按下“清零”键时,数码管显示和变量为0。,知识链接一 键盘接口电路,独立联接式无编码键盘,独立联接式编码键盘,1、键盘的分类与结构,独立联接式键盘,矩阵联接式键盘,屏幕键盘(触摸屏),无编码键盘编码键盘,无编码,简单有效,键数较少时采用,编码,节省I/O口线,键数较多时采用,任务1 简易加减计数器的设计,1键盘的工作原理
2、及去抖动,对应任何按键来说,由于机械触点的弹性作用,触点在闭合和断开瞬间的电接触情况不稳定,造成了电压信号的抖动现象,如图所示。按键的抖动时间一般为5ms10ms。这种现象会引起单片机对于一次键操作进行多次处理,因此必须设法消除键接通或断开时的抖动现象。常用的去抖动方法有硬件和软件两种。,闭合稳定,任务1 简易加减计数器的设计,a)硬件去抖 硬件消抖可以采用R-S触发器或单稳电路构成去抖电路,分别如图所示。硬件消抖因为要增加硬件开销,造成电路复杂,除了在数字电路里使用外,在单片机系统中不太采用。,任务1 简易加减计数器的设计,b)软件去抖 在检测到有键按下时,执行一个10ms的延时程序后,再确
3、认该键是否保持闭合状态。另外一种方法是连续判断按键所在线路的电平,如果连续100次(甚至更多)都出现低电平(一般按键都是低电平表示按下),就认为按键已经稳定,可以进行识别,这是企业实际开发产品中常用的方法。以P1.0所接按键为例,其编程流程图如图所示.,任务1 简易加减计数器的设计,sbit key=P10;key=1;/P1.0置“1”,作输入口if(key=0)/判断按键是否按下delay10ms();/延时10msif(key=0)/再次判断按键是否按下 a+;/按键功能代码(变量a加“1”操作)while(key=0);/等待按键释放,任务1 简易加减计数器的设计,以单片机为基础的电子
4、产品设计中,键盘是一种最为常见的人机交互设备。通常,键数较少、键盘的功能简单。,1简单键盘的扫描程序设计,键盘扫描程序嵌入到主程序循环之中,与主程序一起构成主循环套。,键敲击速度约几次/S,设计键盘扫描程序时,必须保证约100mS内就要循环扫描1次。,任务1 简易加减计数器的设计,任务1 简易加减计数器的设计,任务1 简易加减计数器的设计,按键数量进一步增加时,采用矩阵联接式键盘可节省更多的口线,接口电路也更简单。,1.1.2矩阵连接键盘,键盘扫描程序的编写,(1)判别有无键按下。(2)延时。(3)键盘扫描取得闭合键的行、列值键值。(4)用计算法或查表法得到键号。*(5)判断闭合键是否释放,如
5、没释放则继续等待。(6)将闭合键键号保存,然后返回。,键盘扫描程序一般流程:,任务1 简易加减计数器的设计,矩阵式键盘的工作原理 当键盘有键按下时,要逐行或逐列扫描,以判断是哪一个键按下。通常扫描方式有两种:扫描法和反转法。,任务1 简易加减计数器的设计,矩阵连接键盘扫描,知识链接二:数码管显示技术,任务1 简易加减计数器的设计,1.2.1七段LED显示器,通常的7段LED显示块中有8个发光二极管,故也叫做8段显示器。其中7个发光二极管构成七笔字形“8”,一个发光二极管构成小数点。1.LED显示器的结构与原理,任务1 简易加减计数器的设计,2.LED显示器的显示方式(1)LED静态显示方式每一
6、位显示都占用单独的具有锁存功能的I/O接口,com端连接在一起。(2)LED动态显示方式 是将所有数码管的“a,b,c,d,e,f,g,dp”的同名端连在一起,每个数码管的COM为各自独立的位选信号。即在某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态。,任务1 简易加减计数器的设计,显示器由6个共阴极LED数码管构成;P0口输出显示段码,经由一片74LS245驱动输出给LED管;P1口输出位码(片选),经由74LS05输出给LED管。,动态扫描过程,任务1 简易加减计数器的设计,首先从段选线上送出字型编码,再控制位选端,字符就显示在指定数码管上,其他位选端无效的数码管
7、都处于熄灭状态,持续1.5ms时间,然后关闭所有显示;接下来又送出新的字型编码,按照上述过程又显示在另外一位数码管上,直到每一位数码管都扫描完为止,这一过程即为动态扫描显示。数码管其实是轮流依次点亮的,但由于人的视觉驻留效应,因此当每个数码管点亮的时间小到一定程度时,人就感觉不出字符的移动或闪烁,觉得每位数码管都一直在显示,达到一种稳定的视觉效果。,任务1 简易加减计数器的设计,参考程序如下:#include unsigned char code Tab=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F,0 x77,0 x7
8、C;unsigned char code Col=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf;void Delay()unsigned char i;for(i=0;i250;i+);void main()/同时显示123456 unsigned char j;while(1)for(j=1;j7;j+)P0=Tabj;P1=Colj-1;/开第一个(共阴)数码管 Delay();P1=0 xff;/关数码管 Delay();,任务1 简易加减计数器的设计,1.3数码管显示44键盘编号,1.技能要求单片机P2接1位数码管,P1口接由16个按键组成的44行列键盘。当按
9、下这16个按键的其中之一时,数码管显示该按键对应的键盘编号。,任务1 简易加减计数器的设计,.仿真电路图,数码管显示44键盘编号的电路图如下图所示,电路中的轻触按键使用元件库中的“button”元件,特别注意16个按键的连接关系及其和单片机之间的连接关系。,任务1 简易加减计数器的设计,.程序设计与调试程序采用线翻转法识别闭合键,反转法原理:行作低电平输出,列作输入,读列线;列作低电平输出,行作输入,读行线。数码管静态显示方式。,任务1 简易加减计数器的设计,int main()while(1)keyScan();,delay(unsigned int i)while(i-);void key
10、Scan()unsigned char temp,a;temp=0 xff;P1=0 xf0;if(P1!=0 xf0)/判断是否有按键按下delay(1000);/延时去抖if(P1!=0 xf0)/再次判断是否有按键按下P1=0 xf0;/行作输出,列作输入temp=P1;/读取列值P1=0 x0f;/列作输出,行作输入temp=temp|P1;/读取行值并和列值合并switch(temp)case 0 xee:a=0;break;case 0 xde:a=1;break;case 0 xbe:a=2;break;case 0 x7e:a=3;break;,参考程序如下:#include
11、unsigned char code seg=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,/09的段码0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e;/AF的段码,case 0 xed:a=4;break;case 0 xdd:a=5;break;case 0 xbd:a=6;break;case 0 x7d:a=7;break;case 0 xeb:a=8;break;case 0 xdb:a=9;break;case 0 xbb:a=10;break;case 0 x7b:a=11;brea
12、k;case 0 xe7:a=12;break;case 0 xd7:a=13;break;case 0 xb7:a=14;break;case 0 x77:a=15;break;P2=sega;/将键值对应的段码送到P2口P1=0 xf0;while(P1!=0 xf0)delay(50);,任务1 简易加减计数器的设计,(1)画出硬件电路图,简易加减计数器任务实施:,任务1 简易加减计数器的设计,(2).程序设计与调试,要获取一个变量的每一位数字的值,用到除法运算符“/”和模运算符“%”两个算术运算符。当两个整数作除法运算时结果仍为整数,余数则会被丢弃,因此可作为取整操作;模运算“%”表示
13、取余操作。,例如,求一个变量temp的“百、十、个”位,分别赋给变量a、b、c的操作如下:a=temp/100%10;/除以100,再对10取余b=temp/10%10;/求得temp的十位c=temp%10;/求得temp的个位要在LED数码管上显示变量temp的“百、十、个”位,可直接写作:P2=segtemp/100%10;P2=segtemp/10%10;P2=segtemp%10;其中seg是存放09段码的数组。,任务1 简易加减计数器的设计,#include#include unsigned char a;unsigned char code seg=0 xc0,0 xf9,0 x
14、a4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;/09十个数字的共阳型段码sbit k1=P10;sbit k2=P12;sbit k3=P14;void delay(unsigned int j)while(j-);display()unsigned char i,wk=0 x01;/wk变量作位控,初始选通右边第1位unsigned char buf3;/声明数码管显示字形缓冲数组buf0=sega%10;/a的个位buf1=sega/10%10;/a的十位buf2=sega/100;/a的百位,小于999时可以不对10取余,独立按键控制数码管加减
15、计数的程序如下:,任务1 简易加减计数器的设计,for(i=0;i3;i+)P3=wk;/输出位控P2=bufi;/依次输出段码delay(50);/延时wk=_crol_(wk,1);/位控左移一位P2=0 xff;/熄灭所有数码管(消隐)void button()k1=1;if(k1=0)delay(1000);if(k1=0)a+;while(k1=0)display();,k2=1;if(!k2)/如果k2为低电平的另一种写示delay(1000);if(!k2)a-;while(!k2)display();k3=1;if(k3=0)delay(1000);if(k3=0)a=0;wh
16、ile(k3=0)display();,int main()while(1)button();display();,26,任务3 方波发生器的设计,1.技能要求 设晶振频率6MHz。利用单片机定时器T0的方式1,在P3.0端口上输出周期为1ms的方波。2.仿真电路图 本任务仿真电路图如图所示。P3.0端口的示波器用于观察波形和计算信号频率。图中示波器的每小格为0.1ms,因此信号周期为1ms,频率为1KHz。,操作步骤:图中右上角的就是模拟示波器,4踪。仿真时可以出现示波器界面,可以对其操作。操作方法与一般示波器相同。图中最下部的是个频率计,运行仿真时可以显示测量到的方波的频率值。添加这2个虚
17、拟仪器的方法是,在软件左边点击虚拟仪器图标,选择第一个就是虚拟示波器,第三个就是频率计。把虚拟示波器的输入端接到P2口的任意引脚,虚拟频率计也可以将输入端接入P2口任意引脚。在这幅图里,采用网络标号的形式接线,看起来图面整洁一点。,任务3 方波发生器的设计,采用查询方式处理的程序:#include sbitP3_0=P30;void main()TMOD=0 x01;TL0=0 x06;TH0=0 xff;TR0=1;while(1)while(!TF0);TF0=0;P3_0=P3_0;,频率为1KHz的方波,其周期为1/1KHz,即1ms。要在P3.0端口上输出周期为1ms的方波,需要使P
18、3.0端口每隔0.5ms取反一次。我们可以通过定时器作0.5ms定时,定时时间到,在程序中对P3.0取反。(1)确定工作模式和工作方式定时器T0工作方式1时:M1M0=01,c/T=0,GATE=0,高4位未使用,全部赋0,则TMOD=0 x01。(2)计算0.5ms定时T0的初值。晶振频率6MHz,则机器周期为2s,设T0的初值为X,则:X=(2165002)=65036=FF06H因此,TH0的初值为0 xff,TL0的初值为0 x06。,3.程序设计与调试,任务3 方波发生器的设计,8051单片机内部有两个16位的可编程定时器/计数器,称为定时器0(T0)和定时器1(T1),可编程选择其
19、作为定时器用或作为计数器用。8051定时器/计数器由定时器T0、定时器T1、定时器方式寄存器TMOD和定时器控制寄存器TCON组成。TMOD、TCON与T0、T1间通过内部总线及逻辑电路连接,TMOD用于设置定时器的工作方式,TCON用于控制定时器的启动与停止。,基本思想:每隔1ms在程序中对P3.0取反,如此循环不止。,任务3 方波发生器的设计,定时器/计数器结构如图6-1所示,定时器/计数器T0由特殊功能寄存器TH0、TL0构成,定时器/计数器T1由特殊功能寄存器TH1、TL1构成。,30,图6-1 AT89S51单片机的定时器/计数器结构框图,定时器/计数器的结构,DATE:2019/1
20、1/16,31,1.计数功能计数器用于统计从TO(P3.4)和Tl(P3.5)两个引脚输入脉冲的负跳变数量。负跳变是指前一个机器周期采样为高电平,后一个机器周期为低电平。每输入一个脉冲负跳变,计数器加1。输入脉冲的高电平与低电平至少应保持一个机器周期时间,以确保正确采样,因此输入脉冲的频率最高为单片机内部脉冲频率的一半。如果内部脉冲频率为1 MHZ,则最高计数频率为0.5 MHz。,定时器/计数器的功能,DATE:2019/11/16,32,2.定时功能定时功能是单片机通过对内部机器脉冲信号计数实现的,计数值乘以机器周期就是相应的时间。例如,如果单片机采用12 MHz的晶振,则机器内部脉冲频率
21、为1 MHz,则机器周期为1us,若共计数1000,则用时为1ms时间。,定时器/计数器的功能,图5-1 TMOD格式8位分为两组,高4位控制T1,低4位控制T0。TMOD各位的功能。(1)GATE门控位。0:仅由运行控制位TRx(x=0,1)来控制定时器/计数器运行。1:用外中断引脚(或)上的电平与运行控制位TRx共同来控制定时器/计数器运行。,33,工作方式控制寄存器TMOD,(2)M1、M0工作方式选择位M1、M0共有4种编码,对应于4种工作方式的选择,如表所示。(3)C/计数器模式和定时器模式选择位,34,工作方式控制寄存器TMOD,0:为定时器工作模式;1:为计数器工作模式,计数器对
22、外部输入引脚T0(P3.4)或T1(P3.5)的外部脉冲(负跳变)计数。,35,定时器/计数器的4种工作方式,1 方式0,M1、M0=00时,被设置为工作方式0,等效逻辑结构框图如图6-4所示(以定时器/计数器T1为例,TMOD.5、MOD.4=00)。,【训练1】T0方式0定时设fosc=6Mhz,定时器/计数器T0以工作方式0定时2ms,编写初始化程序。说明:fosc即为晶振频率。首先计算计数初值。根据公式4-2有:定时时间=(8192-计数初值)12/fosc计数初值=8192-定时时间fosc/12=8192-20006Mhz/12=7192=1C18H=11100000 11000B
23、将此二进制数补足13位数(不够13位前面加0,这个例子够了,不用补),将高8位送给TH0,将低5位送TL0即可。,定时器/计数器的4种工作方式,1 方式0,高8位是:1110 0000B=E0H,送给TH0低5位是:11000B=0001 1000B=18H 送给TL0,2 方式1当M1、M0=01时,定时器/计数器工作于方式1,这时定时器/计数器的等效电路逻辑结构如图5-3所示。方式1和方式0的差别仅仅在于计数器的位数不同,方式1为16位计数器,由THx高8位和TLx低8位构成(x=0,1),方式0则为13位计数器,有关控制状态位的含义(GATE、C/、TFx、TRx)与方式0相同。,定时器
24、/计数器的4种工作方式,38,图6-3 定时器/计数器方式1逻辑结构框图,定时器/计数器的4种工作方式,DATE:2019/11/16,39,实例6-2 欲采用8051单片机控制8个LED同时以1s为周期闪烁,设计电路原理图并编写程序。,设置定时/计数器的过程:1)先初始化工作方式寄存器TMOD 2)为定时/计数器赋初值 3)通过控制寄存器TCON中的TRO或TRl实现启动或停止。,定时器/计数器的4种工作方式,DATE:2019/11/16,40,#include/将8051单片机头文件包含到文件中main(void)unsigned char counter;/设置无符号字符型变量,存储定
25、时器中断次数。TMOD=0 x01;/设T0为定时模式,由TR0控制启动和停止,且工作于方式1TH0=(65536-46083)/256;/初始化T0的高8位TL0=(65536-46083)%256;/初始化T0的低8位TF0=0;/初始化定时器溢出标志P0=0 xff;/关闭LED counter=0;/从0开始计数 TR0=1;/启动定时器0 while(1)while(TF0=1)/如果定时器溢出 counter+;/计时次数加1 if(counter=20)/计时时间达到1s P0=P0;/P0所有位取反,使LED闪烁 counter=0;/重新从0开始计数 TH0=(65536-4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 加减 计数器 交通 信号灯 设计 概述 课件
链接地址:https://www.31ppt.com/p-3731927.html