目的:控制动态数码管从左至右显示数字 0-7
编译软件:keil5
过程
(1)首先将 51 单片机的头文件包含进来, 然后定义 38 译码器的控制引脚,并将共阴数码管 0-F 断码数据使用数组定义好
#define SMG_A_DP_PORT P0 //使用宏定义数码管段码口
//定义数码管位选信号控制脚
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//定义一个全局数组变量 gsmg_code (开头的“g”表示全局)存放共阴数码管 0-F 段码数据
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(2)主函数功能,直接进入 while 循环,在循环体内执行 smg_display()数 码管动态显示函数。该函数是根据动态数码管显示原理所编写,即选中所要显示的那位数码管,然后发送在该位数码管上所要显示的段码数据,延时一定时间后 在将段选口清零即消隐(消除之前的显示),如此循环 8 次即可实现 8 位数码管显示。
void smg_display(void)
{
u8 i=0;
for(i=0;i<8;i++)
{
switch(7-i)//位选
{
case 0: LSC=1;LSB=1;LSA=1;break;
case 1: LSC=1;LSB=1;LSA=0;break;
case 2: LSC=1;LSB=0;LSA=1;break;
case 3: LSC=1;LSB=0;LSA=0;break;
case 4: LSC=0;LSB=1;LSA=1;break;
case 5: LSC=0;LSB=1;LSA=0;break;
case 6: LSC=0;LSB=0;LSA=1;break;
case 7: LSC=0;LSB=0;LSA=0;break;
}
SMG_A_DP_PORT=gsmg_code[i];
delay_10us(100);
SMG_A_DP_PORT=0x00;
(3)编译整体代码烧录观察实验现象