基于单片机1616的点阵显示 联系客服

发布时间 : 星期六 文章基于单片机1616的点阵显示更新完毕开始阅读72d46be028ea81c758f57883

器的输入端为引脚XTAL1,输出端为引脚XTAL2,在芯片的外部通过这两个引脚跨接晶体振荡器和微调电容C1、C2形成反馈电路,可构成稳定的自激振荡频率范围通常是1.2~12MHZ。若晶体振荡器频率高,则系统的时钟频率也高,单片机的运行速度也就快。

在上图中,使用晶体振荡器时,C1、C2取值(30±10)pF;使用陶瓷振荡器时,C1、C2取值(40±10)pF。C1、C2的取值虽然没有严格的喜怒无常,但电容的大小影响振荡电路的稳定性和快速性,通常取值20~30pF,在设计印制电路时,晶振和电容等应尽可能靠近芯片,以减少分布电容,保证振荡器振荡的稳定性。振荡电路产生的振荡脉冲并不直接使用,而是经分频后再为系统所用。振荡脉冲在片内通过一个时钟发生电路二分频后越冬作物为系统的时钟信号。片内时钟发生电路实质上是一个二分频的触发器,其输入来自振荡器,输出为二相时钟信号,即状态时钟信号,其频率为fose/2;状态时钟三分频后为ALE信号,其频率为fose/6;状态时钟六分频为机器周期,其频率为fose/12。

也可以由外部时钟电路睛内输入脉冲信号作为单位片机的振荡脉冲。这时外部脉冲信号是经XTAL1引脚引入的,而XTAL2引脚悬空或接地。对外部设备信号的点空比没有要求,但高低持续的时间不应小于20ns。这种方式常用于多块芯片同时工作,便于同步。其外部脉冲接入方式如图9所示

VCC外部脉冲信号XTAL2OC门AT89C51XTAL1VSS

图9 STC89c52单片机外部时钟输入接线图

3.3.2 上电复位电路

上电自动复位操作要求接通电源后自动实现复位操作。如图9(a)(b)所示

11

图10 上电自动复位电路

图(a)所示为最简单的复位电路。上电瞬间由于电容C上无储能,其端电压挖为零,RST获得高电平,随着电容器C的充电,RST引脚上的高电平将爱河下降,当RST引脚上的电压小于某一数值后,单片机就脱离复位状态,进入正常工作模式。只要高电平能保持复位所需要的时间(约两个机器周期),单片机就能实现复位。

相比于图(a),图 (b)所示的电路只是增加了二极管VD和电阻R。其优越性在于停电后,二极管VD给电容C提供了快速放电通路,保证再上电时RST为高电平,从而保证单片机可靠复位。正常工作时,二极管反偏,对电路没影响。断电后,VCC逐渐下降,当VCC=0JF ,电容C通过VD迅速放电,恢复到无电量的寝状态,为下次上电复位做好准备。 3.3.3 I/O口和扩展锁存器控制点阵显示

本次课程设计的硬件实验采用Dais-52FD单片机实验箱来实现单片机I/O口和扩展锁存器相结合的方式控制16*16点阵显示自己名字的中英文字符。I/O口分别提供字形代码(列码)、扫描信号(行码),凡字形代码位为“1”、行扫描信号为“1”点亮该点,否则熄灭;通过逐行扫描循环点亮字形或曲线。I/O口地址分配情况如下表1所示:

扩展名称 273(4) 273(1) 273(3) 273(2) 口地址 0FFE3H 0FFE0H 0FFE2H 0FFE1H 用处 列代码1 列代码2 行扫描1 行扫描2 控制方式 扩展锁存器 扩展锁存器 扩展锁存器 扩展锁存器

12

4 系统软件设计

4.1 软件设计描述

16*16的点阵LED关键部分是硬件电路的设计,软件设计就相对要灵活的多,硬件搭建起后,我们就可以对单片机编写相应的程序来实现不同的显示功能,还可以添加很多的动态效果,又如卷入卷出、滚支,帘出帘入等等,只要程序可以办的到的它都能实现。

本文主要介绍软件驱动程序的一个关键部分,就是74hc595的移位操作,我们是通过74hc595的译码输出来选通行,相对应我们要对74hc595写一个字,使其选通相应的列,这样就完成了一次LED的扫描操作主,由于人的视觉暂留,只要设置不同的扫描周期就可以产生不同的动态效果。

扫描周期的确定可以是模糊的,也可以是精确的。所谓模糊的,就是根据经验,和人的视觉暂留的时间来估计起时,可能需要经过几次的尝试才能达到较好的显示效果。所谓精确的就是根据人的视觉暂留时间,和所扫描的点阵数量来精确计算扫描周期,通过定时器来实现较为精确的扫描周期。这种耗时一般不用这么精确,选择模糊的判断和几次尝试就能达到很好的显示效果了。

单片机在上电后能自动执行一次复位操作,同时开始接收外部晶振的信号输入。从程序中的列扫描序列中读取列码的地址,并从码字表中反复读取行码的地址,由I/O口输出信号对LED点阵进行选通点亮,然后判断拉幕次数,显示出相应的字符来。显示一幕后拉幕次数加1,再送新的幕次和行码地址。

4.2 16*16点阵显示程序

16*16点阵显示实验程序如下: #include #include

#define uchar unsigned char sbit SCK=P3^6; sbit LCK=P3^5; sbit SDI=P3^4;

13

//一共有16行,每次刷一行的代码 uchar code NUM_HANG[]={

0x80,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0x01,0x00,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0x01,}; //汉字“机”的字码 uchar code ji[]=

{8,0,136,15,136,8,190,8,136,8,136,8,156,8,172,8,138,8,136,8,136,8,72,40,72,40,40,48,0,0,0,0}; //汉字“电”的字码 uchar code dian[]=

{128,0,128,0,128,0,252,31,132,16,132,16,252,31,132,16,132,16,252,31,132,0,128,32,128,32,0,63,0,0,0,0}; //汉字”工“的字码 Uchar code gong[]=

{0,0,252,31,128,0,128,0,128,0,128,0,128,0,128,0,128,0,128,0,128,0,128,0,254,63,0,0,0,0,0,0} ; //汉字\程” 的字码 Uchar code cheng[]=

{0,0,176,31,142,16,136,16,136,31,62,0,8,0,152,31,44,2,12,2,138,31,8,2,8,2,200,63,0,0,0,0} ; //汉字\学“的字码 Uchar code xue[]=

{72,8,144,4,0,2,254,63,2,32,2,32,248,7,0,2,128,1,254,63,128,0,128,0,128,0,224,0,0,0,0,0} ; //汉字”院“的字码 Uchar code yuan[]=

{0,2,30,4,210,63,82,32,10,0,138,31,18,0,18,0,210,63,18,9,14,9,130,8,66,40,34,48,0,0,0,0} ;

14