程序如下
#include <reg52.h>
// 0 1 2 3 4 5 6 7 8 9
unsigned char LED8DATA_One[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
// 段选高位 底位
unsigned char LED8DATA_Two[4] = {0xef, 0xdf, 0xbf, 0x7f};
//unsigned char LED8DATA_Two[4] = {0xff, 0xff, 0xff, 0xff}; // 测试用全给1
unsigned char led[4] = {0x00};
int minute=60 ,sec=0; //60分钟
unsigned int Counter=0;
void LEDDATA(unsigned char MM, unsigned char jj)
{
P0 = MM;
P2= jj;
}
void Time1_Init() //定时器1中断 1毫秒
{
TMOD |= 0X10;
TMOD &= 0XDF;
//TMOD = 0X10;
TH1 = 0XFC;
TL1 = 0X66;
TR1 = 1;
}
void int_Init()
{
ET1 = 1;
EA = 1;
}
void main()
{
unsigned char k=0;
Time1_Init();
int_Init();
while (1)
{
led[3] = sec % 10;
led[2] = sec / 10 % 10;
led[1] = minute % 10;
led[0] = minute / 10 % 10;
if (k < 4)
{
k++;
}
else
{
k = 0;
}
LEDDATA(LED8DATA_One[led[k]],LED8DATA_Two[k]);
if (500 < Counter)
LEDDATA(LED8DATA_One[led[k]]^0X80,LED8DATA_Two[k]); //时钟显示
}
}
void interrupt_time_1() interrupt 3 //60分钟倒数中断
{
TH1 = 0XFC;
TL1 = 0X66;
Counter++;
if (1000 == Counter)
{
Counter = 0;
sec--;
if(sec<0)
{
sec=59;
}
if (sec == 59)
{
minute--;
}
}
}
|