为什么这样不能在数码管上显示现在的时间?
部分代码如下:
#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'];
不知道你这个问题是否已经解决, 如果还没有解决的话:该部分无非是驱动及数据处理。
首先是驱动:
根据提供的参考资料和信息,我无法直接确定您在显示当前时间的问题上出了什么问题。参考资料主要关于函数指针的使用,而您提供的代码中并没有涉及到时间的获取和显示。
要在数码管上显示当前时间,您需要进行以下步骤:
由于我无法获取到您所使用的单片机型号和具体的数码管接口,我无法提供具体的代码示例。但以下是一个一般性的伪代码示例,供您参考:
// 伪代码示例,不可直接运行
#include "头文件和库"
// 获取当前时间的函数
void get_current_time(uint8_t* hour, uint8_t* minute, uint8_t* second)
{
// 使用相应方法获取当前时间,并将小时、分钟和秒数分别保存到对应的指针变量中
}
// 将时间数据转换为数码管显示的函数
void display_time(uint8_t hour, uint8_t minute, uint8_t second)
{
// 根据数码管的接口方式和引脚,将时间数据转换并输出到数码管上
}
int main(void)
{
// 初始化相关硬件和引脚
while (1)
{
// 获取当前时间
uint8_t hour, minute, second;
get_current_time(&hour, &minute, &second);
// 显示当前时间
display_time(hour, minute, second);
// 延时一段时间,用于控制显示刷新的速度
delay();
}
return 0;
}
请根据您所使用的单片机型号,参考相应的资料,修改上述代码示例中的相关函数和引脚的初始化方法,以适应您的实际需求。
如果您需要进一步的帮助,请提供更多关于您所使用的单片机型号和数码管接口的详细信息。
你只能自己设置初始时间,他应该没法读取现实中的时间