
















总结一下:74HC245是弄数码管上数字的,
74LS138是选哪个数码管工作的


多个LED灯操作,选择用寄存器来操作,故用P0(1亮,0不亮)
显示数字0:g不亮,其余亮,P0=0011 1111=0x3F
显示数字1:b,c亮,其余灭,P0=0000 0110=0x06
显示数字2:f,c不亮,其余亮,P0=1101 1011=0xDB

(先二进制转10进制,然后掰手指头11是B往后数)
显示数字3:f,e不亮,其余亮,P0=0100 1111=0x4F
显示数字4:a,d,e不亮,其余亮,P0=0110 0110=0x66
(从后往前打,打一个往左挪一个)
显示数字5:b,e不亮,其余亮,P0=0110 1101=0x6D
显示数字6:b不亮,其余亮,P0=0111 1101=0x7D

显示数字7:a,b,c亮,其余灭,P0=0000 0111=0x07
显示数字8:全亮,P0=0111 1111=0x7F
显示数字9:d,e不亮,其余亮,P0=0110 0111=0x67
那8个数码管,如果我们要让第6个数码管显示6,则应该让74LS138选择第六个数码管,然后让74HC245弄个数字6
如果我们要显示12345678,则应该有8个瞬间
第一个瞬间,让最左边数码管显示1,其余黑
第二个瞬间,让左二的数码管显示2,其余黑
第三个瞬间,让左三的数码管显示3,其余黑
第四个瞬间,让左四的数码管显示4,其余黑
第五个瞬间,让右四的数码管显示5,其余黑
第六个瞬间,让右三的数码管显示6,其余黑
第七个瞬间,让右二的数码管显示7,其余黑
第八个瞬间,让最右的数码管显示8,其余黑
然后这8个瞬间依次首尾循环闪,骗过眼睛,显示123456789
开始敲代码:
打开
软件,







这次试试模块化编程,先弄数码管的点C文件:

#include <REGX52.H>
void nixie_tube(int location,int number)//location代表我们选的数码管从右边开始低位起,number代表我们要显示的数字
{
unsigned char data i, j;
//数字显示
char nixie_number[]={0x3F,0x06,0xDB,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};//数组低位在左边,从0开始
P0=nixie_number[number];
//选数码管
switch(location)
{
case(1):P2_4=0;P2_3=0;P2_2=0;break;//二进制000代表十进制0选择LED1数码管,我们需要设置74LS138的CBA引脚为(C)P2_4=0,(B)P2_3=0,(A)P2_2=0
case(2):P2_4=0;P2_3=0;P2_2=1;break;//二进制001代表十进制1选择LED2
case(3):P2_4=0;P2_3=1;P2_2=0;break;//二进制010代表十进制2选择LED3
case(4):P2_4=0;P2_3=1;P2_2=1;break;//二进制011代表十进制3选择LED4
case(5):P2_4=1;P2_3=0;P2_2=0;break;//二进制100代表十进制4选择LED5
case(6):P2_4=1;P2_3=0;P2_2=1;break;//二进制101代表十进制5选择LED6
case(7):P2_4=1;P2_3=1;P2_2=0;break;//二进制110代表十进制6选择LED7
case(8):P2_4=1;P2_3=1;P2_2=1;break;//二进制111代表十进制7选择LED8
default:break;
}
//为了消除晶体管乱影,进行延时加清零操作
//@12.000MHz
i = 2;
j = 239;
do
{
while (--j);
} while (--i);//延时1ms
P0=0x00;//清零
}

再添加数码管的点h文件



这样数码管的模块代码就写好了,下面我们创建主函数来用它





2万+

被折叠的 条评论
为什么被折叠?



