1.头文件和定义,代码还使用了 sbit 定义来声明了两个变量 duan 和 wei,它们实际上是 P2.6 和 P2.7 端口的别名,用于控制数码管的段选和位选信号。这种方法可以使代码更具可读性,并提高代码的可维护性。定义无符号整数便于后面应用。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a,b,c,d,e
sbit duan=P2^6; //段选信号的锁存器控制
sbit wei=P2^7; //位选信号的锁存器控制
2.使用一个 16 个元素的数组 table,该数组包含了 0-15 的数字在数码管中对应的段码值。
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0-F的码表
3.延时函数部分
(数码管的显示主要依靠于人的视觉暂存和数码管的余辉),前面亮灯灭灯里面提到过 单片机控制一盏灯的亮与灭程序解释
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
{
for(j=0;j<113;j++)
{
;
}
}
}
4.利用取余操作,将要显示的数据拆分开
void culi() //假设d=123;
{
a=d/100; //a=123/100=1,其它的不要,只要1,存进变量a中
b=d/10%10; //b=123/10=12%10=2,只要2,其它的不要,存进变量b中
c=d%10; //c=123%10=3,只要3,其它的不要,存进变量c中
}
5.进行位选和段选,也就是显示操作
11110111对应16进制就是0xf7, 所以设置P0口味0xf7进行位选操作,最后将百位发送给P0进行段选,然后延时,完成百位上的数据的显示。十位和个为依次类推。
文章来源:https://www.toymoban.com/news/detail-514184.html
void pro()
{
P0=0xf7; //选择数码管
wei=1; //选择数码管开启
wei=0; //选择数码管关闭
P0=table[a]; //送段码百位
duan=1; //段位开
duan=0; //段位关
delay_ms(5);//延时
P0=0xef;
wei=1;
wei=0;
P0=table[b]; //送段码十位
duan=1;
duan=0;
delay_ms(5);
P0=0xdf;
wei=1;
wei=0;
P0=table[c]; //送段码个位
duan=1;
duan=0;
delay_ms(5);
e++;
}
6.主函数部分
d是数码管要显示的数字,e在这里的作用是实现自加操作,当加至一定数量的时候,d变也会自加,于是可以看到数码管上的数字逐渐增大。主程序就是先对d进行拆分,进入循环之后,进行数码管显示(数码管显示里面包括了e自加),e自加到一定数量后d自加,e置零,d拆分,之后在while死循环中进行显示,下一个流程也是这样的。关于为什么e自加到50,代码中在pro()函数中使用e变量计数,是为了控制数码管显示的速度和循环显示的次数。每次进入pro()函数后,会将当前数码管的值显示出来,并将e的值自加1,表示等待下一次显示的时间。当e的值累计到50时,if(e==50)语句会触发执行一些特定的操作,即将变量d自加1,并调用culi()函数将d分解为百位、十位和个位数,以便在下一轮循环中显示出来。这是因为在该代码中,每50个计数周期后需要切换到下一个数字进行显示,即在一个特定的时间间隔内更新数码管的显示值,以达到流畅的显示效果。如果不进行分解操作,就无法在下一轮循环中显示下一个数字。需要注意的是,这个特定的时间间隔(50个计数周期)是通过实验调整得出的,具体的数值可以根据具体的需求和实际情况进行调整。例如,如果需要加快数码管的显示速度,可以减小时间间隔;如果需要减缓数码管的显示速度,可以增大时间间隔。同时,为了保证数码管显示的稳定性和可靠性,时间间隔也不能太小或太大,需要根据具体的硬件设备和程序实现进行适当的调整。文章来源地址https://www.toymoban.com/news/detail-514184.html
void main()
{ d=0; //要显示的变量
e=0; //自加的速度标志。
culi();
while(1)
{
pro(); //数码管显示。
if(e==50) //e测试等于50就执行下面的语句。
{
e=0; //e=0
d++; //d自加1
culi(); //处理d,就是把d分成百位,十位,个位。
}
}
}
到了这里,关于单片机——数码管动态显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!