74HC595应用.docx
- 文档编号:10790556
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:8
- 大小:21.45KB
74HC595应用.docx
《74HC595应用.docx》由会员分享,可在线阅读,更多相关《74HC595应用.docx(8页珍藏版)》请在冰豆网上搜索。
74HC595应用
74HC595应用(动态扫描数码管显示)
74HC595是具有8位移位寄存器和一个存储器,三态输出功能。
移位寄存器和存储器是分别的时钟。
数据在SCK的上升沿输入,在RCK的上升沿进入的存储寄存器中去。
如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。
移位寄存器有一个串行移位输入(SI),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。
QB--|1 16|--Vcc
QC--|2 15|--QA
QD--|3 14|--SI
QE--|4 13|--/G
QF--|5 12|--RCK
QG--|6 11|--SCK
QH--|7 10|--/SCLR
GND-|8 9|--QH'
74595的数据端:
QA--QH:
八位并行输出端,可以直接控制数码管的8个段。
QH':
级联输出端。
我将它接下一个595的SI端。
SI:
串行数据输入端。
74595的控制端说明:
/SCLR(10脚):
低点平时将移位寄存器的数据清零。
通常我将它接Vcc。
SCK(11脚):
上升沿时数据寄存器的数据移位。
QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。
(脉冲宽度:
5V时,大于几十纳秒就行了。
我通常都选微秒级)
RCK(12脚):
上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。
通常我将RCK置为低电平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。
我通常都选微秒级),更新显示数据。
/G(13脚):
高电平时禁止输出(高阻态)。
如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。
比通过数据端移位控制要省时省力。
74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。
这在串行速度慢的场合很有用处,数码管没有闪烁感。
应用如下:
以下是用C语言编写的,采用动态扫描方式显示0123这四个数字,此程序是经过模拟仿真的。
//#################################################################
//程序名称:
8位数码管显示程序
//程序功能:
让8位数码管显示display_7leds[8]中的内容
//程序说明:
使用时改变display_7leds[8]中的内容,调用wr7leds()函数即可
//#################################################################
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
//#############管脚定义#######################
#definePORT_LEDP0 //LED位选信号输入管脚
sbitsclk=P2^0;//595移位时钟信号输入端
sbitst=P2^1; //595锁存信号输入端
sbitda=P2^2; //595数据信号输入端
//#############################################
//共阴极数码管显示代码:
76543210
// abcdef
ucharcodeLED_7SEG[16]={0xfc,0x60,0xda,0xf2,//0,1,2,3,
0x66,0xb6,0xbe,0xe0,//4,5,6,7,
0xfe,0xe6,0xee,0x3e,//8,9,A,b,
0x9c,0x7a,0x9e,0x8E};//C,d,E,F
//#####################################################
//名称:
wr595()向595发送一个字节的数据
//功能:
向595发送一个字节的数据(先发低位)
//#####################################################
voidwr595(ucharwrdat)
{
uchari;
sclk=0;
st=0;
for(i=8;i>0;i--)//循环八次,写一个字节
{
da=wrdat&0x01;//发送BIT0位
wrdat>>=1;//要发送的数据右移,准备发送下一位
sclk=0; //移位时钟上升沿
_nop_();
_nop_();
sclk=1;
_nop_();
_nop_();
sclk=0;
}
st=0;//上升沿将数据送到输出锁存器
_nop_();
_nop_();
st=1;
_nop_();
_nop_();
st=0;
}
//##########################################################
//延时函数
//##########################################################
voiddelay(uintdel)
{
while(del--)
{;
}
}
//##########################################################
//名称:
wr7leds()8个led显示数字函数
//功能:
向595发送一个字节的数据,然后发送位选信号
//##########################################################
voidwr7leds(void)
{
uchari,wx;
wx=0x01; //位选信号初始化
for(i=0;i<4;i++)//循环4次写4个数据
{
wr595(LED_7SEG[i]); //传送显示数据
PORT_LED=~wx; //送位选信号
wx<<=1; //位选信号左移,准备显示下一个数字
delay(50); //延时,(决定亮度,和闪烁)
}
}
//##########################################################
//主函数
//##########################################################
main(void)
{
while
(1)
{
wr7leds();//向74HC595发送数据并显示
}
}
硬件电路:
现在很多版本键盘程序很繁琐,这里利用ASM中扫描键盘地方法改写的C语言程序,简单易懂。
显示电路为74HC595动态扫描数码管显示0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F这16个字符。
其中sbitsclk=P2^0;//595移位时钟信号输入端
sbitst=P2^1; //595锁存信号输入端
sbitda=P2^2;//595数据信号输入端 P0口作为位选端
#include
#include
#defineucharunsignedchar
#defineuintunsifnedint
//#############管脚定义#######################
#definePORT_LEDP0 //LED位选信号输入管脚
sbitsclk=P2^0;//595移位时钟信号输入端
sbitst=P2^1; //595锁存信号输入端
sbitda=P2^2; //595数据信号输入端
ucharkey;//按键号
//#############################################
//共阴极数码管显示代码:
ucharcodeled_7seg[16]={0xfc,0x60,0xda,0xf2,//0,1,2,3,
0x66,0xb6,0xbe,0xe0,//4,5,6,7,
0xfe,0xe6,0xee,0x3e,//8,9,A,b,
0x9c,0x7a,0x9e,0x8E};//C,d,E,F
//按键消抖延时函数
voiddelay()
{
uchari;
for(i=600;i>0;i--);
}
uchargetkey() //返回按键编号0-15
{
uchark,t,i,j;
k=P1; //读端口数据
k&=0xf0;//保留高4位
i=0;
i++;
while((k&0x10)&&i<4) //扫描高4位知道发现某位为0
{
i++;
k>>=1;
} //i即为列号
k=0x01;
j=0;
while(j<4)
{
P1=0xff^k; //对应列置低电平
_nop_();
t=P1;
t^=0xff;
t&=0xf0;
if(t)
break;
j++;
k<<=1;
}
k=j*4+i; //k为按键号
return(k-1);
}
//#####################################################
//名称:
wr595()向595发送一个字节的数据
//功能:
向595发送一个字节的数据(先发低位)
//#####################################################
voidwr595(ucharwrdat)
{
uchari;
sclk=0;
st=0;
for(i=8;i>0;i--) //循环八次,写一个字节
{
da=wrdat&0x01; //发送BIT0位
wrdat>>=1; //要发送的数据右移,准备发送下一位
sclk=0; //移位时钟上升沿
_nop_();
_nop_();
sclk=1;
_nop_();
_nop_();
sclk=0;
}
st=0; //上升沿将数据送到输出锁存器
_nop_();
_nop_();
st=1;
_nop_();
_nop_();
st=0;
}
//##########################################################
//名称:
wr7leds()8个led显示数字函数
//功能:
向595发送一个字节的数据,然后发送位选信号
//##########################################################
voidwr7leds()
{
uchartemp;
temp=led_7seg[key];
wr595(temp); //传送显示数据
PORT_LED=0; //送位选信号
}
//主函数
voidmain()
{
P1=0xf0;//发全0行扫描码
while
(1)
{
P1=0xf0;
wr7leds();//调显示函数
if((P1&0xf0)!
=0xf0)//若有键按下
{
delay();//延时去抖动
if((P1&0xf0)!
=0xf0)//延时后在判断一次,去除抖动影响
{
key=getkey();
}
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 74 HC595 应用
![提示](https://static.bdocx.com/images/bang_tan.gif)