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

来源:互联网 发布:山西省建筑业企业网络 编辑:程序博客网 时间:2024/06/06 02:33

数码管动态显示:

回想一下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()写哪里?

原创粉丝点击