内容正文:
项目3 交通灯控制系统
任务3.3 数码管显示0000-9999
明确任务
任务:采用数码管动态驱动方式来实现循环显示0000-9999 。
本任务要求显示4位数据,显然需要4个数码管。如果按照任务一单片机直接驱动数码管静态显示方式,那么需要32个口,但是单片机只有32口,就不能再与外界进行其他信息交换了,是对单片机资源的浪费,如果采用任务3.2,可以很好的实现,但是成本可能比较高。
知识链接
一、数码管动态驱动原理
所谓动态显示,就是一位一位的轮流点亮各位数码管,对于每一个数码管来说,每隔一段时间点亮一次。
若数码管的位数不大于8位,则控制数码管COM口,只需一个I/O口(位码扫描口),控制各位数码管所显示的字形也需要一个8位口(称为段码数据口)。
动态显示的硬件接法是将所有的数码管的段选线并在一起,接到一个8位的I/O接口上,而位选线则分开接到各自的I/O线上。
由于各LED的段选线是并到一起的,如果不加控制,在送显示字模时各LED会显示同样的内容,怎么解决这一问题?
动态扫描用分时的方法轮流控制各个数码管的COM端,使各个数码管轮流点亮。在轮流点亮数码管的扫描过程中,每位数码管的点亮时间极为短暂。但由于人的视觉暂留现象及发光二极管的余辉,给人的印象就是一组稳定的显示数据。
优点:当显示位数较多时,采用动态显示方式比较节省I/O口,硬件电路也较静态显示简单。
缺点:其稳定度不如静态显示方式。而且在显示位数较多时CPU要轮番扫描,占用CPU较多的时间。
二、编程技巧
根据动态驱动原理,要想动态驱动数码管显示4位或更多位数据必须逐个显示,利用人眼视觉分辨率较低来进行实现。
将要显示段码和控制位码同时送出,其他控制位码无效,延时后更换下一个数据。
第1位数码管段码位码
显示延时
第2位数码管段码位码
显示延时
三、硬件电路图
四、软件设计与编程
(1)数码管动态显示1234成静止状态
注意:四位一体数码管为共阳型,段码低电平有效,位码高电平有效(可接上拉电阻提高驱动能力)。
P2=0X01; //第一个数码管位码
P1=SMG[1]; //第一个数码管显示1
delay(); //延时
P2=0X02; //第二个数码管位码
P1=SMG[2]; //第二个数码管显示2
delay(); //延时
P2=0X04; //第三个数码管位码
P1=SMG[3]; //第三个数码管显示3
delay();
P2=0X08; //第三个数码管位码
P1=SMG[4]; //第四个数码管显示4
delay();
思考:如果1、2、3、4,显示不明显、出现逐个显示或是抖动,应该怎么处理?
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
(2)循环显示0000-9999数字
理解两种动,一是同一组数据上的动态显示;二是数据本身是在不断不换的动。
在程序设计时,采用让数据动态显示多次(如100次)后,数据内容再加1。
动态显示各位数据
i自加
数据加1,数据处理
i>100
是
否
任务实施
1.学生分组,制定方案。
2.查阅资料,设计电路原理图,列出元件清单。
3.准备元件及工具,搭接电路。
4.注意安全。
评价总结
1.学生根据自己实施情况填写任务实施评价单。
2.组间互评,提出问题,解决问题。
3.回收元件及工具,清洁实施现场,6S标准。
4.知识整理总结。
$$