简易加减计数器和交通信号灯设计概述

上传人:F****n 文档编号:94240938 上传时间:2019-08-04 格式:PPT 页数:98 大小:3.74MB
返回 下载 相关 举报
简易加减计数器和交通信号灯设计概述_第1页
第1页 / 共98页
简易加减计数器和交通信号灯设计概述_第2页
第2页 / 共98页
简易加减计数器和交通信号灯设计概述_第3页
第3页 / 共98页
简易加减计数器和交通信号灯设计概述_第4页
第4页 / 共98页
简易加减计数器和交通信号灯设计概述_第5页
第5页 / 共98页
点击查看更多>>
资源描述

《简易加减计数器和交通信号灯设计概述》由会员分享,可在线阅读,更多相关《简易加减计数器和交通信号灯设计概述(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(); /延时10ms if (key=0) /再次判断按键是否按下 a+; /按键功能代码(变量a加“1”操作) while(key=0); /等待按键释放 ,任务1

4、 简易加减计数器的设计,以单片机为基础的电子产品设计中,键盘是一种最为常见的人机交互设备。通常,键数较少、键盘的功能简单。,1简单键盘的扫描程序设计, 键盘扫描程序嵌入到主程序循环之中,与主程序一起构成主循环套。, 键敲击速度约几次/S,设计键盘扫描程序时,必须保证约100mS内就要循环扫描1次。,任务1 简易加减计数器的设计,任务1 简易加减计数器的设计,任务1 简易加减计数器的设计,按键数量进一步增加时, 采用矩阵联接式键盘可节省更多的口线, 接口电路也更简单。,1.1.2矩阵连接键盘,键盘扫描程序的编写,(1)判别有无键按下。 (2) 延时。 (3) 键盘扫描取得闭合键的行、列值键值。

5、(4) 用计算法或查表法得到键号。 *(5) 判断闭合键是否释放,如没释放则继续等待。 (6) 将闭合键键号保存, 然后返回。,键盘扫描程序一般流程:,任务1 简易加减计数器的设计,矩阵式键盘的工作原理 当键盘有键按下时,要逐行或逐列扫描,以判断是哪一个键按下。通常扫描方式有两种:扫描法和反转法。,任务1 简易加减计数器的设计,矩阵连接键盘扫描,知识链接二:数码管显示技术,任务1 简易加减计数器的设计,1.2.1七段LED显示器,通常的7段LED显示块中有8个发光二极管,故也叫做8段显示器。其中7个发光二极管构成七笔字形“8”,一个发光二极管构成小数点。 1. LED显示器的结构与原理,任务1

6、 简易加减计数器的设计,2.LED显示器的显示方式 (1)LED静态显示方式 每一位显示都占用单独的具有锁存功能的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=0x3F,0x06,0x5B,0x4F,0x66

8、,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C; unsigned char code Col=0xfe,0xfd,0xfb,0xf7,0xef,0xdf; 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=0xff; /关数码管 Delay(); ,任务1 简易加减计数器的设计,1.3数码管显示44键盘编

9、号,1. 技能要求 单片机P2接1位数码管,P1口接由16个按键组成的44行列键盘。当按下这16个按键的其中之一时,数码管显示该按键对应的键盘编号。,任务1 简易加减计数器的设计,. 仿真电路图,数码管显示44键盘编号的电路图如下图所示,电路中的轻触按键使用元件库中的“button”元件,特别注意16个按键的连接关系及其和单片机之间的连接关系。,任务1 简易加减计数器的设计,. 程序设计与调试 程序采用线翻转法识别闭合键,反转法原理:行作低电平输出,列作输入,读列线;列作低电平输出,行作输入,读行线。数码管静态显示方式。,任务1 简易加减计数器的设计,int main() while(1) k

10、eyScan( );,delay(unsigned int i) while(i-); void keyScan() unsigned char temp,a; temp=0xff; P1=0xf0; if (P1!=0xf0) /判断是否有按键按下 delay(1000); /延时去抖 if (P1!=0xf0) /再次判断是否有按键按下 P1=0xf0; /行作输出,列作输入 temp=P1; /读取列值 P1=0x0f; /列作输出,行作输入 temp=temp|P1; /读取行值并和列值合并 switch (temp) case 0xee:a=0; break; case 0xde:a

11、=1; break; case 0xbe:a=2; break; case 0x7e:a=3; break;,参考程序如下: #include unsigned char code seg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, /09的段码 0x88,0x83,0xc6,0xa1,0x86,0x8e; /AF的段码,case 0xed:a=4; break; case 0xdd:a=5; break; case 0xbd:a=6; break; case 0x7d:a=7; break; case 0xeb:a=8; break;

12、 case 0xdb:a=9; break; case 0xbb:a=10; break; case 0x7b:a=11; break; case 0xe7:a=12; break; case 0xd7:a=13; break; case 0xb7:a=14; break; case 0x77:a=15; break; P2=sega; /将键值对应的段码送到P2口 P1=0xf0; while (P1!=0xf0)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段码的数组。,任

14、务1 简易加减计数器的设计,#include #include unsigned char a; unsigned char code seg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /09十个数字的共阳型段码 sbit k1=P10; sbit k2=P12; sbit k3=P14; void delay(unsigned int j) while(j-); display() unsigned char i,wk=0x01; /wk变量作位控,初始选通右边第1位 unsigned char buf3; /声明数码管显示字形缓冲

15、数组 buf0=sega%10; /a的个位 buf1=sega/10%10; /a的十位 buf2=sega/100; /a的百位,小于999时可以不对10取余,独立按键控制数码管加减计数的程序如下:,任务1 简易加减计数器的设计,for (i=0;i3;i+) P3=wk; /输出位控 P2=bufi; /依次输出段码 delay(50); /延时 wk=_crol_(wk,1); /位控左移一位 P2=0xff; /熄灭所有数码管(消隐) 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; while(k3=0)display(); ,int main() while(1) button(); display(); ,26,任务3 方波发生器的设计,1. 技能要求 设晶振频率6

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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