缘由关于#51单片机#的问题:为什么这样不能在数码管上显示现在的时间-嵌入式-CSDN问答
为什么这样不能在数码管上显示现在的时间?
部分代码如下:
#include <REGX52.H>
#include<intrins.h>
sbit u5A = P2^2;
sbit u5B = P2^3;
sbit u5C = P2^4;
unsigned char Nixie[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f};//数码管0~9
void Delay400us() //@12.000MHz
{
unsigned char i, j;
i = 5;
j = 168;
do
{
while (--j);
} while (--i);
}
void ShowTime()//显示时间
{
unsigned char SystemTime[9]=__TIME__;
unsigned char j;
for(j=0;j<8;j++)
{
switch(j)
{
case 0:u5A=1;u5B=1;u5C=1;break;
case 1:u5A=0;u5B=1;u5C=1;break;
case 2:u5A=1;u5B=0;u5C=1;break;
case 3:u5A=0;u5B=0;u5C=1;break;
case 4:u5A=1;u5B=1;u5C=0;break;
case 5:u5A=0;u5B=1;u5C=0;break;
case 6:u5A=1;u5B=0;u5C=0;break;
case 7:u5A=0;u5B=0;u5C=0;break;
}
if(j==2 || j==5)
{
P0=0x40;
}
else
{
P0=Nixie[SystemTime[j]+'0'];
}
Delay400us();
}
}
void main()
{
while(1)
{
ShowTime();
}
}
那就说明无法实时获取时间信息,况且如果程序下载到单片机中又何处去读取?只能验证数码管驱动是否正确,另外修改P0=Nixie[SystemTime[j]-'0'];
cpp
#include <REGX52.H>
#include<intrins.h>
sbit u5A = P2^2;
sbit u5B = P2^3;
sbit u5C = P2^4;
unsigned char Nixie[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管0~9
unsigned char SystemTime[8]=__TIME__;
void Delay400us() //@12.000MHz
{//缘由https://ask.csdn.net/questions/7976046
unsigned char i, j;
i = 5;
j = 168;
do
{
while (--j);
} while (--i);
}
void ShowTime()//显示时间static
{
unsigned char j;
for(j=0;j<8;j++)
{
switch(j)
{
case 0:u5A=1;u5B=1;u5C=1;break;
case 1:u5A=0;u5B=1;u5C=1;break;
case 2:u5A=1;u5B=0;u5C=1;break;
case 3:u5A=0;u5B=0;u5C=1;break;
case 4:u5A=1;u5B=1;u5C=0;break;
case 5:u5A=0;u5B=1;u5C=0;break;
case 6:u5A=1;u5B=0;u5C=0;break;
case 7:u5A=0;u5B=0;u5C=0;break;
}
P0=0;
if(j==2 || j==5)
{
P0=0x40;
}
else
{
P0=Nixie[SystemTime[j]-'0'];
}
Delay400us();
}
}
void main()
{
unsigned char ys=0;
while(1)
{
ShowTime();
if(++ys==47)
{ys=0;
if(++SystemTime[7]>'9'){++SystemTime[6];SystemTime[7]='0';}
if(SystemTime[6]>'5'){++SystemTime[4];SystemTime[6]='0';}
if(SystemTime[4]>'9'){++SystemTime[3];SystemTime[4]='0';}
if(SystemTime[3]>'5'){++SystemTime[1];SystemTime[3]='0';}
if(SystemTime[1]>'9'){++SystemTime[0];SystemTime[1]='0';}
if(SystemTime[0]=='2'&&SystemTime[1]=='4'){SystemTime[0]='0';SystemTime[1]='0';}
}
}
}