📄 lesson3_c.c
字号:
/************************************************/
/*单位名称:华南理工大学电信学院*/
/*模块:1位共阴数码管*/
/*创建人:景永年 日期:2006年4月25日*/
/*修改人:*/
/*功能描述:6个LED数码管显示的数字时钟*/
/*其他说明:*/
/*版本号:*/
/*************************************************/
#include "reg52.h"
#include "stdio.h"
#define uchar unsigned char
//unsigned char volatile xdata g_sec_disp _at_ 0xFFFF;
//unsigned char volatile xdata g_min_disp _at_ 0xEFFF;
//unsigned char volatile xdata g_hr_disp _at_ 0xDFFF;
unsigned char xdata g_sec_disp _at_ 0xFFFF;
unsigned char xdata g_min_disp _at_ 0xEFFF;
unsigned char xdata g_hr_disp _at_ 0xDFFF;
void time0_init(void);
unsigned char uc_sec_cnt,uc_min_cnt,uc_hr_cnt,uc_ms_cnt;
main()
{
time0_init();
uc_sec_cnt = 0;
uc_min_cnt = 0;
uc_hr_cnt = 0;
uc_ms_cnt = 0;
SP = 0x60 ;//Initiate stack
ET0 = 1;
TR0 = 1;
while(1)
{
}
}
/*************************************************/
/*time0_init*/
/*************************************************/
void time0_init(void)
{
TMOD = 0x01 ;//定时中断的初始化,定时器0工作在定时器模式
IE = 0x80 ;//开总中断;由TR0启停,16bit(模式1)
TH0 =0x3C ;//初值15536
TL0 =0xB0 ;//100ms=0.1s
}
/*************************************************/
/*time0_interrupt*/
/*************************************************/
void time0_interrupt(void) interrupt 1 using 3
{
TH0 =0x3C ;//重新装入初值15536
TL0 =0xB0 ;//100ms=0.1s
uc_ms_cnt++;
if(uc_ms_cnt==10)
{
uc_ms_cnt = 0;
uc_sec_cnt++;
if((uc_sec_cnt&0x0F)>9) /*变量uc_sec_cnt为16进制数,显示应该为10进制*/
{
uc_sec_cnt += 6; /*(uc_sec_cnt&0x0F)按位与运算*/
} /*若没有if语句,则只能是到9以后,继续数到F才进位*/
g_sec_disp = uc_sec_cnt;
g_min_disp = uc_min_cnt;
g_hr_disp = uc_hr_cnt;
if((uc_sec_cnt)>=0x60)/*注意使用0x60*/
{
uc_sec_cnt = 0;
uc_min_cnt++;
if((uc_min_cnt&0x0F)>9) /*变量uc_min_cnt为16进制数,显示应该为10进制*/
{
uc_min_cnt += 6; /*(uc_min_cnt&0x0F)按位与运算*/
} /*若没有if语句,则只能是到9以后,继续数到F才进位*/
g_sec_disp = uc_sec_cnt;
g_min_disp = uc_min_cnt;
g_hr_disp = uc_hr_cnt;
if((uc_sec_cnt)>=0x60)/*注意使用0x60*/
{
uc_min_cnt = 0;
uc_hr_cnt++;
if((uc_hr_cnt&0x0F)>9) /*变量uc_hr_cnt为16进制数,显示应该为10进制*/
{
uc_hr_cnt += 6; /*(uc_hr_cnt&0x0F)按位与运算*/
} /*若没有if语句,则只能是到9以后,继续数到F才进位*/
g_sec_disp = uc_sec_cnt;
g_min_disp = uc_min_cnt;
g_hr_disp = uc_hr_cnt;
if((uc_hr_cnt)>=0x24)/*注意使用0x24*/
{
uc_hr_cnt = 0;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -