基于80C51单片机的电子时钟 8位动态数码管显示时分秒
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- //==================================================//
- //== 电子信息科学与技术(2)班 ==//
- //== ==//
- //== 八位数码管电子时钟 ==//
- //== 16214088 陈朝 24小时制电子表 ==//
- //== ==//
- //==================================================//
- #include<reg51.h>
- #include"delay.h"
- unsigned char code LED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //定义共阴极LED7段显示码
- unsigned char dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定义数码管位码
- unsigned char hour=23,min=58,sec=52; //定义初始时间为23时58分52秒
- unsigned char tcount; //定义50ms计数变量
- void display(unsigned char,unsigned char,unsigned char);
- void delay(unsigned int time)//定义延时函数
- {
- unsigned int j = 0;
- for(;time>0;time--)
- for(j=0;j<125;j++);
- }
- void main(void)
- {
- TMOD=0x01; //定时/计数器0设为方式1
- TH0=(65536-50000)/256; //定时50ms初值的高八位送入TH0
- TL0=(65536-50000)%256; //定时50ms初值的低八位送入TL0
- EA=1; //开CPU中断
- ET0=1; //开定时/计数器0的中断
- TR0=1; //启动定时器0
- while(1)
- {
- display(hour,min,sec);
- }
- }
- void display(unsigned char hour,unsigned char min,unsigned sec)
- {
-
- P0=LED[hour/10]; //小时的十位送数码管1位显示
- P2=0xfe;
- delay(1);
- P2=0xff;
-
- P0=LED[hour%10]; //小时的个位送数码管2位显示
- P2=0xfd;
- delay(1);
- P2=0xff;
-
- P0=LED[10]; //横杠送数码管3位显示
- P2=0xfb;
- delay(1);
- P2=0xff;
-
- P0=LED[min/10]; //分的十位送数码管4位显示
- P2=0xf7;
- delay(1);
- P2=0xff;
-
- P0=LED[min%10]; //分的个位送数码管5位显示
- P2=0xef;
- delay(1);
- P2=0xff;
-
- P0=LED[10]; //横杠送数码管6位显示
- P2=0xdf;
- delay(1);
- P2=0xff;
-
- P0=LED[sec/10]; //秒的十位送数码管7位显示
- P2=0xbf;
- delay(1);
- P2=0xff;
-
- P0=LED[sec%10]; //秒的个位送数码管8位显示
- P2=0x7f;
- delay(1);
- P2=0xff;
- }
- void T0_time() interrupt 3 //定时器中断处理函数
- {
- TH0=(65536-50000)/256; //重新将定时50ms初值的高八位送TH0
- TL0=(65536-50000)%256; //重新将定时50ms初值的低八位送TH0
- tcount++; //定时50ms时间到加1
- if(tcount==20) //判断是否到1s
- {
- tcount=0; //到1s,变量清0
- sec++; //秒计数变量加1
- if(sec==60) //判断秒是否到60
- {
- sec=0; //到60,秒变量清0
- min++; //分计数变量加1
- if(min==60) //判断分是否到60
- {
- min=0; //到60,分变量清0
- hour++; //小时计数变量加1
- if(hour==24) //判断小时是否到24
- hour=0; //到24,小时清0
- }
- }
- }
- }
-
复制代码
所有资料51hei提供下载:
8位数码管24小时制电子表.zip
(94.15 KB, 下载次数: 95)
|