完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
说明:8 位串行输入/输出或者并行输出移位寄存器,具有高阻关断状态。三态。 应用:串行到并行的数据转换。 15 和 1 到 7 脚 QA–QH:并行数据输出 9 脚 QH 非:串行数据输出 10 脚 SCLK 非( MR) : 低电平复位引脚 11 脚 SCK( SHCP) : 移位寄存器时钟输入 12 脚 RCK( STCP) : 存储寄存器时钟输入 13 脚 G 非( OE) : 输出有效 14 脚 SER( DS) : 串行数据输入 595 是具有 8 位移位寄存器和一个存储器,三态输出功能。 真值表解读 G =1,其他=x;QA-QH为三态状态(可能高或低) RCK,SCK任意,SCLR=0,G =0,清空移位寄存器 SCK=上升沿时, SCLR=1,G =0,数据进入移位寄存器 RCK=上升沿时,SCLR=1,G *=0, 移位寄存器的内容转移到输出锁存器 时序图 开发板原理图 由真值表可知,对数据读写操作SRCLR*=1,OE*=0就好了,所以分别接GND、VCC 软件设计 void Hc595SendByte(u8 dat)// 74H595 发送一个字节的数据 { u8 a; SRCLK = 1; RCLK = 1; for(a=0;a<8;a++) //发送 8 位数 { SER = dat >> 7; //从最高位开始发送 dat <<= 1; SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } RCLK = 0; _nop_(); _nop_(); RCLK = 1; } 在main()中 ledNum = ~0x01; while(1) { Hc595SendByte(ledNum);// ~0x01, ~0x02, ~0x04,一次点亮led灯 ledNum = _crol_(ledNum, 1); delay(50000); } 课后作业 (1)设计一个 0-9 数字循环显示器。(温馨提示:在 main 函数内使用 for 循环语句,间隔一定时间调用数码管段码数组数据) while(1) { for(i=0;i<15;i++) { delay(50000); Hc595SendByte(~smgduan); delay(50000); } } (2)使用 74HC595(A)的并行输出口连接动态数码管的位选,实现在动态 数码管上显示 0-7。 //595循环位选,smgduan;数码管循环显示。 u8 i,ledNum; ledNum = ~0x01; while(1) { for(i=0;i<8;i++) { Hc595SendByte(ledNum); ledNum = _crol_(ledNum, 1); GPIO_DIG=smgduan; delay(100); GPIO_DIG=0x00;//消隐 } } LED 点阵实验 开发板原理图 级联时,两条时钟线是连在一起的,输出QH*接到下一个595的串行输入口SER 软件设计 /*********注意RCLK在reg51文件中已经定义过了,你得起一个新名字 //第一个字节数据,会从SEG传送到最后一个595,最后一个字节数据,送给第一个595; //第一个字节控制列NEG8~NEG16;最后一个字节数据控制行POS1~POS7 void Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4) { u8 a; SRCLK = 1; RCLK = 1; for(a=0;a<8;a++) //发送 8 位数 { SER = dat1 >> 7; //从最高位开始发送 dat1 <<= 1; SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送 8 位数 { SER = dat2 >> 7; //从最高位开始发送 dat2 <<= 1; SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送 8 位数 { SER = dat3 >> 7; //从最高位开始发送 dat3 <<= 1; SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送 8 位数 { SER = dat4 >> 7; //从最高位开始发送 dat4 <<= 1; SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } RCLK = 0; _nop_(); _nop_(); RCLK = 1; } keil错误解析 9.18.c(11): warning C206: ‘Hc595SendByte’: missing function-prototype 原因:这个函数没有定义。需要在调用’Hc595SendByte’这个函数前先声明。 解决方法:添加.h文件 *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL 原因:缺函数声明呀,实现函数呀 解决方法:看.c.h,都有不 APP74hc595.h(8): error C231: ‘RCLK’: redefinition 原因:reg52.h中定义过RCLK 很不舍,接下来的日子,我要断更了,人总是要顺应时势发展的,眼看开学在即,借本考试也会接踵而来,我不能再由着性子,搞单片机了,接下来的日子,我要加油! 待到合适的时间,我会卷土重来。 |
|
|
|
只有小组成员才能发言,加入小组>>
3323 浏览 9 评论
3000 浏览 16 评论
3498 浏览 1 评论
9073 浏览 16 评论
4093 浏览 18 评论
1194浏览 3评论
614浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
603浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2342浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1902浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 15:40 , Processed in 1.201090 second(s), Total 81, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号