电子时钟显示,有惊喜,呵呵!
时间:10-02
整理:3721RD
点击:
#include < reg52.h >
#include <intrins.h>
sbit LS138A=P2^2; //定义 138管脚
sbit LS138B=P2^3;
sbit LS138C=P2^4;
unsigned int LedNumVal,LedNumVa,LedOut[8];
// 此表为 LED 的字模 // 0 1 2 3 4 5 6 7 8 9 A b c d E - L P U Hidden _ (20)
unsigned char code Disp_Tab[] = { ~0xC0,~0xF9,~0xA4,~0xB0,~0x99,~0x92,~0x82,~0xF8,~0x80,~0x90,~0x88,~0x83,~0xC6,~0xA1,~0x86,~0xbf,~0xc7,~0x8c,~0xc1, ~0xff, ~0xf7 };
/***********************************************************
purpose: 系统初始化
/**********************************************************/
void system_Ini()
{
TMOD = 0x01; //选择模式0 13位计数 最大计数8192
// TH0=0x1C; //12.000M 预装初值
//TL0=0x18;
TH0 = (65536 - 50000)/255;
TL0 = (65536 - 50000)%255;
IE = 0x8A; //中断
TR0 = 1; //开启T0定时器
}
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
/********主函数****/
main()
{
system_Ini() ;
while(1)
{
unsigned char i;
if( LedNumVa==20)
{
LedNumVal++;
LedNumVa=0;
if(LedNumVal>=86400)LedNumVal=0;
}
//记数并显示
if(LedNumVal>=36000)
LedOut[0]=Disp_Tab[LedNumVal%36000/36000];
if(LedNumVal>=3600)
LedOut[1]=Disp_Tab[LedNumVal%36000/3600];
if(LedNumVal>=600)
LedOut[2]=Disp_Tab[LedNumVal%3600/600];
if(LedNumVal>=60)
LedOut[3]=Disp_Tab[LedNumVal%600/60];
if(LedNumVal>=10)
LedOut[4]=Disp_Tab[LedNumVal%60/10];
LedOut[5]=Disp_Tab[LedNumVal%10];
for( i=0; i<6; i++) //位选
{
P0 = LedOut[i];
switch(i)
{
case 0:
LS138A=0; LS138B=0; LS138C=0;
break;
case 1:
LS138A=1; LS138B=0; LS138C=0;
break;
case 2:
LS138A=0; LS138B=1; LS138C=0;
break;
case 3:
LS138A=1; LS138B=1; LS138C=0;
break;
case 4:
LS138A=0; LS138B=0; LS138C=1;
break;
case 5:
LS138A=1; LS138B=0; LS138C=1;
break;
}
delay(150);
}
}
}
/*************************************
[ T0 (1ms)中断] 中断
*************************************/
void T0zd(void) interrupt 1 //定时器1的中断
{
//TH0 = 0xFc; //12.000
//TL0 = 0x18;
TH0 = (65536 - 50000)/255;
TL0 = (65536 - 50000)%255;
LedNumVa++;
}
//本人是新人,请大家多多指教,多谢!
#include <intrins.h>
sbit LS138A=P2^2; //定义 138管脚
sbit LS138B=P2^3;
sbit LS138C=P2^4;
unsigned int LedNumVal,LedNumVa,LedOut[8];
// 此表为 LED 的字模 // 0 1 2 3 4 5 6 7 8 9 A b c d E - L P U Hidden _ (20)
unsigned char code Disp_Tab[] = { ~0xC0,~0xF9,~0xA4,~0xB0,~0x99,~0x92,~0x82,~0xF8,~0x80,~0x90,~0x88,~0x83,~0xC6,~0xA1,~0x86,~0xbf,~0xc7,~0x8c,~0xc1, ~0xff, ~0xf7 };
/***********************************************************
purpose: 系统初始化
/**********************************************************/
void system_Ini()
{
TMOD = 0x01; //选择模式0 13位计数 最大计数8192
// TH0=0x1C; //12.000M 预装初值
//TL0=0x18;
TH0 = (65536 - 50000)/255;
TL0 = (65536 - 50000)%255;
IE = 0x8A; //中断
TR0 = 1; //开启T0定时器
}
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
/********主函数****/
main()
{
system_Ini() ;
while(1)
{
unsigned char i;
if( LedNumVa==20)
{
LedNumVal++;
LedNumVa=0;
if(LedNumVal>=86400)LedNumVal=0;
}
//记数并显示
if(LedNumVal>=36000)
LedOut[0]=Disp_Tab[LedNumVal%36000/36000];
if(LedNumVal>=3600)
LedOut[1]=Disp_Tab[LedNumVal%36000/3600];
if(LedNumVal>=600)
LedOut[2]=Disp_Tab[LedNumVal%3600/600];
if(LedNumVal>=60)
LedOut[3]=Disp_Tab[LedNumVal%600/60];
if(LedNumVal>=10)
LedOut[4]=Disp_Tab[LedNumVal%60/10];
LedOut[5]=Disp_Tab[LedNumVal%10];
for( i=0; i<6; i++) //位选
{
P0 = LedOut[i];
switch(i)
{
case 0:
LS138A=0; LS138B=0; LS138C=0;
break;
case 1:
LS138A=1; LS138B=0; LS138C=0;
break;
case 2:
LS138A=0; LS138B=1; LS138C=0;
break;
case 3:
LS138A=1; LS138B=1; LS138C=0;
break;
case 4:
LS138A=0; LS138B=0; LS138C=1;
break;
case 5:
LS138A=1; LS138B=0; LS138C=1;
break;
}
delay(150);
}
}
}
/*************************************
[ T0 (1ms)中断] 中断
*************************************/
void T0zd(void) interrupt 1 //定时器1的中断
{
//TH0 = 0xFc; //12.000
//TL0 = 0x18;
TH0 = (65536 - 50000)/255;
TL0 = (65536 - 50000)%255;
LedNumVa++;
}
//本人是新人,请大家多多指教,多谢!
顶贴。
我也是新人,交流交流,谢谢小编
希望有图有真相!那就更好了
学习一下
学习学习