51单片机数码管动态显示的过程中,怎么实现让最后一个闪烁,其他的不受影响?
51单片机数码管动态显示的过程中,怎么实现让其中一个闪烁,其他的不受影响?如何通过按键可以改变闪烁的位置?例如,45.36,如何让6闪烁?通过按键使其变成4闪烁...
51单片机数码管动态显示的过程中,怎么实现让其中一个闪烁,其他的不受影响?如何通过按键可以改变闪烁的位置?
例如,45.36,如何让6闪烁?通过按键使其变成4闪烁 展开
例如,45.36,如何让6闪烁?通过按键使其变成4闪烁 展开
1个回答
展开全部
闪烁原理,别的数码管都是反复刷新,需要闪烁的那一位则刷新几十次后再有几十次不显示
下例是20次亮 20次灭
uchar modtable[6][4]={ {0,0,0,0},{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1},{1,1,1,1} };
//有1的那一位数码管不亮 {0,0,0,0}不闪烁 {1,1,1,1} 4位全闪烁
uchar ia;
uchar bai,shi,ge;
uchar flag=0;
uint a=0;
//共阴数码管七段码,转成共阳的需取反,程序中已这样做了
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延时程序
{
uchar j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void display(uint m,uchar mode )//4位显示子程序 带某位闪烁功能
//mode=0,都不闪烁 mode=1 千位闪烁 mode=2 百位闪烁 mode=3 十位闪烁 mode=4 个位闪烁
//mode=5 全部闪烁
{
uchar a1,a2,a3,a4;
uchar modeaa;
a1=m/1000;
a2=m/100%10;
a3=m/10%10;
a4=m%10;
if(ia<20)
{
modeaa=mode;//可闪烁也可不闪烁,闪烁位有20次不亮
}
else
{
modeaa=0;//正常显示
}
dataport=~(table[a1]);
sm1=modtable[modeaa][0]; Delay1ms(2);sm1=1;
dataport=~(table[a2]);
sm2=modtable[modeaa][1]; Delay1ms(2);sm2=1;
dataport=~(table[a3]);
sm3=modtable[modeaa][2]; Delay1ms(2);sm3=1;
dataport=~(table[a4]);
sm4=modtable[modeaa][3]; Delay1ms(2);sm4=1;
ia++;
if(ia==40) ia=0;//40次一轮
}
下例是20次亮 20次灭
uchar modtable[6][4]={ {0,0,0,0},{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1},{1,1,1,1} };
//有1的那一位数码管不亮 {0,0,0,0}不闪烁 {1,1,1,1} 4位全闪烁
uchar ia;
uchar bai,shi,ge;
uchar flag=0;
uint a=0;
//共阴数码管七段码,转成共阳的需取反,程序中已这样做了
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延时程序
{
uchar j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void display(uint m,uchar mode )//4位显示子程序 带某位闪烁功能
//mode=0,都不闪烁 mode=1 千位闪烁 mode=2 百位闪烁 mode=3 十位闪烁 mode=4 个位闪烁
//mode=5 全部闪烁
{
uchar a1,a2,a3,a4;
uchar modeaa;
a1=m/1000;
a2=m/100%10;
a3=m/10%10;
a4=m%10;
if(ia<20)
{
modeaa=mode;//可闪烁也可不闪烁,闪烁位有20次不亮
}
else
{
modeaa=0;//正常显示
}
dataport=~(table[a1]);
sm1=modtable[modeaa][0]; Delay1ms(2);sm1=1;
dataport=~(table[a2]);
sm2=modtable[modeaa][1]; Delay1ms(2);sm2=1;
dataport=~(table[a3]);
sm3=modtable[modeaa][2]; Delay1ms(2);sm3=1;
dataport=~(table[a4]);
sm4=modtable[modeaa][3]; Delay1ms(2);sm4=1;
ia++;
if(ia==40) ia=0;//40次一轮
}
追问
这个程序中需要用到中断吗?
追答
没有,如果改变闪烁的位,可以用按键触发中断给 mode赋不同的值即可
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询