设计做的有关于LED点阵仿真,花了一个星期的时间完成了这个,总体来说效果是不错的,本次发帖是因为我知道51黑电子论坛是对于我们学习很好的一个平台,所以想把自己所做的成果分享给大家,谢谢!
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
自己设计8X8点阵显示屏,并调试好电路板。运用keil软件进行编程,利用单片机STC89C52来显示图案并控制图案变换。 三、实验原理 8X8点阵共由64个发光 极管组成,且每个发光极管是放置在行线和列线交叉点上,当对应的某一 列置0电平,某行置I电平,则相应的二极管就亮。 - 要设计该字的点阵字形,编好行(或列)点阵码,然后在单片机的控制下对点阵进行逐行或列扫描。
- 在人眼的暂存效应下我们会看到完整的字形,从而实现了字体在点阵显示屏上的输出,由于只控制8*8点阵显示田。故 不需要扩展单片机的I/O接口。考虑到PO口需要接上电阻,使得电路较为复杂。
- 因此利进单机的PI口来控制点阵的行。用P2口控制点阵的列。
四、实验步骤及结果 1、PCB原理图设计: 首先打开Altium designer,在【文件】中新建一个原理图,在【库】中找出与点阵原理图一样的元器件放在原理图文件中,进行连线。连接好的点阵PCB原理图如下图(1)所示。
(图1)
(图2) (1)首先打开ISIS professional,在【File】中新建一个A4大小的原理图文件。 (2)在下方的(P L DEVIVES )中找到以下器件并放入原理图文件中。 1.74HC138 、2.AT89C52、3.CAP 、4.CRYSTAL 、5.MATRIX-8X8-BLUE、6.MATRIX-8X8-RED、7.MINRES4K7、8.RESPACK-8 (3)找到以上元器件放入之后进行连线,生成原理图如(图3)所示 (图3) (4)生成原理图之后在【Keil】下新建一个工程,在建的工程下建一个文件输入程序,将这个文件加入自己建的工程中,加入的程序如下:
#define int8 unsigned char #define int16 unsigned int #define int32 unsigned long int8 code num_tab[][8]={ /*-8*8--阴码--逐行扫描--逆向(低位在前)--*/ {0x00,0x00,0x02,0x05,0x05,0x05,0x02,0x00},/*"0",0* {0x00,0x00,0x00,0x06,0x04,0x04,0x0E,0x00},/*"1",1*/ {0x00,0x00,0x07,0x05,0x02,0x01,0x07,0x00},/*"2",2*/ {0x00,0x00,0x07,0x03,0x04,0x05,0x07,0x00},/*"3",3 {0x00,0x00,0x04,0x06,0x05,0x06,0x04,0x00},/*"4",4*/ {0x00,0x00,0x07,0x01,0x07,0x05,0x07,0x00},/*"5",5* {0x00,0x00,0x06,0x01,0x0F,0x09,0x0E,0x00},/*"6",6*/ {0x00,0x00,0x0E,0x04,0x04,0x04,0x04,0x00},/*"7",7*/ COMPILER V8.02 KEIL void delay(void); void main(void){ int8 i; int8 j; while(1) { for(i=0;i<8;i++){ delay(); P0=num_tab[0]; P2=i|0x18; } } *** WARNING C280 IN LINE 62 OF KEIL.C: 'j': unreferenced local variable void delay(void){ int16 i; for(i=0;i<500;i++) }
在Keil对加入的程序进行编译如(图4)所示: (图4)
(5)对这个程序输出keil.hex文件如(图5)所示:
(图5) (6)在ISIS professional原理图中双击AT89C52,对Keil.hex文件载入到单片机原理图中如(图6)所示: (图6) (7)加入文件之后运行显示数字“0”结果如(图7)所示: (图7) 五、实验总结 通过本次点阵显示实验,使我对单片机的应用更加深入的理解,以及对PCB及Proteus 的软件的使用,综合的应用,有助于我对本门实验课更加的深刻学习,这对我以后的学习有着十分大的帮助。
仿真图下载(缺少程序): |