目的:51单片机驱动四个“1位”数码管;循环显示0、1、2、3~~~、99、100、1000、9999
哎!在网上找的很多方案是显示 0001、0002、0003~~~、0099、0100、1000、9999 而且还是”4“位的数码管
在公司实在无聊,花了半天时间写了V1.0版本代码,没错就是显示的0001、0002、0003~~~、0099、0100、1000、9999
在公司实在无聊,又花了半天时间写了V1.1版本代码,能够实现循环显示0、1、2、3~~~、99、100、1000、9999
/*******V1.0*******
编程人:刘利刊
时 间:2024年7月一个无聊的下午
*******************/
#include <reg51.h>
#include <intrins.h> //延时函数需要的头文件
void Delay1000ms(void) //@12.000MHz延时函数1秒钟
{
unsigned char data i, j, k;
_nop_();
i = 8;
j = 154;
k = 122;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int a,b,c; //定义循环需要的几个变量
int shi=0,bai=0,qian=0; //十位、百位、千位默认显示数组的第一个元素0, /*如果把第一个元素换成0XFF不显示,那进位后原本显示0的就不显示了,这里没找到好办法*/
int G[10] = {0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; //定义的数组显示0-9,10个数,
void main()
{
for(a=0; a<=9; a++)
{
for(b=0; b<=9; b++)
{
for(c=0; c<=9; c++)
{
P3 = G[c]; //个位端口
P2 = G[shi]; //十位端口
P1 = G[bai]; //百位端口
P0 = G[qian]; //千位端口
Delay1000ms();
}
shi++; //个位显示一轮后十位+1显示
if(shi == 10) //判断十位是否加到9了,如果是则清零
{
shi = 0;
}
}
bai++; //十位显示一轮后百位+1显示
if(bai == 10) //判断百位是否加到9了,如果是则清零
{
bai = 0;
}
}
qian++; //百位显示一轮后千位+1显示
if(qian == 10) //判断千位是否加到9了,如果是则清零
{
qian = 0;
}
}
/*****************************
编程人:刘利刊
时 间:24年7月又一个无聊的下午
*****************************/
#include <reg51.h>
#include <intrins.h> //延时需要的头文件
void Delay1000ms(void) //@12.000MHz
{
unsigned char data i, j, k;
_nop_();
i = 8;
j = 154;
k = 122;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int a,b,c,d,count=0;
int shi=0,bai=0,qian=0; //十位、百位、千位默认显示数组的第一个元素0, /*如果把第一个元素换成0XFF不显示,那进位后原本显示0的就不显示了,这里没找到好办法*/
int G[11] = {0xff,0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};//定义的数组显示0-9,10个数,
void main()
{
for(a=0; a<=9; a++)
{
for(b=0; b<=9; b++)
{
for(c=0; c<=9; c++)
{
for(d=0; d<=9; d++)
{
P3 = G[d+1];
P2 = G[shi];
P1 = G[bai];
P0 = G[qian];
Delay1000ms();
count ++;
}
shi++; //个位显示一轮后十位+1显示
if(count == 10) //count = 10的话就是第一次进位,第一次进位显示1
{
shi++;
}
if(shi == 11) //判断十位是否加到9了,如果是则进位显示0
{
shi = 1;
}
}
bai++; //十位显示一轮后百位+1显示
if(count == 100) //count = 100的话就是第一次进位,第一次进位显示1
{
bai++;
}
if(bai == 11) //判断百位是否加到9了,如果是则进位显示0
{
bai = 1;
}
}
qian++; //百位显示一轮后千位+1显示
if(count == 1000) //count = 100的话就是第一次进位,第一次进位显示1
{
qian++;
}
if(qian == 11) //判断千位是否加到9了,如果是则进位显示0
{
qian = 1;
}
}
}