📄 24htimer.c
字号:
//单协第三次课Demo版
//2006-5-19
#include "AT89X51.H"
typedef struct TIME
{
unsigned char Hour ;
unsigned char Minute ;
unsigned char Second ;
unsigned int mSecond ;
} TIME ;
TIME Timer ;
unsigned char DisBuff[ 8 ];
unsigned char LedP;
unsigned char code LedCode[]={
0x3f,0x06,0x5b,
0x4f,0x66,0x6d,
0x7d,0x07,0x7f,
0x6f,0x40
} ;
void DelayXms(unsigned int X) {
unsigned char n ;
while( X-- ) {
for( n= 0; n< 124; n++ ) {
}
}
}
//
// 每2ms执行一回中断的中断程序, 实现LED数码管动态显示
//
void ISR_Timer0(void) interrupt 1
{
TL0= ( 65536-2000 ) % 256 ;
TH0= ( 65536-2000 ) / 256 ;
P2= 1<<LedP ;
P0= LedCode[ DisBuff[ LedP ] ] ;
LedP++ ;
if( LedP ==8 ) LedP= 0;
Timer.mSecond++ ;
if( Timer.mSecond< 500 )
return ;
Timer.mSecond= 0 ;
Timer.Second++ ;
if( Timer.Second< 60 )
return ;
Timer.Second= 0 ;
Timer.Minute++ ;
if( Timer.Minute< 60 )
return ;
Timer.Minute= 0 ;
Timer.Hour++ ;
if( Timer.Hour< 24 )
return;
Timer.Hour= 0 ;
}
void LedShow( void )
{
DisBuff[0]= Timer.Second%10;
DisBuff[1]= Timer.Second/10;
DisBuff[3]= Timer.Minute%10 ;
DisBuff[4]= Timer.Minute/10 ;
DisBuff[6]= Timer.Hour%10 ;
DisBuff[7]= Timer.Hour/10 ;
}
void InitSet(void)
{
DisBuff[ 2 ] = 10;
DisBuff[ 5 ] = 10;
TMOD= 0x01 ; // 模式配置,time0 16位计数方式
TH0= ( 65536-2000 ) / 256 ;
TL0= ( 65536-2000 ) % 256 ;
TR0= 1 ; // time0 计数开始
ET0= 1 ; // 允许产生中断
EA= 1 ; // 总中断有效
}
void main( void )
{
InitSet( );
while(1)
{
LedShow( );
DelayXms( 50 );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -