数字时钟 89C52 单片机C语言程序
HYPERLINK "http://407672744./blog/#m=0&t=1&c=fks_087069086085080067082094084095085085081067083095087070092"STC89C52|
/************** 【数字时钟】 ****************//****【功能】1、时间显示 2、秒表 3、闹钟 4、日期显示 都可以设置 ****/#include /*包含器件配置文件*/#define uchar unsigned char /*宏定义 字符型数据 整型数据 */#define uint unsigned intuchar code H[] = {0x0f, 0x07, 0x0b, 0x0d, 0x0e}; /*按键【P3】端口断码用于按键 */char Code[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; /*显示【0 1 2 3 4 5 6 7 8 9】数字的数码管的段码 */ uchar code C[] = {0x0, 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F}; /*列扫描控制 LED1位 2位 3位 4位 5位 6位 7位 8位*/ uchar MON[]={0,31,28,31,30,31,30,31,31,30,31,30,31};uchar A;uchar BIN=0; /* 【BIN】作为倒计时开始的标志 */uchar hour = 0; /* 定义[时][分][秒] */uchar min = 0;uchar sec = 0;uint shi=12; uint fen=30;uchar Mmin=0;uchar Msec=30;uchar M0=0;uchar m=0;uchar year=9;uchar month=7;uchar month2;uchar day=19; uchar set1 = 1; /* set1=1 是调节 时分秒 set1=2时时调节 年月日 set=3时事调节闹钟 */uchar set2 = 1; /* set2=1时是调节【时】位 set2=2时事调节【分】位 */uint x = 0; /* x 每【0.01s】自加一*/void Delay(uint k);
void Timer0() /*定时器T0 5mS初始化*/{ TMOD = 0x01; /*设置*定时器0**计数方式一* (每12个时钟脉冲计数一次)或IT0=1 第二种计数方式*/ TH0 = (65536 - 10000) / 256; /*给定计时器高位赋予 初值=15536/256*/ TL0 = (65536 - 10000) % 256; /*给定计时器低位赋予 初值=15536%256 */ ET0 = 1; /*打开定时器外部终断0允许 ET1是中断器1的开关*/ EA = 1; /*打开总中断允许*/ TR0 = 1;}
void T0_srv(void) interrupt 1 /*5mS定时中断服务函数 秒 分 时 的值*/{ TH0 = (65536 - 10000) / 256; /*给定计时器高位赋予 初值=15536/256*/ TL0 = (65536 - 10000) % 256; /*给定计时器低位赋予 初值=15536%256 */ x++; if(x==100) { sec++; x=0; /*没每一秒 【sec】 加一*/ if(sec==60) { min++; sec=0; if(min==60) /*每一分钟 【min】加一*/ { min = 0; hour++; if(hour==24) { hour = 0; /*每一小时 【hour】加一*/ day++; if(year%4==0) /*是否闰年的判断*/ MON[2]=29; else MON[2]=28; if(day==MON[month]) {