实验三 点阵显示屏的控制
点阵显示器设计实训报告

一、实训背景随着科技的发展,点阵显示器在电子显示领域得到了广泛的应用。
为了提高学生的实践能力,培养创新精神,我们开展了点阵显示器设计实训。
本次实训旨在让学生掌握点阵显示器的原理、设计方法和实现过程,提高学生的动手能力和综合素质。
二、实训目标1. 了解点阵显示器的原理和特点;2. 掌握点阵显示器的驱动电路设计;3. 熟悉点阵显示器的编程技巧;4. 培养学生的团队合作精神和创新意识。
三、实训内容1. 点阵显示器原理及特点点阵显示器是一种利用LED点阵技术制作的新型显示器件,具有以下特点:(1)显示内容丰富:可以显示文字、图形、动画等多种信息;(2)亮度高、功耗低:LED作为发光元件,具有亮度高、功耗低的特点;(3)寿命长:LED具有较长的使用寿命,适用于长时间工作;(4)体积小、重量轻:便于携带和安装。
2. 点阵显示器的驱动电路设计点阵显示器的驱动电路主要包括以下几部分:(1)单片机:作为控制核心,负责接收指令、处理数据和驱动显示;(2)驱动芯片:用于驱动LED点阵,实现显示效果;(3)电源电路:为点阵显示器提供稳定的电源;(4)控制电路:用于控制显示器的开关、亮度调节等功能。
3. 点阵显示器的编程技巧点阵显示器的编程主要包括以下几方面:(1)初始化:设置单片机的工作状态,初始化相关参数;(2)显示字符:通过编程控制LED点阵显示特定的字符;(3)显示图形:通过编程控制LED点阵显示特定的图形;(4)动画效果:通过编程实现LED点阵的动态效果。
四、实训过程1. 硬件设计(1)选择合适的单片机:本次实训选择AT89C51单片机作为控制核心;(2)设计驱动电路:根据AT89C51单片机的引脚,设计驱动电路,包括驱动芯片、电源电路和控制电路;(3)搭建电路:按照设计好的电路图,焊接电路板,连接各元器件。
2. 软件设计(1)编写程序:使用C语言编写点阵显示器的控制程序,实现显示字符、图形和动画效果;(2)仿真调试:使用Proteus软件对程序进行仿真,检查程序的正确性;(3)烧录程序:将程序烧录到单片机中,进行实际测试。
实验三点阵LED显示

实验三点阵LED显示设计实验1、实验目的1、了解LED点阵的基本结构2、学习LED点阵的扫描显示方式实验设备2、实验内容编写实验程序,控制点阵的扫描显示,使16*16LED点阵循环显示汉字“西安唐都科教仪器公司”3、实验原理实验系统中的16*16LED点阵由四块8*8LED点阵组成,如图1所示,8*8点阵内部结构及外部引脚图如图2与图3所示。
由图2可知,当行为“0”,列为“1”,则对应行、列的LED点亮。
汉字显示如图4所示。
图1图2图3图4图54、实验步骤4.1实验接线图如图5所示,按图连线4.2编写实验程序,经编译、连接无误后装入系统,启动调试;4.3运行程序,观察点阵显示,验证程序功能;,观察实验现象;4.4自行设计程序,使点阵显示不同的符号。
;================================================= ;文件名称:LED88.ASM;功能描述:单片机控制一个8*8点阵显示符号"口",由大到小循环显示.;================================================= ORG0000HLJMPSTARTORG0100HSTART: MOV A,#7FH ;列控制MLP9: MOVR4,#0C0HMLP1: MOVR3,#00HMLP2: MOVDPTR,#V ALUE1 ;显示图形1,取数据首地址 MOVP0,A ;控制列有效PUSHACCMOV A,R3MOVCA,@A+DPTRMOVP2,A ;控制行POPACCRRAINCR3LCALLDELAYCJNER3,#08H,MLP2DJNZR4,MLP1NOPMOVR2,#1HMMLP1: LCALLDELAYDJNZR2,MMLP1MOVR4,#0C0H ;图形2MLP3: MOVR3,#00HMLP4: MOVDPTR,#V ALUE2 MOVP0,APUSHACCMOV A,R3MOVCA,@A+DPTRMOVP2,APOPACCRRAINCR3LCALLDELAYCJNER3,#08H,MLP4DJNZR4,MLP3NOPMOVR2,#1HMMLP2: LCALLDELAYDJNZR2,MMLP2MOVR4,#0C0H ;图形3 MLP5: MOVR3,#00HMLP6: MOVDPTR,#V ALUE3 MOVP0,APUSHACCMOV A,R3MOVCA,@A+DPTRMOVP2,APOPACCRRAINCR3LCALLDELAYCJNER3,#08H,MLP6DJNZR4,MLP5NOPMOVR2,#1HMMLP3: LCALLDELAYDJNZR2,MMLP3MOVR4,#0C0H ;图形4 MLP7: MOVR3,#00HMLP8: MOVDPTR,#V ALUE4 MOVP0,APUSHACCMOV A,R3MOVCA,@A+DPTRMOVP2,APOPACCRRAINCR3LCALLDELAYCJNER3,#08H,MLP8DJNZR4,MLP7NOPMOVR2,#1HMMLP4: LCALLDELAYDJNZR2,MMLP4LJMPMLP9DELAY: MOVR7,#02HDLP1: MOVR6,#050HDLP2: DJNZR6,DLP2DJNZR7,DLP1RET;显示图形数据V ALUE1: DB0FFH,81H,81H,81H,81H,81H,81H,0FFH V ALUE2: DB00H,7EH,42H,42H,42H,42H,7EH,00H V ALUE3: DB00H,00H,3CH,24H,24H,3CH,00H,00H V ALUE4: DB00H,00H,00H,18H,18H,00H,00H,00HEND。
点阵显示实验报告心得

点阵显示实验报告心得引言点阵显示是一种常见的显示方式,它通过将像素点灯亮或灭来显示图像或文字。
在本次实验中,我们学习了点阵显示的原理和使用方法,并进行了相关的实验操作。
通过实验,我对点阵显示有了更深入的了解,并积累了一些心得体会。
实验过程1. 准备工作在开始实验前,我们首先对点阵显示的原理和构成进行了学习。
掌握了常见的点阵显示控制器和编程方法,并了解了点阵显示的使用环境和限制条件。
2. 硬件连接在实验中,我们将点阵显示与开发板进行了连接。
通过阅读开发板和点阵显示的引脚定义,我们将信号线正确连接,并使用跳线帽进行固定。
在连线的过程中,我们需要确保线路的可靠性和稳定性,避免因为接触不良而造成显示错误或故障。
3. 软件编程通过阅读点阵显示控制器的说明文档,我们获得了点阵显示的编程接口。
在实验中,我们使用了C语言进行编程。
通过调用相关的函数和使用合适的参数,我们可以控制点阵显示的亮灭状态和显示内容。
在编程的过程中,我们需要注意以下几点:- 理解点阵显示的坐标系统和亮灭编码方法,正确设置每个像素点的位置和状态。
- 理解点阵显示内部刷新的机制和速度限制,避免显示闪烁或失真。
- 合理利用点阵显示控制器提供的功能和接口,提高程序的可读性和可维护性。
4. 实验结果通过编程控制,我们成功实现了点阵显示的功能。
我们在点阵上显示了各种图案和文字,并能够根据需求进行变换和刷新。
通过实验,我们验证了点阵显示的原理和性能,同时也发现了一些问题和改进的空间。
心得体会1. 点阵显示的优势和不足点阵显示作为一种常见的显示方式,在实验中展现了它的优势和不足。
其优势在于:- 可以实现高分辨率的显示效果,呈现更多的细节和信息。
- 对于单色显示需求来说,点阵显示更节省空间和成本。
- 可以通过编程控制,实现动态的显示效果和交互体验。
然而,点阵显示也存在一些不足之处:- 对于彩色显示需求来说,点阵显示需要额外的颜色滤波器或多个点阵来实现,增加了复杂度和成本。
点阵屏显示原理及实验详解讲解

点阵屏显示原理及实验详解讲解标题:LED点阵屏学习攻略共享资料LED点阵屏学习攻略在经历了将近一个学期断断续续的点阵屏学习后,最后终于在AVR平台下完成了128*32点阵屏的无闪烁显示。
现把整个学习过程总结如下:无论是51单片机还是AVR单片机,点阵屏的显示原理是一样的,所以首先从51讲起。
说明:以下所有试验如无特殊说明均在Keil uVision3 + Proteus 6.9 SP5下仿真完成。
一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:1.首先在Proteus下选择我们需要的元件,AT89C52、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。
在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-GREEN,MATRIX-8*8-BLUE,MATRIX-8*8-ORANGE ,MATRIX-8*8-RED。
在这里请大家牢记:红色的为上列选下行选;其它颜色的为上行选下列选!而所有的点阵都是高电平选中列,低电平选中行!也就是说如果某一个点所处的行信号为低,列信号为高,则该点被点亮!此结论是我们编程的基础。
2.在选择完以上三个元件后,我们开始布线,具体如下图:这里P2是列选,P3连接38译码器后作为行选。
选择38译码器的原因:38译码器每次可输出相应一个I/O口的低电平,正好与点阵屏的低电平选中行相对,并且节省了I/O口,大大方便了我们的编程和以后的扩展。
3.下面让我们把它点亮,先看一个简单的程序:(将奇数行偶数列的点点亮,效果如下图)下面是源代码:/************8*8LED点阵屏显示*****************/#includevoid delay(int z) //延时函数{int x,y;for(x=0;x<z;x++)< p="">for(y=0;y<110;y++);}void main(){while(1){P3=0; //行选,选择第一行P2=0x55; //列选,即该行显示的数据delay(5); //延时/*****下同*****/P3=2; //第三行P2=0x55;delay(5);P3=4; //第五行P2=0x55;delay(5);P3=6; //第七行P2=0x55;delay(5);}}上面的程序实现了将此8*8点阵的奇数行偶数列的点点亮的功能。
点阵显示器设计实验报告

for(y=110;y>0;y--);
}
uchar code table1[]=;
uchar code table2[]=;
void main()
{
WL=1;
P1=0xff;
WL=0;
while(1)
{
for(a=0;a<8;a++)
{
P0=table1[a];
P1=table2[a];
七、实验心得与体会
在这次实验中,我体会到了合作的重要性。一个人也可能实现这一系列的过程,但是要花费很多精力和时间。群策群力,分工明确,可以使我们更好、更快地完成我们的工作。在此期间,你可以更好知道自己的不足和缺陷,来得到改正。还可以知道自己的优势所在,把握好自己的优势。
自我评分
教师评分
delay(2);
}
}
}
六、思考题:
点阵显示器的动态扫描原理?
LED点阵模块由8*8个发光管组成。每行8个发光管,每一行的发光管的阳极接在行线上。每列8个发光管,每一列的发光管的阴极接在列线。这样在行线上输入高电平,列输入低电平,相对应位置上的发光管就点亮了。根据编好的程序来控制每一时刻向行列输入的高低电平,进而控制每一时刻要显示的行和列即能动态循环显示
2、常见的字模滚动方式的控制
3、点阵显示器的实现
三、实验软硬件设备:
Keil C51软件,Proteus软件,51单片机试验台,联想电脑。
四、实验原理图:
本字符显示器采用AT89C52单片机作为控制器,12MHz晶振,8*8点阵共阳LED显示器。其中,P0作为字符数据输出口,P2作为字符显示扫描输出口,第31引脚(EA)接电源,P1.0~P1.2口分别接开关K1、K2、K3,改变电阻(270Ω)的大小可以改变显示字符的亮度,驱动用9012三极管。
点阵电子实验报告

#### 一、实验目的本次实验旨在让学生熟悉点阵电子显示屏的基本原理,掌握点阵LED电子显示屏的设计方法,并通过实际操作,加深对单片机控制点阵LED显示屏的理解和应用。
#### 二、实验原理点阵电子显示屏由多个LED灯组成,通过控制LED灯的亮与灭,可以显示文字、图形等信息。
在本次实验中,我们使用16x16的点阵LED电子显示屏,通过单片机AT89C51对其进行控制。
#### 三、实验器材1. 单片机AT89C512. 16x16点阵LED电子显示屏3. 电阻、电容等电子元件4. 仿真软件Proteus5. 连接线#### 四、实验步骤1. 硬件连接:- 将AT89C51的P1口与点阵LED显示屏的行驱动线连接。
- 将AT89C51的P2口与点阵LED显示屏的列驱动线连接。
- 将AT89C51的P3口与点阵LED显示屏的复位置线连接。
- 将点阵LED显示屏的电源线连接至AT89C51的VCC和GND。
2. 软件设计:- 使用Proteus软件,搭建AT89C51单片机与点阵LED显示屏的电路图。
- 编写程序,实现点阵LED显示屏的点亮、熄灭、滚动显示等功能。
3. 程序调试:- 在Proteus软件中,将编写好的程序烧录到AT89C51单片机中。
- 观察点阵LED显示屏的显示效果,对程序进行调试和优化。
#### 五、实验内容1. 点亮单个LED灯:- 编写程序,通过控制行和列的驱动线,点亮点阵中的一个LED灯。
2. 显示字符:- 编写程序,将点阵LED显示屏显示为特定字符,如“HELLO”。
3. 显示图形:- 编写程序,将点阵LED显示屏显示为特定图形,如心形图案。
4. 滚动显示:- 编写程序,使点阵LED显示屏显示的内容能够左右或上下滚动。
#### 六、实验结果与分析1. 点亮单个LED灯:- 成功点亮了点阵中的一个LED灯,验证了硬件连接的正确性。
2. 显示字符:- 成功在点阵LED显示屏上显示了“HELLO”字符,证明了程序设计的正确性。
点阵显示实验报告

一、实验目的1. 了解点阵LED显示的基本原理与功能。
2. 掌握单片机与点阵LED显示模块的接口方法。
3. 学会编写控制点阵LED显示的软件程序。
4. 通过实验加深对数字电路、单片机应用等知识的理解。
二、实验器材1. 单片机开发板(如STC89C52)2. 16x16点阵LED模块3. 跳线4. 电阻5. 电源6. 逻辑分析仪(可选)7. 编译器及仿真软件(如Keil、Proteus等)三、实验原理点阵LED显示模块由多个LED灯组成,通过控制每个LED灯的亮灭,可以显示字符、图案等信息。
16x16点阵LED模块由16行16列的LED灯组成,共有256个LED灯。
在点阵LED显示中,通常使用单片机来控制。
单片机通过向点阵LED模块发送控制信号,实现对LED灯的亮灭控制。
控制信号包括行选信号、列选信号和段选信号。
1. 行选信号:用于选择要显示的行。
2. 列选信号:用于选择要显示的列。
3. 段选信号:用于控制LED灯的亮灭。
四、实验步骤1. 搭建电路将单片机开发板与16x16点阵LED模块连接,具体连接方式如下:- 将单片机的IO口与点阵LED模块的行选信号、列选信号和段选信号连接。
- 将点阵LED模块的正极连接到电源正极,负极连接到电源负极。
- 添加适当的限流电阻,防止LED灯过载。
2. 编写程序使用Keil等编译器编写控制点阵LED显示的软件程序。
程序主要分为以下几个部分:- 初始化IO口:将单片机的IO口设置为输出模式。
- 定义延时函数:用于控制显示速度。
- 显示函数:用于控制LED灯的亮灭,实现显示字符、图案等功能。
3. 编译程序使用编译器将编写的程序编译成目标文件。
4. 仿真或下载程序使用Proteus等仿真软件对程序进行仿真,或使用编程器将程序下载到单片机开发板上。
5. 测试通过观察点阵LED显示模块的显示效果,验证程序的正确性。
五、实验结果与分析1. 静态显示通过编写程序,可以控制点阵LED显示模块显示静态字符、图案等信息。
硬件实验三 双色LED点阵实验 1006052240

硬件实验三双色LED点阵实验一、实验目的1学习双色LED点阵显示的原理。
2.学习双色LED点阵显示的编程方法。
二、实验内容1.基本部分:固定显示。
在点阵上轮流显示数据0~9和字母A~F。
2.扩展部分:滚动显示。
从左到右,从右到左,从上到下,从下到上,轮流显示“1”.和“一”。
四、实验连线P0和JP1(LED)用8PIN排线或连接起来。
P1和J19(点阵绿色端)用8PIN排线或连接起来。
P2和J20(点阵红色端)用8PIN排线或连接起来。
五、实验说明首先要把需要显示的数字或字母所对应的二进制码放到数组中,然后轮流将各个列引脚置低,并将对应元素写到点阵的数据引脚。
六、实验代码1.基本部分#include<reg51.h>unsigned char code tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,}; //列引脚的代码控制unsigned char code digittab[16][8]={{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},{0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00},{0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00},{0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00},{0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00},{0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00},{0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00},{0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00},{0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00},{0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00},{0x06,0x18,0x68,0x88,0x68,0x18,0x00,0x06},{0x00,0xFF,0x91,0x91,0x91,0x6E,0x00,0x00},{0x00,0x3E,0x41,0x41,0x62,0x00,0x00,0x00},{0x00,0x7F,0x41,0x41,0x41,0x3E,0x00,0x00},{0x00,0x7F,0x49,0x49,0x49,0x00,0x00,0x000},{0x00,0xFF,0x88,0x88,0x88,0x80,0x00,0x00},}; //0~9和A~F的行引脚代码unsigned int timecount1 , timecount2;unsigned char i , j ;void main(){j=0;while(1){if(j<16) {P2=tab[i];P0=digittab[j][i];} //数字和字母的显示控制if(++timecount1>=50) {timecount1=0;if(++i>=8) i=0;}if(++timecount2>=40000) {timecount2=0;if(++j>=16)j=0;} //用于控制动态扫描的速度}}2.扩展部分#include <REG51.H>unsigned char code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};void delay1(void) {unsigned char i,j,k;for(k=10;k>0;k--)for(i=20;i>0;i--)for(j=248;j>0;j--); //延迟时长}void main(void){unsigned char i,j;while(1){//from left to right 3 timefor(j=0;j<3;j++){for(i=0;i<8;i++) {P2=taba[i];P0=0xff;delay1();}}//from right to left 3 timefor(j=0;j<3;j++){for(i=0;i<8;i++){P2=taba[7-i];P0=0xff;delay1();}}//from top to bottom 3 timefor(j=0;j<3;j++){for(i=0;i<8;i++){P2=0x00;P0=tabb[7-i];delay1();}}//from bottom to top 3 timefor(j=0;j<3;j++){for(i=0;i<8;i++){P2=0x00;P0=tabb[i];delay1();}}}}七、实验现象1.基本部分:A、单片机的点阵轮流显示数字0~9轮流如下:B、单片机上的点阵轮流显示字母A`Fl 如下:2.扩展部分的实验可在单片机试验箱上观察到“1”和“一”滚动显示,现象是从左到右,从右到左,从上到下,从下到上轮流显示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三点阵显示屏的控制一、实验目的1、熟悉Keil uVision2软件的使用;2、掌握单片机并行I/O口应用及点阵模块的控制;3、掌握查表指令、循环程序结构;4、掌握程序与流程图的对应关系。
二、实验设备及仪器Keil μVision2软件;单片机开发板;PC机一台三、实验原理及内容1、点阵模块电路原理图,如图3.1所示。
U9列控制(低电平有效)行(高)U4图3.1 点阵模块原理图U4、U9的74HC573芯片是8位三态输出锁存器,分别作为点阵的行、列输入端。
根据1088BS点阵模块的内部结构(如图3.2),对应的行为高电平控制,对应的列为低电平控制。
P1.1点阵列、数码管位控制端(74HC573锁存器U9)P1.3 点阵行控制端(74HC573锁存器U4)图3.2 1088BS 点阵模块内部结构2、实验内容点阵显示有多种形式,例如固定显示、闪烁显示、滚动显示、交替显示等,先从最简单的固定显示一个字符做起。
训练内容一: “大”字的静态显示。
(1)设计思路:先选中点阵的某一行,然后通过查表指令得到这一行对应的字型码(列锁存器的输出,控制这一行要点亮的状态),延时1ms 后,选中下一行,再传送对应列的字型码,重复上述过程,直至完成8行的扫描。
然后,再从第一行开始循环。
利用视觉驻留效应,人眼看到的是一个静态的显示效果。
上述逐行扫描显示过程示意图,如下:1ms1ms1ms一个循环周期约为8ms程序流程图,如图3.3所示。
图3.3 静态显示“大”字的程序流程图(2)列字型码的编排:“大”字显示字型码示意图,如图3.4。
P0.0……P0.0 P0.1……P0.7P0.7行:高电平有效列:低电平有效图3.4“大”字型码示意图根据“大”字显示字型码示意图和查表指令中表格数据的构建原则,将字型码依次存放在表格TAB1所指定的ROM 单元中。
TAB1:DB 11110111B,11110111B,10000000B,11110111B,11101011BDB 11011101B,10111110B,11111111B或写成 TAB1:DB 0F7H,0F7H,80H,0F7H,0EBH,0DDH,0BEH,0FFH(3)静态显示“大”字的参考程序如下: ORG 00H AJMP MAIN MAIN:SETB P1.0;数码管段控制(锁存器U8输入端有效) SETB P1.2;LED 流水灯模块控制 (锁存器U7输入端有效) MOV P0,#0FFH;关闭LED 灯CLR P1.2 ;关闭LED 流水灯模块(锁存器U7输入端高阻态) MOV P0,#0 ;关闭数码管段CLR P1.0 ;关闭数码管段模块(锁存器U8输入端高阻态) LOOP:MOV DPTR,#TAB1 ;列字型码的表首地址 MOV R0,#01H ;行号 MOV R1,#00H ;列号MOV R3,#08H ;一个周期内扫描8行NEXT:SETB P1.3 ;点阵行锁存器U4的输入端有效MOV A,R0MOV P0,A;选中某一行RL AMOV R0,A;更新行号CLR P1.3;点阵行锁存器U4的输入端处于高阻态SETB P1.1 ;点阵列锁存器U9的输入端有效MOV A,R1MOVC A,@A+DPTRMOV P0,AINC R1 ;修改列号LCALL DELAY;延时1msCLR P1.1 ;点阵列锁存器U9的输入端处于高阻态DJNZ R3,NEXT ;判断是否完成8行扫描SJMP LOOP ;循环显示DELAY:MOV R4,#250;实现延时1ms子程序D1:NOPNOPDJNZ R4,D1RETTAB1:DB 0F7H,0F7H,80H,0F7H,0EBH,0DDH,0BFH,0FFH ;列字型码END问1:若将程序中的SJMP LOOP改为SJMP $,将会出现什么现象?问2:若要显示“小”字,如何修改程序?训练内容二: “大”字的滚动显示(从一个方向出现,滚动到另一个方向消失,并不断重复该过程)。
(1)滚动显示原理根据滚动显示的特点,滚动显示实际上是多屏循环显示。
需要分两步实现: ①确定出每一屏的字型码;为了实现“大”字从右到左滚动显示效果,第1屏显示的应该只是“大”字最左边一列,如图3.5(a )所示。
第2、3屏显示,如图3.5(b )、(c )所示。
P0.0 P0.1……P0.7P0.0P0.7……11111111B ,即0FFH P0.0 ~ P0.711111111B ,即0FFH 01111111B ,即7FH 11111111B ,即0FFH 11111111B ,即0FFH 11111111B ,即0FFH 01111111B ,即7FH 11111111B ,即0FFH(a )第1屏显示P0.0 P0.1……P0.7P0.0 P0.7……11111111B ,即0FFH P0.0 ~ P0.711111111B ,即0FFH 00111111B ,即3FH 11111111B ,即0FFH 11111111B ,即0FFH 01111111B ,即7FH 10111111B ,即0BFH 11111111B ,即0FFH(b )第2屏显示P0.0 P0.1……P0.7P0.0 P0.7……11111111B ,即0FFH P0.0 ~ P0.711111111B ,即0FFH 00011111B ,即1FH 11111111B ,即0FFH 01111111B ,即7FH 10111111B ,即0BFH 11011111B ,即0DFH 11111111B ,即0FFH(c )第3屏显示图3.5第1~3屏显示及列字型码从“大”字从右边出现,到“大”字从左边消失,总共需要15屏。
8个字型码一屏,15屏需要定义15×8个字型码,图3.5中的1~3屏字型码的定义如下:TAB1:DB 0FFH,0FFH,7FH,0FFH,0FFH,0FFH,7FH,0FFH ;第1屏DB 0FFH,0FFH,3FH,0FFH,0FFH,7FH,0BFH,0FFH ;第2屏DB 0FFH,0FFH,1FH,0FFH,7FH,0BFH,0DFH,0FFH ;第3屏利用查表指令读取每一屏的数据:读取第1屏的数据时,MOV DPTR,#TAB读取第2屏的数据时,DPTR+8→DPTR读取第3屏的数据时,在第2屏的基础上DPTR+8→DPTR依次类推。
由于MCS-51系列单片机是8位单片机,没有16位的加法指令,且加法指令的第一操作数必须是累加器A,因此DPTR+8→DPTR只能分步实现:DPL→AA+8→AA→DPLDPH→AA+CY→AA→DPH②确定每一屏显示需保持时间(滚动时间的快慢)。
每一屏变换时间必须要大于人眼视觉驻留时间,否则眼睛无法识别。
根据静态显示实验,每屏显示一次需要时间大概8ms,若每屏要显示50次,即每屏的显示时间约为50×8ms=0.4s,显然改变每屏显示的次数就可以改变每屏显示的时间。
(2)滚动显示“大”字流程图图3.6滚动显示“大”字的流程图(3)滚动显示“大”字的参考程序如下:ORG 00HAJMP MAINMAIN:SETB P1.0;数码管段控制(锁存器U8输入端有效)SETB P1.2;LED流水灯模块控制(锁存器U7输入端有效)MOV P0,#0FFH;关闭LED灯CLR P1.2 ;关闭LED流水灯模块(锁存器U7输入端高阻态)MOV P0,#0 ;关闭数码管段CLR P1.0 ;关闭数码管段模块(锁存器U8输入端高阻态)LOOP1:MOV DPTR,#TAB1 ;列字型码的表首地址MOV R5,#15 ;15屏滚动显示LOOP2:MOV R6,#50 ;每屏显示次数LOOP3:MOV R0,#01H ;行号MOV R1,#00H ;列号MOV R3,#08H ;一个周期内扫描8行NEXT:SETB P1.3 ;点阵行锁存器U4的输入端有效MOV A,R0MOV P0,A;选中某一行RL AMOV R0,A;更新行号CLR P1.3;点阵行锁存器U4的输入端处于高阻态SETB P1.1 ;点阵列锁存器U9的输入端有效MOV A,R1MOVC A,@A+DPTRMOV P0,AINC R1 ;修改列号LCALL DELAY;延时1msCLR P1.1 ;点阵列锁存器U9的输入端处于高阻态DJNZ R3,NEXT ;判断是否完成8行扫描DJNZ R6,LOOP3 ;判断每屏的显示次数50次是否到了?MOV A,DPL ;修改表首地址,准备读取下一屏数据ADD A,#8MOV DPL,AMOV A,DPHADDC A,#0MOV DPH,ADJNZ R5,LOOP2 ;判断15屏都显示完了?SJMP LOOP1 ;循环显示DELAY:MOV R4,#250;实现延时1ms子程序D1:NOPNOPDJNZ R4,D1RETTAB1:DB 0FFH,0FFH,7FH,0FFH,0FFH,0FFH,7FH,0FFH ;第1屏DB 0FFH,0FFH,3FH,0FFH,0FFH,7FH,0BFH,0FFH ;第2屏DB 0FFH,0FFH,1FH,0FFH,7FH,0BFH,0DFH,0FFH ;第3屏DB 7FH,7FH,0FH,7FH,0BFH,0DFH,0EFH,0FFH ;第4屏DB 0BFH,0BFH,07H,0BFH,5FH,0EFH,0F7H,0FFH ;第5屏DB 0DFH,0DFH,03H,0DFH,0AFH,77H,0FBH,0FFH ;第6屏DB 0EFH,0EFH,01H,0EFH,0D7H,0BBH,7DH,0FFH ;第7屏DB 0F7H,0F7H,80H,0F7H,0EBH,0DDH,0BEH,0FFH ;第8屏DB 0FBH,0FBH,0C0H,0FBH,0F5H,0EEH,0DFH,0FFH;第9屏DB 0FDH,0FDH,0E0H,0FDH,0FAH,0F7H,0EFH,0FFH;第10屏DB 0FEH,0FEH,0F0H,0FEH,0FDH,0FBH,0F7H,0FFH;第11屏DB 0FFH,0FFH,0F8H,0FFH,0FEH,0FDH,0FBH,0FFH;第12屏DB 0FFH,0FFH,0FCH,0FFH,0FFH,0FFH,0FEH,0FFH;第13屏DB 0FFH,0FFH,0FEH,0FFH,0FFH,0FFH,0FEH,0FFH;第14屏DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;第15屏END问3:编制程序,使得点阵上依次显示0~9。
问4:滚动显示“大”、“小”2个字符。