目标:用点阵点亮一个灯
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-12 20:14
设计资源 培训 开发板 精华推荐
- STCF03TBR 带I2C接口的大功率白光LED驱动器典型应用
- ADK-8470,HI-8470 16 传感器阵列评估板 + ARINC 429 输出、接地/开路或电源/开路传感器
- #第五届立创电子设计大赛#异形开发板
- 使用具有 PowerPath 和 2A 输入限制的 LTC4162EUFD-LAD 9V 至 35V、2 节、3.2A 充电器的典型应用
- 使用 ON Semiconductor 的 KA7810E 的参考设计
- 使用 Richtek Technology Corporation 的 RT8095 的参考设计
- 使用 LTC3637MPDHC 24.5V 至 76V 输入至 24V 输出和 350mA 输入电流限制的典型应用
- 含原理图+电路图+程序的波形发生器
- MC33074ADR2G 低压峰值检测器的典型应用
- 使用 Analog Devices 的 ADP8140 的参考设计