其实点阵的原理很简单,就是操作起来麻烦一些,总的来说就是叫一部分灯亮起来,组成自己想要的图形而已,下面我就以显示数字0为例,来演示一下具体的操作过程。如图,先来确定哪些灯亮能组成0这个数字吧!
上图黄色的实心圆就是要亮的灯,想要这些个灯亮很简单,就是左面给高电平1,下面给低电平0,对应的led灯就会亮起,利用这个原理,把需要的图形画出来,然后把行和列的编码写出来,利用单片机速度很快的原理挨个点亮他们,超过了25赫兹人眼就分不出来有灯灭过了,也就是一直在亮了。接下来打开proteus,如图导入元器件并连线。
下面是点阵的导入方法:
接下来就是写C程序了。
- #include"reg52.h"
- unsigned char code column[]={0x00, 0x18, 0x24, 0x24, 0x24, 0x24, 0x18, 0x00}; //高电平
- unsigned char row[]={0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}; // 这个都是高电平,取反这位就是低电平,其他都是高电平了
- void delay(unsigned int t){ // 延时函数
- unsigned int i=0, j=0;
- for(i=0; i<t; i++){
- for(j=0; j<120; j++);
- }
- }
- void gengxin(){ // 更新函数,函数名就是拼音
- // 下面两行注释的代码只是用来检测一下P2和P3哪一端接高电平,哪一端接低电平
- // P2 = 0x7F; // 0111 1111 P2要接低电平的一端
- // P3 = 0x80; // 1000 0000 P3要接高电平的一侧
- unsigned int i=0, j=0;
- for(i=0; i<8; i++){
- P2 = ~row[i];
- P3 = column[i];
- delay(2);
- }
- }
- void main(){ // 主函数
- while(1){ // 无限循环
- gengxin(); // 一直运行更新函数
- }
- }
最后编译成hex文件导入proteus,模拟运行后,如图就能显示我们之前设计的图形0了。
联系客服