以51单片机为例,数码管动态显示如何让某一位数值闪烁,考虑到有新人不一定能熟练运用定时器和中断,这里提供两种简单的思路。
本次示例中让数码管某一位亮起的函数为 XianShi(数码管位置,显示的字符)。
1.利用if语句让需要闪烁的一位先显示一段时间(或次数),再让其显示“空”一段时间。
数码管是不能同时显示多位字符的,我们可以先让某一位显示,再让其显示空字符,其他位置的数码管不变,利用main函数的刷新原理和人眼的视觉暂留就可以实现闪烁,本次示例均令第一位数码管闪烁,示例代码如下:
unsigned char HaoMa[]={1,2,3,4,5,6,7,8};//需要显示的数组
void main()
{
unsigned char a=0,b=0,i;
while(1)
{
if(a<100)
{
for(i=1;i<9;i++)
{
XianShi(i,HaoMa[i-1]);
}
a++;
} //一开始全部显示,每显示一次a加1,当显示100次(a等于100)时,跳出此循环
if(a==100)
{
HaoMa(1,0x00); //第一位显示空
for(i=2;i<9;i++)
{
XianShi(i,Hao[i-1]);
} //其余位正常显示
b++;
if(b==100) {a=0;}
} //a等于100时,让第一位显示空(0x00),其余位置正常显示。每显示一次b加1,当显示100次(b=100)时,让a=0,跳出此循环
}
}
这样,先正常显示100次,再让闪烁位显示空100次,再利用主函数刷新原理即可实现某一位或多位闪烁。
2.利用while嵌套循环(需注意重复赋值)
另一种思路是利用while循环,这样做能使代码更简洁,但容易出错,读者在编写程序时需注意,示例代码如下:
unsigned char HaoMa[]={1,2,3,4,5,6,7,8};
unsigned char a;
void main()
{
while(1)
{
a=200;
for(i=1;i<9;i++)
{
XianShi(i,HaoMa[i-1]); //所有位正常显示
}
while(a--) //闪烁的时间是a自减到0的时间
{
HaoMa(1,0x00); //第一位显示空
for(i=2;i<9;i++)
{
XianShi(i,HaoMa[i-1]); //其余位正常显示
}
}
}
此代码在嵌套循环结束时变量a=0,因此需要在主函数while循环时,要将a变量赋初值,这里测试时150-250比较合适,读者可自行尝试其他数值。
以上两个代码均可移至中断函数中,利用这两种思路也可实现多位动态显示闪烁,有兴趣的读者可自行尝试。
版权声明:本文为CSDN博主「弱音~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_59954476/article/details/120687142
以51单片机为例,数码管动态显示如何让某一位数值闪烁,考虑到有新人不一定能熟练运用定时器和中断,这里提供两种简单的思路。
本次示例中让数码管某一位亮起的函数为 XianShi(数码管位置,显示的字符)。
1.利用if语句让需要闪烁的一位先显示一段时间(或次数),再让其显示“空”一段时间。
数码管是不能同时显示多位字符的,我们可以先让某一位显示,再让其显示空字符,其他位置的数码管不变,利用main函数的刷新原理和人眼的视觉暂留就可以实现闪烁,本次示例均令第一位数码管闪烁,示例代码如下:
unsigned char HaoMa[]={1,2,3,4,5,6,7,8};//需要显示的数组
void main()
{
unsigned char a=0,b=0,i;
while(1)
{
if(a<100)
{
for(i=1;i<9;i++)
{
XianShi(i,HaoMa[i-1]);
}
a++;
} //一开始全部显示,每显示一次a加1,当显示100次(a等于100)时,跳出此循环
if(a==100)
{
HaoMa(1,0x00); //第一位显示空
for(i=2;i<9;i++)
{
XianShi(i,Hao[i-1]);
} //其余位正常显示
b++;
if(b==100) {a=0;}
} //a等于100时,让第一位显示空(0x00),其余位置正常显示。每显示一次b加1,当显示100次(b=100)时,让a=0,跳出此循环
}
}
这样,先正常显示100次,再让闪烁位显示空100次,再利用主函数刷新原理即可实现某一位或多位闪烁。
2.利用while嵌套循环(需注意重复赋值)
另一种思路是利用while循环,这样做能使代码更简洁,但容易出错,读者在编写程序时需注意,示例代码如下:
unsigned char HaoMa[]={1,2,3,4,5,6,7,8};
unsigned char a;
void main()
{
while(1)
{
a=200;
for(i=1;i<9;i++)
{
XianShi(i,HaoMa[i-1]); //所有位正常显示
}
while(a--) //闪烁的时间是a自减到0的时间
{
HaoMa(1,0x00); //第一位显示空
for(i=2;i<9;i++)
{
XianShi(i,HaoMa[i-1]); //其余位正常显示
}
}
}
此代码在嵌套循环结束时变量a=0,因此需要在主函数while循环时,要将a变量赋初值,这里测试时150-250比较合适,读者可自行尝试其他数值。
以上两个代码均可移至中断函数中,利用这两种思路也可实现多位动态显示闪烁,有兴趣的读者可自行尝试。
版权声明:本文为CSDN博主「弱音~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_59954476/article/details/120687142
暂无评论