
这个程序相对来说比较复杂,跟很多外围电路的设计有关系,比如你的点阵信息的来源是通过上位机发送还是固化在单片机里面。上位机发送的是直接点阵信息还是字符的ascii码,然后根据ascii码去查找字库芯片,都有不同的设计思路。不是一两句话可以说清的。
各种显示,时间,温度等功能。
给你一个参考:
可以去我的博客下载:
LED 点阵汉字显示屏
概 述
这次比赛制作由于时间紧,同时为了降低制作难度, 仅作了四个字的轮流显示,实际使用时可根据这个原理自行扩充显示的字数。
设计制作主要运用于学校的宣传栏,如:本科评估的各种信息,学校学院重要通知,天气预报等各种信息。
系统设计
一 硬件电路
(1)系统组成:
主要硬件电路:LED 点阵条屏是由 16 个 88 的 LED 点阵块组成,形成 1664 矩形点阵,以AT89S51为控制核心。显示屏的其他主要硬件有:
① 带锁存输出的 8位移位寄存器74HC595,作为LED的列线驱动输入;
② 四六译码器 74LS154,作为 LED行线的译码选择(实际制作中考虑成本问题改为两个74HC138联合);
③ 三极管 9012,连接四六译码器的十六个输出端,作为开关使用,驱动LED的行线。
图二 AT89S51单片机最小系统
AT89S51相关器件连接的接脚如下:PA0-PA3连接4-16译码器的输入口A,B,C,D;PB0-PB3连接74HC595的输入口 SI,SCK,RCK;PD6-PD7作串口通信使用连接RxD,TxD 两个三八译码器74LS138组成的16个输出端连接 16 个 9012的三极管的基极 B,发射极E 连接5V电源,集电极C连接到三个汉字点阵的16 个行线控制端。 点阵的 48 列数据线驱动由 6 片 74HC595 级联组成,前一片 74HC595 的 Q’H 引脚连接下一片的SI引脚,各片的SCK、RCK、SRCLR、G引脚分别并联。
(2)LED点阵块
图三 LED点阵块
88的LED点阵为单色行共阴模块,单点的工作电压为正向(Vf)=18 v ,正向电流(IF)= 8-10 mA 。静态点亮器件时(64点全亮)总电流为 640mA,总电压为 18 v,总功率为 115 W。动态时取决于扫描频率(1/8或1/16秒),单点瞬间电流可达 80-160 mA。 1616点阵静态时161610mA,动态时单点电流80-160mA。
实际测试:整机电流700 mA
(2) 移位寄存器74HC595
图四 74HC595内部逻辑图
74HC595是带锁存输出的8位移位寄存器,其管脚见下图,其中SI是串行数据的输入端;VCC、GND分别为电源和地;RCK是存储寄存器的输入时钟,SCK是移位寄存器的输入时钟,SCLR是移位寄存器的输入清除,Q’H是串入数据的输出,G是对输入数据的输出使能控制,QA~QH串入数据的并行输出。从SI口输入的数据在移位寄存器的SCK脚上升沿的作用下输入到74HC595中,在RCK脚的上升沿作用下将输入的数据锁存在74HC595中,当G为低电平时时,数据并行输出。SCLR为移位寄存器的输入清除端。
(3) 74HC138以及驱动电路
图五 74HC138以及驱动电路实物图
4-16线译码器(用两块74HC138组成),其管脚如图所示,A,B,C,D为译码的输入端,值的区间从0000到1111,Y1~Y15是对应A,B,C,D四个输入引脚的输出脚,其中选中的线用输出低电平,没有选中的输出高电平,G1、G2是使能端,只有输入相应D低电平才能使译码器正常工作。
驱动三极管为16个9012,用万能板焊接。
二 软件设计
单片机方的程序设计 单片机在LED点阵汉字显示系统中主要负责数据的接收、存储和扫描显示 LED点阵屏三大主要功能。串行移动的子程序设计 这是一个通用子程序,在显示子程序中都要被调用,功能是移位寄存器 74HC595接收单片机发出的点阵行数据,逐位移动到对应位置后再进行锁存和输出工作,同时对四六译码器进行开关工作,控制屏幕的显示。
部分程序:初始化程序:
#include <AT892051H>
#define uchar unsigned char
#define uint unsigned int
#define SPEED 3
uchar col,disrow;
uint word;
uchar code HZ[];
uchar BUFF[6];
void loadoneline(void);
void sendoneline(void);
发送部分程序:
void sendoneline(void)
{
char s;uchar inc;
if(col<8)inc=0;else inc=1;
for(s=4+inc;s>=0+inc;s--)
{
SBUF=two_onebyte(BUFF[s],BUFF[s+1]);
while(!TI);TI=0;
}
}
三 调试
调试主要分为硬件调试和软件调试:
硬件调试:在焊接电路板的时候,应该从最基本的最小系统开始,分模块,逐个进行焊接测试。在对各个硬件模块进行测试时,要保证软件正确的情况下去测试硬件,要不然发生错误时,不知道到底是哪一方出错了。当然,在设计的过程中也存在着失误和不足。
软件调试:软件部分是先参考书上的例子,然后自己根据硬件电路写程序,由于以前所学是C语言,所以这个系统在编写程序过程中都采用C语言编写。刚刚开始,编写不会一次性通过,经过仔细分析修改最后编译成功。但是,在实际写如S51中,LED显示屏出现各种各样的乱码,通过再次认真仔细分析多次修改程序后,程序能够正常运行。
四 总结
在 LED点阵汉字显示屏的设计过程中,学到了很多东西,基本了解了整个嵌入式开发的流程。例如,在进行整个设计之前,应该先根据需求分析,对单片机进行选型,然后对各个硬件模块进行搭试。在画PCB电路板的时候,要注意基本的布板原则。例如,在进行PCB布板的时候,滤波电容不够靠近芯片的电源脚和地脚。在进行搭试点阵块的时候,因为电压过高,导致点阵块损坏。这次第一届电子设计制作,本人受益非浅,在以后的电子设计制作过程中一定吸取教训。
参考文献:
[1]何立民.单片机应用技术选编[M].北京:北京航空航天大学出版社.1998.
[2]杜春雷.如何使用Visual Basic 6.0 dP3~ [M].北京:机械工业出版社,1999.
[3]孙育才.新型AT89S51系列单片机及其应用[M].北京:清华大学出版社.2005.
经验小结:
1,在头文件增加“#pragma SRC(LEDASM)”语句,可以生成汇编文件,对于理解
汇编语言程序是有很大的好处的。
2,在制作PCB板过程中,业余条件下很难做双面板,不地不做的时候考虑如何布
线才能达到最优最好。
3,在“”;Keil C51软件的安装,按照该软件
的安装,可以得到无限量的程序编译。因为在写程序的过程中发现,KEIL C51 只
能编译2K的程序代码,不够用。用C编写,感觉很容易理解。程序编写过程中最好
是先参考别人的程序,再修改能不能实用自己的程序要求,之后才自己去编写完
全属于自己的程序。
4,单片机仿真软件 PROTEUS 也是很不错的。在上面可以仿真很多东西。
设想:
1,可以挂在学校的十字路口,提供日期,时间,温度,湿度等天气信息,服务广大同学。
2,可以和电脑相连接,实现同步显示。做一个完整的系统。
进一步学习下面的软件或者语言(知识):
BV
protel 99 se
keil c51
proteus
c/c++
easy isp 51
Easy 51Proexe
2007-5-25
下面为静止显示“农林大学”四个字的程序:
#include <REG51h>
#define uchar unsigned char
#define uint unsigned int
uchar disrow;
uchar code HZ[];
uchar BUFF[9];
void loadonelineandsend(void);
//
//
void main(void)
{
while(1)
{
for(disrow=0;disrow<16;disrow++)
{
loadonelineandsend();
P1=0x10+disrow;
P1=0x20+disrow;
}
}
}
//
void loadonelineandsend(void)
{
uchar s;
int q;
q=0;
for(s=0;s<4;s++)
{
BUFF[q]=HZ[32s+disrow2];
BUFF[q+1]=HZ[32s+disrow2+1];
SBUF=255-BUFF[q+1];
while(!TI);TI=0;
SBUF=255-BUFF[q];
while(!TI);TI=0;
}
}
//
/农林大学/
uchar code HZ[]=
{
0x01,0x00,0x01,0x00,0x7F,0xFE,0x41,0x02,0x81,0x04,0x02,0x00,0x02,0x08,0x05,0x18,
0x09,0x20,0x18,0xC0,0x28,0x80,0x48,0x40,0x88,0x30,0x0A,0x0E,0x0C,0x04,0x08,0x00,
0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x24,0xFE,0xFE,0x08,0x20,0x18,0x60,0x1C,0x70,
0x2A,0xA8,0x28,0xAE,0x49,0x24,0x8A,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x02,0x80,
0x02,0x80,0x02,0x40,0x04,0x40,0x04,0x20,0x08,0x10,0x10,0x0E,0x60,0x04,0x00,0x00,
0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,
0x00,0x40,0x01,0x84,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
};
请参照以下资料
51单片机驱动74HC595的编程及使用要点
74595外形图
________
QB--|1 16|--Vcc
QC--|2 15|--QA
QD--|3 14|--SI
QE--|4 13|--/G
QF--|5 12|--RCK
QG--|6 11|--SCK
QH--|7 10|--/SCLR
GND-|8 9|--QH'
|_______|
74595的数据端:
QA--QH: 八位并行输出端,可以直接控制数码管的8个段。
QH': 级联输出端。我将它接下一个595的SI端。
SI: 串行数据输入端。
74595的控制端说明:
/SCLR(10脚): 低点平时将移位寄存器的数据清零。通常我将它接Vcc。
SCK(11脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->-->QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)
RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低点平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。
/G(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。
注1)74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。
2)74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。3)595是串入并出带有锁存功能移位寄存器,它的使用方法很简单,在正常使用时SCLR为高电平, G为低电平。从SER每输入一位数据,串行输595是串入并出带有锁存功能移位寄存器,它的使用方法很简单,如下面的真值表,在正常使用时SCLR为高电平, G为低电平。从SER每输入一位数据,串行输入时钟SCK上升沿有效一次,直到八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。>>入时钟SCK上升沿有效一次,直到八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。>>
其实,看了这么多595的资料,觉得没什么难的,关键是看懂其时序图,说到底,就是下面三步(引用)/P>
第一步:目的:将要准备输入的位数据移入74HC595数据输入端上。
方法:送位数据到 P10。
第二步:目的:将位数据逐位移入74HC595,即数据串入
方法:P12产生一上升沿,将P10上的数据移入74HC595中从低到高。
第三步:目的:并行输出数据。即数据并出
方法:P11产生一上升沿,将由P10上已移入数据寄存器中的数据
送入到输出锁存器。
说明: 从上可分析:从P12产生一上升沿(移入数据)和P11产生一上升沿
(输出数据)是二个独立过程,实际应用时互不干扰。即可输出数据的
同时移入数据。
而具体编程方法为
如:R0中存放3FH,LED数码管显示“0”
;接口定义:
DS_595 EQU P10 ;串行数据输入(595-14)
CH_595 EQU P12 ;移位时钟脉冲(595-11)
CT_595 EQU P11 ;输出锁存器控制脉冲(595-12)
;将移位寄存器内的数据锁存到输出寄存器并显示
OUT_595BR> CALL WR_595 ;调用移位寄存器接收一个字节数据子程序
CLR CT_595 ;拉低锁存器控制脉冲
NOP
NOP
SETB CT_595 ;上升沿将数据送到输出锁存器,LED数码管显示“0”
NOP
NOP
CLR CT_595
RET
;移位寄存器接收一个字节(如3FH)数据子程序
WR_595:
MOV R4,#08H ;一个字节数据(8位)
MOV A,R0 ;R0中存放要送入的数据3FH
LOOP:
;第一步:准备移入74HC595数据
RLC A ;数据移位
MOV DS_595,C ;送数据到串行数据输入端上(P10)
;第二步:产生一上升沿将数据移入74HC595
CLR CH_595 ;拉低移位时钟
NOP
NOP
setb CH_595 ;上升沿发生移位(移入一数据)
DJNZ R4,LOOP ;一个字节数据没移完继续
RET
而其级联的应用
74HC595主要应用于点阵屏,以1616点阵为例:传送一行共二个字节(16位)
如:发送的是06H和3FH。其方法是:
1先送数据3FH,后送06H。
2通过级联串行输入后,3FH在IC2内,06H在IC1内。应用如图二
3接着送锁存时钟,数据被锁存并出现在IC1和IC2的并行输出口上显示。
编程方法:
数据在30H和31H中
;MOV 30H,#3FH
;MOV 31H,#06H
;接口定义:
DS_595 EQU P10 ;串行数据输入(595-14)
CH_595 EQU P12 ;移位时钟脉冲(595-11)
CT_595 EQU P11 ;输出锁存器控制脉冲(595-12)
;串行输入16位数据
MOV R0,30H
CALL WR_595 ;串行输入3FH
nop
NOP
MOV R0,31H
CALL WR_595 ;串行输入06H
NOP
NOP
SETB CT_595 ;上升沿将数据送到输出锁存器,显示
NOP
NOP
CLR CT_595
RET
&nbs
595驱动led偶会出错应该是以下两个原因。1、由于单片机总是自动复位造成的单片机有程序控制led闪烁。
2、单片机电源不稳,其他硬件毛病等,闪烁也会发生。故障排查及解决方法
一、单元板故障:
A整板不亮
1、检查供电电源与信号线是否连接。
2、检查测试卡是否以识别接口,测试卡红灯闪动则没有识别,检查灯板是否与测试卡同电源地,或灯板接口有信号与地短路导致无法识别接口。(智能测试卡)
3、检测74HC245有无虚焊短路,245上对应的使能(EN)信号输入输出脚是否虚焊或短路到其它线路。
注:主要检查电源与使能(EN)信号。
B在点斜扫描时,规律性的隔行不亮显示画面重叠
1、检查A、B、C、D信号输入口到245之间是否有断线或虚焊、短路。
2、检测245对应的A、B、C、D输出端与138之间是否断路或虚焊、短路。
3、检测A、B、C、D各信号之间是否短路或某信号与地短路。
注:主要检测ABCD行信号。
C全亮时有一行或几行不亮
1、检测138到4953之间的线路是否断路或虚焊、短路。
D在行扫描时,两行或几行(一般是2的倍数,有规律性的)同时点亮
1、检测A、B、C、D各信号之间是否短路。
2、检测4953输出端是否与其它输出端短路。
E全亮时有单点或多点(无规律的)不亮
1、找到该模块对应的控制脚测量是否与本行短路。
2、更换模块或单灯。
F全亮时有一列或几列不亮
1、在模块上找到控制该列的引脚,测是否与驱动IC(74HC595/TB62726、、、)输出端连接。
G有单点或单列高亮,或整行高亮,并且不受控
1、检查该列是否与电源地短路。
2、检测该行是否与电源正极短路。
3、更换其驱动IC。
H显示混乱,但输出到下一块板的信号正常
1、检测245对应的STB锁存输出端与驱动IC的锁存端是否连接或信号被短路到其它线路。
I显示混乱,输出不正常
1、检测时钟CLK锁存STB信号是否短路。
2、检测245的时钟CLK是否有输入输出。
3、检测时钟信号是否短路到其它线路。
注:主要检测时钟与锁存信号。
J显示缺色
1、检测245的该颜色的数据端是否有输入输出。
2、检测该颜色的数据信号是否短路到其它线路。
3、检测该颜色的驱动IC之间的级连数据口是否有断路或短路、虚焊。
注:可使用电压检测法较容易找到问题,检测数据口的电压与正常的是否不同,确定故障区域。
K输出有问题
1、检测输出接口到信号输出IC的线路是否连接或短路。
2、检测输出口的时钟锁存信号是否正常。
3、检测最后一个驱动IC之间的级连输出数据口是否与输出接口的数据口连接或是否短路。
4、输出的信号是否有相互短路的或有短路到地的。
5、检查输出的排线是否良好。
整屏故障:
整屏不亮(黑屏)
1、检测电源是否通电。
2、检测通讯线是否接通,有无接错。(同步屏)
3、同步屏检测发送卡和接收卡通讯绿灯有无闪烁。
4、电脑显示器是否保护,或者显示屏显示领域是黑色或纯蓝。(同步屏)
整块单元板不亮(黑屏)
1、连续几块板横方向不亮,检查正常单元板与异常单元板之间的排线连接是否接通;或者芯片245是否正常。
2、连续几块板纵方向不亮,检查此列电源供电是否正常。
单元板上行不亮
1、查行脚与4953输出脚是否有通。
2、查138是否正常。
3、查4953是否发烫或者烧毁。
4、查4953是否有高电平。
5、查138与4953控制脚是否有通。
单元板不亮
1、查595是否正常。
2、查上下模块对应通脚是否接通。
3、查595输出脚到模块脚是否有通。
单元板缺色
1、查245 RG数据是否有输出。
2、查正常的595输出脚与异常的595输入脚是否有通。
如果你是静态显示,那么灰度是没戏了。如果是动态显示,那就先点亮一个LED,再将595的数据刷新,令所有的LED灭掉,然后亮第二个LED,再将595的数据刷新,令所有的LED灭掉,如此循环,来控制LED点亮的占空比就可以控制灰度了。但这个办法的关键是你刷新的频率一定要足够高,不然就会产生闪烁。
其实,你电路中最大的问题就是OE脚被你锁死了,通常的产品都是靠这个引脚来控制灰度的。另外,595到LED之间最好再加一级驱动芯片,例如,2003,2803,否则595驱动电流不足,很容易烧坏。
以上就是关于急求51控制16*48点阵从左至右动态汉字显示,HC154做行驱动+HC595列驱动的程序全部的内容,包括:急求51控制16*48点阵从左至右动态汉字显示,HC154做行驱动+HC595列驱动的程序、我用74LS595做行驱动,74LS154做列驱动做了一个16×32的双色点阵,急需C语言程序,随便显示什么字。谢谢大、单片机如何与595连接等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)