基于proteus串入并出芯片74hc595应用实例

更新时间:2023-10-01 05:46:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1、本例中利用一片595控制一个数码管显示。实现了利用3个IO口控制8位数据的输出 2、74HC595的控制端口:

1)SH_CP(11脚):移位时钟脉冲输入端。在上升沿时移位寄存器将数据移位

2)DS(14脚):串行数据输入端。本例通过移位运算将每次移位的数据送到PWD寄存器的进位标志位CY,CY再将值传递给DS引脚,8次移位后完成一个字符的串行传送。 3)ST_CP(12脚):锁存脉冲控制端,在上升沿时移位寄存器的数据被传入存储寄存器,这时如果OE端为低电平,传入存储器的数据会直接输出到输出端Q0-Q7。本例在一个字节的移位操作完成后,通过在ST_CP端产生一个上升沿将数据送出。 4)/MR(10脚):低电平时将移位寄存器数据请0.一般情况下接VCC

5)/OE(13脚):高电平时输出端禁止输出(高阻态)。低电平时允许数据输出

使用74HC595的优点是能锁存数据,这样在移位过程中可以保持输出端的数据不变。而74HC164则没有这种功能。 //利用74HC595实现端口扩展

#include // 寄存器头文件包含

#include // 空操作函数,移位函数头文件包含 sbit SH_CP = P2^0; //移位时钟脉冲端口 sbit DS = P2^1; // 串行数据输入端口 sbit ST_CP = P2^2; //锁存端口 unsigned char temp; unsigned

char

code

disp_buff[]

=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管段码表 //延时函数

void delayms(unsigned int x)

{

unsigned char i; while(x--) {

for(i = 0;i < 120;i++); } }

//串行输入函数 void input_595(void) {

unsigned char i; for(i = 0;i < 8;i++) {

temp <<= 1; // 数据移位

DS = CY; //产生一个时钟上升沿,使数据移位 SH_CP = 1; // _nop_(); _nop_(); SH_CP = 0; } }

//数据并行输出函数 void output_595(void) {

ST_CP = 0; // 锁存器端口产生一个上升沿,将数据输出

_nop_(); ST_CP = 1; _nop_();

ST_CP = 0; //锁存数据 } //

void main(void) {

unsigned char i; while(1) {

for(i = 0;i < 10;i++) {

temp = disp_buff[i]; //数码管显示

input_595(); //将一个字节的数据串行输入595

output_595(); //595移位寄存器数据传输到存储寄存器,并输出到数据端口 delayms(500); } } }

3、在keil c51中新建工程ex63,编写如下程序代码,编译并生成ex63.hex文件

4、在proteus中新建仿真文件ex63.dsn,电路原理图如下所示

5、将ex63.hex文件载入at89c51中,启动仿真,按动拨码开关,观察运行结果。下图是某一时刻程序运行结果

本文来源:https://www.bwwdw.com/article/kcvd.html

Top