目标:用点阵点亮一个灯
1. 8x8LED点阵简介
LED点阵是由发光二极管排列组成的显示器件,在我们日常生活的电器中随处可见,被广泛应用于汽车报站器,广告屏等。
8x8点阵
生活中利用
2. 内部结构
内部结构
有点数码管,矩阵按键的影子,有两种接法,都一样其实,我们是左边的那个接法。
控制和矩阵按键差不多,行为一组,列为一组。左边的列是由74HC595芯片控制的,
上面的行是P0端口控制的
点阵模块电路
看看我们这个芯片的说明书:
引脚说明
这个芯片是8 位串行输入/输出或者并行输出移位寄存器,具有高阻关断状态。三态。
模块电路里的符号是自己可改的, 我们看引脚就知道了,
下面就是该怎么写代码了 ,注意上面内部结构图中标注了,高低位的所在位置
3.代码
#include
#include typedef unsigned int u16; typedef unsigned char u8; sbit SRCLK = P3^6;//一个上升沿把SER端的一个数据弄到输出端 sbit RCLK = P3^5; //如果是一个上升沿则准许输出端的数据输出点阵 sbit SER = P3^4; //串行输入端,输入数据 void HC595SendByte(u8 dat) { u8 a; SRCLK = 0; RCLK = 0; for(a=0;a<8;a++){ SER = dat>>7; //数据dat向右移7位,最高位变最低位 dat<<=1; //dat数据自己左移一位相当于把第二位变第一位 //为下一次做准备 SRCLK = 1; _nop_(); //一个机器周期,相当于1us _nop_(); SRCLK = 0;//为下次做准备 } RCLK = 1;//把输出端所有数据给点阵 _nop_(); _nop_(); RCLK = 0; } void main() { while(1){ HC595SendByte(0x80); P0 = 0x7f; } } SER输入数据dat是0x80(1000 0000),P0是(0111 1111),再对比内部机构的高低位所在位置是不是左上角那个灯导通了? 还要注意一下我们这个芯片移位的规则,它的规则是先移最高位的数字,但又从最低位那取,感觉有点蛋疼,但就这样没办法. 所以for循环里dat右移7位把最高位变最低,给了SER(串行输入端),下面那个意思dat不是已经完成最高位输出了吗,那就不再考虑它了,直接左移一位,把最高位挤走,次高位变最高位赋值给dat SRCLK输入1,与前面输入的0构成上升沿于是数据移走 RCLK在for循环外,因为它想等串行输入端所有数据全部移到输出端再启动,它来一个上升沿,于是塞满的输出端得到释放(输出)
上一篇:单片机小白学习之路(十二)---直流电机的控制
下一篇:单片机小白学习之路(九)---矩阵按键在数码管上显示数字
推荐阅读最新更新时间:2024-11-17 06:03
设计资源 培训 开发板 精华推荐
- 微灵医疗李骁健:脑机接口技术正在开启意识与AI融合的新纪元
- USB Type-C® 和 USB Power Delivery:专为扩展功率范围和电池供电型系统而设计
- 景昱医疗耿东:脑机接口DBS治疗技术已实现国产替代
- 首都医科大学王长明:针对癫痫的数字疗法已进入使用阶段
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计
- Melexis采用无磁芯技术缩小电流感测装置尺寸