c51单片机程式--数码管的数字钟

来源:百度知道 编辑:UC知道 时间:2024/05/23 02:24:52
#include"reg51.h"
#include <intrins.h>
code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbit LHJ_A = P1^0;
sbit LHJ_B = P1^1;
sbit LHJ_C = P1^2;

unsigned char SMG_Table[] = {0x00,0x01,0x02,0x03,0x04,0x05};
unsigned int ledbuf[6];

unsigned char msec=0; //毫秒
unsigned char sec=0; //秒
unsigned char minu=0; //分
unsigned char hour=0; //时
void delay(void)
{
_nop_();_nop_();_nop_();_nop_();_nop_();
}

void main()
{
int i;
TMOD=0x01;
ET0=1;
TR0=1;
EA=1;
PT0=1;
TH0=0x3c;
TL0=0xb0;
while(1)
{
for (i=5;i>=0;i--)
{
P1 = SMG_Table[i];
delay();
P2= table[ ledbuf[i] ];
P2=0;

}
}
}

void time0() interrupt 1
{
TF0=0;

你的数码管是不是用三极管驱动的~程序基本没有问题

void time0() interrupt 1
{
TF0=0;
TR0=0;
EA=0;
建议这里不要加这三个,没有必要,反而会精确不了一秒,因为你停了中断

建议在句子一开头直接
void time0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
这样会好点

for (i=5;i>=0;i--)
{
P1 = SMG_Table[i];
delay();
P2= table[ ledbuf[i] ];
P2=0;

}
这里尽量不要用i>=0

可用
for (i=6;i>0;i--)
{
P1 = SMG_Table[i-1];
delay();
P2= table[ ledbuf[i-1] ];
P2=0;

}

这样可规范点

这个钟,时间误差显然是很大的。

什么都没说明清楚也叫成功??就这小儿科的东西,有必要炫耀么??

那你发出来做什么?炫耀吗?你这么强怎么不把时间设置也加上去?