51单片机加74hc595驱动多个数码管静态显示的程序设计

51单片机加74hc595驱动多个数码管静态显示的程序设计,第1张

1、首先数码管分为1位,4位,8位,4位和8位的又分为共阴和共阳数码管。

2、共阳数码管,即阳极全部连接在一起,单片机接口给低电位即可点亮对应的段位。

3、可利用MCS-51系列单片机的芯片AT89C52的P3.4,P3.5,P3.6,P3.7进行计时并在数码管上显示时间,作为按键的入口。

4、共阴数码管,即阴极全部连接在一起,单片机接口给高电位即可点亮对应的段位。

5、其中“开始”按键当开关由上向下拨时开始计时,此时若再拨“开始”按键则数码管暂停;“清零”按键当开关由上向下拨时数码管清零,此时若再拨“开始”按键则又可重新开始计时。

#include <mega16.h>

#include <delay.h>

//数据信号 发送的数据 高电平high 1 低电平low pc0接74HC595的数据输入圈

#define HC595_DATA_HIGH PORTC |=(1<<0)

#define HC595_DATA_LOW PORTC &=~(1<<0)

//输出锁存信号线

#define HC595_LCLK_HIGH PORTC |=(1<<1)

#define HC595_LCLK_LOW PORTC &=~(1<<1)

//输入时钟线 把数据写入74HC595 pc0只决定电平大小 给上升沿才能输入

#define HC595_SCLK(串行时钟)_HIGH PORTC |=(1<<2)

#define HC595_SCLK_LOW PORTC &=~(1<<2)

//共阴数码表

unsigned char segnum[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x7c}

void Send74HC595(unsigned char data)

{

unsigned char i=0

for(i=0i<8i++)

{

if(data &0x80)//先发高位

HC595_DATA_HIGH

else

HC595_DATA_LOW

HC595_SCLK_HIGH//给一个上升沿

delay_us(2)

HC595_SCLK_LOW//给一个下降沿

data<<=1 //数据位移

}

}

void HC595Display(unsigned char num,unsigned char data)

{

HC595_LCLK_LOW

HC595_SCLK_LOW

Send74HC595(~(0x01<<num))//发送位选

Send74HC595(segnum[data])//发送段选

HC595_LCLK_HIGH//上升输出锁存

delay_us(2)

}

void main (void)

{

MCUCSR=0x80

MCUCSR=0x80

DDRC|=(1<<0)|(1<<1)|(1<<2)// DDRC 不能=某值 它使pc0 pc1 pc2打开

while (1)

{

HC595Display(0,1)

HC595Display(1,2)

HC595Display(2,10)

HC595Display(3,0)

HC595Display(4,3)

HC595Display(5,10)

HC595Display(6,1)

HC595Display(7,0)

}

}

    74HC595驱动的数码管电路板是Arduino常用的扩展板。某宝上卖的经常是两块芯片驱动4位数码管或者8位数码管的电路板。

74HC595是一个串行移位寄存器,两块芯片级联,芯片U1的串行输出引脚连接芯片U2的串行输入引脚。当串口输入8个比特数据data1时,数据data1在U1芯片中;当串口再次输入8个比特数据data2时,data1进入到芯片U2中,data2留在芯片U1中。

综上所述,Arduino单片机应该给数码管扩展板两个char形数据,data1是数码管显示的数字,data2是让哪个数码管亮的位置信息。两个Byte的数据串行发送完毕后,RCLK接口输出一个上升沿信号,所有的数据由寄存器传送到锁存器中。

顺便强调一下,下面电路图中的P2是连接单片机的接口,P1是多块扩展板的级联接口。不要把线接错了呦!

想要看74HC595原理的朋友,可以查看下面的链接:

https://wenku.baidu.com/view/d69cdbbc19e8b8f67c1cb977.html

扩展板的驱动函数可以用下面的程序:

https://github.com/supermfc/Tube595

程序应该没有问题,因为我的电路板接口接反了,所以被迫研究了扩展板和芯片的原理,全是泪水啊!

Arduino IDE中有一个库函数shiftOut,可以方便地实现串并转换。顺便给IDE点个赞,reference功能很好用。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11105597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存