标题:
单片机74hc595串行数码管时钟显示程序+Proteus仿真
[打印本页]
作者:
skcxks
时间:
2019-6-1 00:06
标题:
单片机74hc595串行数码管时钟显示程序+Proteus仿真
分享给大家 简要:本文主要内容是用8051系列和74HC595构成的的数字钟的电路设计。
一、硬件设计
利用8951的端口进行控制74HC595的RCK,SCK和/G脚,控制显示部分的内容。为了节约89X51的端口,采用两片74HC595级联的方式,一片595控制八位数码管的段码端,一片595控制八位数码管的片选端,因此我们在选不同位数码管的同时,加以输入不一样的内容,这样我们采用动态显示的方法,可以利用八位数码管进行时钟显示的目的。因为595采用级联的方式,我们在给595数据的时候,应该先进行后联一片595的数据传输。举个例子,比方说我们采用第一片进行位选的控制,然后级联的一片595进行段码的输出。那么我们在向两片595采用数据传输的时候,就应该先进行数据显示的传输,而不是进行位选数据的传输。总之,我们要根据两片595的硬件设计不一样,在软件控制部分做好软件部分的设计。
0.png
(74.05 KB, 下载次数: 70)
下载附件
2019-6-1 03:22 上传
图中共由三个部分构成,即:单片控制部分,数据传输显示部分和按键调整部分。
单片控制部分核心器件由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芯片构成数字显示的一个例子,在硬件设计和软件控制部分,只要二者互相结合,可以得到不同的电路,效果也可以不一样,这主要给读者自己去发挥。
0.png
(13.52 KB, 下载次数: 83)
下载附件
2019-6-1 03:23 上传
全部资料51hei下载地址:
595串行时钟显示.rar
(72.67 KB, 下载次数: 284)
2019-6-1 00:05 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
Nilo
时间:
2019-6-1 22:33
谢谢分享!!!!!
作者:
236131948
时间:
2019-6-18 10:05
新手,刚好想实现595的时钟电路软件,下来学习
作者:
欧阳云天
时间:
2019-6-18 18:45
请教一下,595写数据的时候是写最后一片再倒回来吗?
作者:
dong123d
时间:
2019-6-18 20:32
请教一下,595写数据的时候是写最后一片再倒回来吗
作者:
iaskall
时间:
2019-12-27 20:45
值得参考
作者:
jxdianqi
时间:
2020-4-12 23:05
收下啦,谢谢分享
作者:
1401372496
时间:
2020-4-13 10:32
有汇编版的吗
作者:
elec_hangzhou
时间:
2021-11-2 16:34
某一个宝上的都没有C51的程序, 刚好又买了595模块,学习一下,谢谢分享。
作者:
kz0018
时间:
2022-11-13 11:46
驱动数码管还是7219比较方便好用,但595有价格优势,线路布局也方便点儿。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1