|
用74hc573实现数码管24小时时钟显示,对于74hc573芯片如果不了解可以看看文件里面的手册,不多说先上代码
- /*以下程序是根据74hc573芯片的锁存器
- **原理来写的
- **若有不懂的地方可以看看文件夹的芯片
- **手册或者百度*/
- #include<reg52.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- //串口定义没什么好说的
- sbit LSA = P2^2;
- sbit LSB = P2^3;
- sbit LSC = P2^4;
- u8 code mabiao[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~f的码表,不过这里我们就用0~9
- /*时 分 初值定义*/
- u16 sex = 0,s = 56,min = 59,h = 23;//sex中断进入次数控制变量,s,min,h是秒,分,时。
- u8 shu[8]; //控制扫描数组得到码表值
- void Int0(){
- TMOD |= 0x01; //定时器方式1
- TH0 = 0xFC; //1ms定时
- TL0 = 0x18;
- TR0 = 1;
- ET0 = 1;
- EA = 1;
- }
- void delay10us(u16 i) //10us延时
- {
- while(i--);
- }
- void shaomiao(){ //数码管扫描
- u8 i;
- for(i = 0;i <8;i++){
- switch(i){
- case 0:
- LSA = 0; LSB = 0; LSC = 0; break;
- case 1:
- LSA = 1; LSB = 0; LSC = 0; break;
- case 2:
- LSA = 0; LSB = 1; LSC = 0; break;
- case 3:
- LSA = 1; LSB = 1; LSC = 0; break;
- case 4:
- LSA = 0; LSB = 0; LSC = 1; break;
- case 5:
- LSA = 1; LSB = 0; LSC = 1; break;
- case 6:
- LSA = 0; LSB = 1; LSC = 1; break;
- case 7:
- LSA = 1; LSB = 1; LSC = 1; break;
- }
- if(i == 2||i==5){ //这句主要控制如时间:14-12-56(14点12分56秒)中间的“-”
- P0 = 0x40;
- delay10us(1);
- P0 = 0x00;
- }
- else if(i != 2||i!=5){ //扫描使数码管得值
- P0 = mabiao[shu[i]];
- delay10us(1);
- P0 = 0x00;
- }
-
-
- }
- }
- void main(){
- Int0();
- while(1){
- shaomiao();
-
- }
-
- }
- void TimeInt0() interrupt 1{
- TH0 = 0xfc;
- TL0 = 0x18;
- sex++;
-
- if(sex == 1000){ // 中断1000次即1s
- sex = 0;
- s++;
- if(s == 60){ //60s到了归零
- s = 0;
- min++;
- }
- }
- if(min == 60){ //60min到了归零
- min = 0;
- h++;
- if(h == 24) //24h到了归零(24小时格式)
- h = 0;
- }
- shu[0] = s % 10; //秒的计算
- shu[1] = s / 10;
- shu[3] = min % 10; //分的计算
- shu[4] = min / 10;
- shu[6] = h % 10; //小时的计算
- shu[7] = h / 10;
-
- }
复制代码 |
评分
-
查看全部评分
|