基础知识_数码管动态显示,矩阵键盘

本文介绍了数码管动态显示原理及实现方法,通过控制数码管的位选与段选来达到显示效果,并探讨了不同延时带来的视觉差异。此外,还详细解析了矩阵键盘的扫描函数编写技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数码管动态显示:

回想一下lesson4最后那个exam,765432,每隔1s减减,与此同时流水灯,减到764398,停;数码管闪烁,3s后熄灭,同时数码管点亮HELLO

T0/T1定时器,中断是重点,也设置了标志位,最开始自己写程序的时候,主要卡在最后数码管如何点亮输出HELLO这里。是标志位没设置好。


1在中断里面判断跟在主函数里面判断是不一样的,判断啥?判断num_du与num_we的值


2消隐与动态显示效果

wela = 1;
P0 = 0xf7;
wela = 0;

P0 = 0;
dula = 1;
P0 =  table_du[a/100];
dula = 0;

delay(2);

wela = 1;
P0 = 0xef;
wela = 0;

P0 = 0;
dula = 1;
P0 =  table_du[(a%100)/10];
dula = 0;

delay(2);

(1)

这里的P0 = 0用于dula(段选)开启的时候P0的上次初始值为0(共阴极数码管给0x00,即数码管什么也不显示),不然就是wela(位选)打开的时候送的0xf7这个值

(2)

delay(2)在这里是控制两个数码点亮的间隔,即动态显示效果,看起来就像同时控制几个数码管一样。delay(2)人眼看着已经没有闪烁感了,delay(5)稍微还有一点;在显示6位数765432的时候还调小了delay(uchar z)里面的x值,使其闪烁更快

可以尝试拉长这个值,比如延时1s/delay(1000),那么第一个数码管点亮1s之后,熄灭,同时第二个数码管亮;第二个数码管点亮1s之后,熄灭,同时第3个数码管亮

矩阵键盘:

key_scan()函数,带return 值的写法,以前没有完整写过,自己写的时候主要卡在无键按下的时候,数码管上有输出;然后是松手检测不会写:

while( temp != 0xf0)

{

temp = P3;

temp = temp & 0xf0;

}

以上就是松手检测的思路:键盘按下的时候temp肯定不等于0xf0,while表达式为真,始终在循环内部,一旦松手,此时读到P3口的值(因为松手了,读到的P3^7~P3^4全为高)送给temp再与0xf0相与,值肯定就等于0xf0了,此时,while(0xf0 != 0xf0)为假,跳出while循环

自己写的时候,不知道display()写哪里?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值