分享给大家 简要:本文主要内容是用8051系列和74HC595构成的的数字钟的电路设计。
一、硬件设计
利用8951的端口进行控制74HC595的RCK,SCK和/G脚,控制显示部分的内容。为了节约89X51的端口,采用两片74HC595级联的方式,一片595控制八位数码管的段码端,一片595控制八位数码管的片选端,因此我们在选不同位数码管的同时,加以输入不一样的内容,这样我们采用动态显示的方法,可以利用八位数码管进行时钟显示的目的。因为595采用级联的方式,我们在给595数据的时候,应该先进行后联一片595的数据传输。举个例子,比方说我们采用第一片进行位选的控制,然后级联的一片595进行段码的输出。那么我们在向两片595采用数据传输的时候,就应该先进行数据显示的传输,而不是进行位选数据的传输。总之,我们要根据两片595的硬件设计不一样,在软件控制部分做好软件部分的设计。
图中共由三个部分构成,即:单片控制部分,数据传输显示部分和按键调整部分。
单片控制部分核心器件由8051系列构成,外围部分这里不给出。
数据传输显示部分又由两片74HC595和两个四位的数码管组成。
按键调整部分主要是三个按键,对秒,分,小时的校准和调节。
二、软件部分
- #include <AT89X51.H>
- unsigned int tcount;
- unsigned char m;
- static unsigned char second,minute,hour;
-
- unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
- unsigned char disbuf[8]={0,0,0,0,0,0,0,0};
-
- //数据传输//
- void sdata(void)
- {unsigned char b,c,num;
- if(b==0)
- {
- b++;
- num=segbit[m];
- for(c=0;c<8;c++)
- {P3_2=0;
- P3_3=num&0x80;
- num<<=1;
- P3_2=1;
- }
-
- }
- if(b==1)
- {
- b--;
- if(m==2||m==5)
- {num=0xbf;}
- else
- {num=fseg[disbuf[m]];}
- for(c=0;c<8;c++)
- { P3_2=0;
- P3_3=num&0x80;
- num<<=1;
- P3_2=1;
- }
-
- }
- m++;
- if(m==8)
- {m=0;
- }
- }
- //数据传输//
- //延时单位//
- void delay (unsigned char h)
- { while(h--);
- }
- //延时单位//
-
- //数据输出//
- void out(void)
- {P3_4=0;
- delay(50);
- P3_4=1;
- }
- //数据输出//
- //按键控制//
- void bcon(void)
- {if(P3_5==0)
- {delay(100);
- if(P3_5==0)
- {second=0;
- while(P3_5==0);
-
- }
- }
- disbuf[0]=second%10;
- disbuf[1]=second/10;
- if(P3_6==0)
- {delay(100);
- if(P3_6==0)
- {minute++;
- while(P3_6==0);
- if(minute==60)
- {minute=0;
- }
- }
- }
- disbuf[3]=minute%10;
- disbuf[4]=minute/10;
- if(P3_7==0)
- {delay(100);
- if(P3_7==0)
- {hour++;
- while(P3_7==0);
- if(hour==24)
- {hour=0;
- }
- }
- }
-
- disbuf[6]=hour%10;
- disbuf[7]=hour/10;
-
- disbuf[0]=second%10;
- disbuf[1]=second/10;
- disbuf[3]=minute%10;
- disbuf[4]=minute/10;
- disbuf[6]=hour%10;
- disbuf[7]=hour/10;
- }
- //键盘控制//
-
- //主函数//
- void main(void)
- {
- TMOD=0x02;
- TH0=0x06;
- TL0=0x06;
- TR0=1;
- ET0=1;
- EA=1;
- while(1)
- {
- bcon();
复制代码 五、小结
本文主要利用74HC595芯片构成数字显示的一个例子,在硬件设计和软件控制部分,只要二者互相结合,可以得到不同的电路,效果也可以不一样,这主要给读者自己去发挥。
全部资料51hei下载地址:
595串行时钟显示.rar
(72.67 KB, 下载次数: 284)
|