1、二、 单片机组成部分图1 系统结构框图三、 硬件电路设计本电路是由AT89C51单片机为控制核心,低功耗;时钟源电路有很多种,比如阻容低速时钟源、普通晶体时钟源、带缓冲放大的晶体时钟源等等,考虑到电路稳定及材料选购等方面,决定采用普通晶体时钟源,其中晶体用12MHZ的石英晶振;复位电路结合实际应用功能的实现,采用上电复位;显示部分由1616点阵LED显示屏显示;行驱动电路采用74LS154,列驱动电路采用74LS595。四、 1616点阵LED显示屏上滚屏显示原理在UCDOS中文宋体字库中,每一个字由16行16列的点阵组成显示。如果要在1616点阵屏以上滚屏的方式显示以字体,则需以以下方式进行
2、显示。在1616点阵屏中,我们可以把点阵屏看成16行LED组成,且每行有16个LED灯。在本例中单片机首先将第二行的显示信息给第一行,使第一行显示图像变成第二行所要显示的。以“我”字为例,原第一行由左到右排列,为A灭,B灭,C灭,D灭,E灭,F亮,G亮,H灭,I灭,J亮,K灭,M灭,N灭,O灭,P灭。即二进制111110*1转换为16进制为F9h,BFh。原第二行由左到右排列,为A灭,B灭,C亮,D亮,E亮,F灭,G灭,H灭,I灭,J亮,K灭,L亮,M灭,N灭,O灭,P灭。即二进制110001*1转换为16进制为C7h,Afh。单片机将第二行信息给第一行取代第一行原信息,故第一行由左到右排列,
3、为A灭,B灭,C灭,D灭,E灭,F亮,G亮,H灭,I灭,J亮,K灭,L灭,M灭,N灭,O灭,P灭。接着将第一行的信息给第十六行,第三行的信息给第二行,第四行的信息给第三行,依此类推。按照这个方法,继续进行下面的扫描。最终点阵屏在视觉上的显示效果是“我”字慢慢往上移。五、 1616点阵LED显示屏左跑马显示原理图图2 中断原理 图3 调用子程序原理图4 显示驱动程序流程图 图5 系统主程序流程图附录附录1:电路图图 6总电路图 图 7 74LS154行驱动模块图8 2个74HC595级联附录二:实验仪器清单1、51单片机开发板2、LED灯256个及配套灯座256个3、三极管8550二十个4、排针
4、40个5、杜邦线、导线若干条6、74HC589芯片及配套芯片座2套7、芯片74LS154及配套芯片座1套8、电阻4716个,20016个附录三:系统程序清单#include #define BLKN 2 /列锁存器数sbit G = 0x97; /P1.7为显示允许控制信号端口sbit RCLK = 0x96; /P1.6为输出锁存器时钟信号端sbit SCLR = 0x95; /P1.5为移位寄存器清端void delay(unsigned int); /延时函数unsigned char data dispram32; /显示缓存void main(void) unsigned char
5、code Bmp32= 0xF9,0xBF,0xC7,0xAF,0xF7,0xB7,0xF7,0xB7,0xF7,0xBF,0x00,0x01,0xF7,0xBF,0xF7,0xB7, 0xF1,0xD7,0xC7,0xCF,0x37,0xDF,0xF7,0xAF,0xF6,0x6D,0xF7,0xF5,0xD7,0xF9,0xEF,0xFD /*我*/, 0xFF,0x07,0xC0,0x6F,0xED,0xEF,0xF6,0xDF,0xC0,0x01,0xDD,0xFD,0xBD,0xFF,0xC0,0x03, 0xFB,0xFF,0xF8,0x0F,0xF3,0xDF,0xF4,0xBF
6、,0xEF,0x3F,0x9C,0xCF,0x73,0xF1,0xCF,0xFB /*爱*/, 0xF7,0xDF,0xF9,0xCF,0xFB,0xBF,0xC0,0x07,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,0xDE,0xF7, 0xC0,0x07,0xDE,0xF7,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF /*单*/, 0xFF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBB,0xE0,0x01,0xEF,0xFF,0xEF,0xFF,0xEF,0xFF, 0xE
7、0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xDF,0xEF,0xDF,0xEF,0xBF,0xEF,0x7F,0xEF /*片*/, 0xEF,0xFF,0xEF,0x07,0xEF,0x77,0x01,0x77,0xEF,0x77,0xEF,0x77,0xC7,0x77,0xCB,0x77, 0xAB,0x77,0xAF,0x77,0x6E,0xF7,0xEE,0xF5,0xED,0xF5,0xED,0xF5,0xEB,0xF9,0xEF,0xFF /*机*/, 0xF8,0x3F,0xE7,0xCF,0xDF,0xF7,0xBF,0xFB,0xB3,0x9
8、B,0x73,0x9D,0x7F,0xFD,0x7F,0xFD, 0x6F,0xED,0x67,0xCD,0xB3,0x9B,0xB8,0x3B,0xDF,0xF7,0xE7,0xCF,0xF8,0x3F,0xFF,0xFF /*/;register unsigned char i,j,k,l;SCON = 0x00; /串口工作模式0:移位寄存器方式TMOD = 0x01; /定时器T0工作方式1:16位方式TR0 = 1; /启动定时器T0P1 = 0x3f; /P1端口初值:允许接收、锁存、显示IE = 0x82; /允许定时器T0中断while (1) delay(2000); /延时
9、2秒 for (i=0;i32;i+) /显示效果:卷帘出 disprami = Bmp5i; if (i%2) delay(100); delay(3000); i6; i+) /显示效果:上滚屏 for (j=0; j16; j+) for (k=0; k15; k+) dispramk*BLKN = dispram(k+1)*BLKN; dispramk*BLKN+1 = dispram(k+1)*BLKN+1; dispram30 = Bmpij*BLKN; dispram31 = Bmpij*BLKN+1; delay(100);delay(3000);左跑马2; for (k=1;
10、9; for (l=0; l l+) dispraml*BLKN = dispraml*BLKN7; dispraml*BLKN+1 = dispraml*BLKN+1(8-k);卷帘入 disprami = 0x00;/*延时函数*/void delay(unsigned int dt)register unsigned char bt;for (; dt; dt-) for (bt=0; bt255; bt+);/*显示屏扫描(定时器T0中断)函数*/void leddisplay(void) interrupt 1 using 1register unsigned char i, j=BLKN;TH0 = 0xF8; /设定显示屏刷新率每秒62.5帧TL0 = 0x30;i = P1; /读取当前显示的行号i = +i & 0x0f; /行号加1,屏蔽高4位do j-; SBUF = disprami*BLKN + j; /送显示数据 while (!TI); TI = 0;while (j); /完成一行数据的发送G = 1; /消隐(关闭显示)P1 &= 0xf0; /行号端口清RCLK = 1; /显示数据打入输出锁存器P1 |= i; /写入行号RCLK = 0; /锁存显示数据G = 0; /打开显示
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1