目标:数码管的动态显示
上篇讲到了用74LS138来控制数码管的位选,那是怎么选的呢?我们先来看看这个译码器的说明书
/Y0--/Y7是数据输出
A0--A2是数据输入
/E1,/E2,E3是使能控制,/E1和/E2是低电平有效,E3是高电平有效
VDD是接电源;GND接地
最重要的是真值表了,来解释其运行方式
/E1和/E2是低电平有效,E3是高电平有效,只要其中一个不满足条件则/Y0--/Y7全部输出高电平,我们是共阴式数码管那么不会亮
从第四行开始都满足了,这时候就可以看看A0--A2了,顺序是A2-
A1-A0,其从上往下依次是000,001,010,011,100,101,110,111.这样看出是0,1,2,3,4,5,6,7的二进制。再看看右半的Y0,000是Y0, 001是Y1, 010是Y2........一次对应下去就知道是怎么控制了?
代码:
里面有个switch语句 switch(i)是判断i的,当i是0就执行case 0后面的语句,每句后面加个break不然会一直把下面执行了。
一个for循环,实现了不同数码管显示不同数字的要求,i是0时第一个数码管亮,数字0。i是1时第二个数码管亮显示数字1........
P0 = 0x00是为了让P0口更加稳定又归位
写一半心血来潮又增加了点难度,让显示完一遍又倒着来一遍
其实也就加了个嵌套for循环,是下面判断一下......
那个9耗了不少时间我一直写8,导致显示是0,1,2,3,4,5,6,0,7,6,5,4,3,2,1, 0
以为a 和i是同步的,大意了,自己基础也不扎实,a是按1,2,3,4,5,6,7......顺序的所以当i是7 时a 是8,所以这里写<9
那个case4凸出来纯属一下手贱,但这是C语言所以缩进没关系,如果是靠缩进定位的python就有问题了,但似乎python很少很少写单片机。。。。
*