16x16点阵课程设计

16x16点阵课程设计


2024年2月16日发(作者:oppo r9s参数)

第1页

摘 要

单片机自20世纪70年代问世以来,以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。单片机的优点是体积小、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字,汉字显示屏也广泛应用到汽车报站器,广告屏等。所以研究LED显示有实用的意义。LED显示屏分为图文显示屏和视频显示屏,均由LED矩阵块组成。LED显示屏可以显示变化的数字、文字、图形图像;不仅可以用于室内环境还可以用于室外环境,具有投影仪、电视墙、液晶显示屏无法比拟的优点。 LED之所以受到广泛重视而得到迅速发展,是与它本身所具有的优点分不开的。这些优点概括起来是:亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。LED的发展前景极为广阔,目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。

现代LED的发展很快,很多研究领域非常已经深刻,所以想利用自己学的单片机知识简单的研究一下用单片机驱动的LED显示汉字,以达到学以致用和实践相结合的目的,同时巩固加深自己的单片机知识。用点阵方式构成图形或文字,是非常灵活的,可以根据需要任意组合和变化,只要设计好合适的数据文件,就可以得到满意的显示效果。因而采用点阵式图文显示屏显示经常需要变化的信息,是非常有效的。

点阵大小可以有16×16、24×24、32×32、48×48等不同规格,也有单色、双色、和多色几种,最常用的是单色图文屏。单色屏多使用红色或橘红色或橙色LED点阵单元。双色图文屏和多色图文屏,在LED点阵的每一个“点”上布置有两个或多个不同颜色的LED发光器件。换句话说,对应于每种颜色都有自己的显示矩阵。显示的时候,各颜色的显示点阵是分开控制的。事先设计好各种颜色的显示数据,显示时分别送到各自的显示点阵,即可实现预期效果。每一种颜色的控制方法和单色的完全相同,因此掌握了单色图文显示屏的原理,双色屏和多色屏就不难理解了。

目 录

1. 绪论 ....................................................................................................................................... 2

1.1

课题描述 .......................................................................................................................... 2

1.2

基本工作原理及框图 ...................................................................................................... 2

2 相关芯片及硬件电路设计 .................................................................................................... 3

2.1

AT89C51芯片 .................................................................................................................. 3

2.1.1 AT89C51的功能特性 ............................................................................................. 4

2.1.2 AT89C51的主要性能参数 ..................................................................................... 4

2.2

单片机的最小系统 .......................................................................................................... 5

2.3

LED点阵介绍及取模 .................................................................................................... 6

2.4 LED点阵显示模块进行的方法有两种: ...................................................................... 6

2.5 点阵的驱动 ................................................................................................................ 7

3 系统软件设计 ...................................................................................................................... 11

3.1

程序设计流程图 .......................................................................................................... 11

3.2

程序设计 ...................................................................................................................... 12

总 结 .................................................................................................................................... 19

参考文献 .................................................................................................................................. 20

第2页

1. 绪论

1.1 课题描述

随着电子技术,特别是随大规模集成电路的产生而出现的微型计算机技术的飞速发展,人类生活发生了根本性的改变。如果说微型计算机的出现使现代科学研究得到了质的飞跃,那么可以毫不夸张地说,单片机技术的出现则是给现代工业测控领域带来了一次新的技术革命。目前,单片机以其体积小、重量轻、抗干扰能力强、对环境要求不高、高可靠性、高性能价格比、开发较为容易,在工业控制系统、数据采集系统、智能化仪器仪表、办公自动化等诸多领域得到极为广泛的应用,并已走人家庭,从洗衣机、微波炉到音响、汽车,到处都可见到单片机的踪影。因此,单片机技术开发和应用水平已逐步成为一个国家工业发展水平的标志之一。本课题研究的内容就是以单片机为主要控制元件,驱动LED点阵显示所想要现实的汉字。

1.2 基本工作原理及框图

LED点阵总体框图如图1.1所示,点阵电路大体上可以分成微机本身的硬件、显示驱动电路、控制信号电路三部分。控制电路部分包括一个51CUP和一些外围电路。在整个电路当中单片机负责控制整个电路以及相应的程序的运行、与PC机的串行通讯、以及给屏体电路部分发送命令。点阵显示屏体、以及它的行和列的各个驱动电路。

此显示电路采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个列驱动器。由行译码器给出的行选通信号,从第一行开始,按顺序依次对各行进行扫描(把该行与电源的一端接通)。另一方而,根据各列锁存的数据,确定相应的列驱动器是否将该列与电源的另一端接通。接通的列,就在该行该列点燃相应的LED;未接通的列所对应的LED熄灭。可通过扫描输出口的控制实现颜色的转换。

图1.1 基本工作原理框图

2 相关芯片及硬件电路设计

2.1 AT89C51芯片

AT89C51是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含4k bytes的反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。AT89C51引脚图如图2.1

所示。

第3页

U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333222728161718XTAL29RST293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51

图2.1 AT89C51引脚图

单片机是在一块硅片上集成了各种部件的微型机,这些部件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时器/计数器和多种I/O接口电路。8051单片机的基本结构见图2.2。

图2.2 8051单片机的基本结构

第4页

2.1.1 AT89C51的功能特性

AT89C51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个十六位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。

2.1.2 AT89C51的主要性能参数

AT89C51主要性能参数如下:

 与MC-51产品指令系统完全兼容

 4K字节可重擦写Flash闪速存储器

 1000次擦写周期

 全静态操作:0Hz—24Hz

 三级加密程序存储器

 128×8字节内部RAM

 32个可编程I/O口线

 2个16位定时/计数器

 6个中断源

 可编程串行UART通道

 低功耗空闲和掉电模式

2.2 单片机的最小系统

T14V-动复位。电路图2.5如下:

3ACAC1

第5页

V+D62C4图2.5 单片机复位图

100u/16V1C5104Vin图2.4 单片机最小应用系统原理图

注: 该最小系统由按键复位RESET电路、晶体振荡电路以及I/O接口电路组成。

复位的实现通常用2种方式: 开机上电复位和外部手动复位,本设计用的是外部手AT89C51工作电压VCC=5V,其EA引脚需接高电平,5V电源电路如图2.6所示。 该电源电路主要模块为IC7805,它能输出稳定的 5V电源,图中整流桥是将市电转变为直流电,电容起到虑波作用由7805的OUT引脚输出5V电压。

图2.6 单片机电源原理图

GND

U237805+5V2

C6100u/16vVCC

C7104

第6页

2.3 LED点阵介绍及取模

8×8单色点阵共需要64个发光二极管组成,且每个二极管是放置在行线与列线的叉点上。本设计是一种实用的汉字显示屏的制作,制作的是双色点阵。考虑到元器件的易购性,没有使用8×8的点阵发光二极管模块,而是直接使用了256个高亮度发光管,组成了16行16列的发光点阵。实际使用时可以根据这个原理自行扩充显示的字数。8*8点阵内部结构如图2.7

图2.7 点阵内部构造

4个8*8点阵级联构成16*16点阵如下图2.8

图2.8 16*16点阵的构成

LED驱动显示采用动态扫描方法,动态扫描方式是逐行轮流点亮,这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。以16×16点阵为例,把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第1行发光管亮灭的数据并锁存,然后选通第1行使其燃亮一定的时间,然后熄灭;再送出第2行的数据并锁存,然后选通第2行使其燃亮相同的时间,然后熄灭;….第16行之后,又重新燃亮第1行,反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。显示数据传输采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬

第7页

件方面无疑是十分经济的。

2.4 LED点阵显示模块进行的方法有两种:

(1)水平方向(X方向)扫描,即逐列扫描的方式(简称列扫描方式):此时用一个P口输出列码决定哪一列能亮(相当于位码),用另一个P口输出行码(列数据),决定该行上那哪个LED亮(相当于段码)。能亮的列从左到右扫描完16列(相当于位码循环移动16次)即显示出一个完整的图像。

(2)竖直方向(Y方向)扫描,即逐行扫描方式(简称行扫描方式):此时用一个P口输出决定哪一行能亮(相当于位码),另一个P口输出列码决定该行上哪些LED灯亮(相当于段码)。能亮的行从上向下扫描完16行即显示一帧完整的图像。

2.5 点阵的驱动

16x16点阵LED显示驱动:行驱动使用单片机的P0口和P2口直接驱动,列驱动使用2个4—8线译码器74LS138驱动;

系统硬件电路图如下所示:

RP1RESPACK-8P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7Y0Y1Y2Y3Y4Y5Y6Y7Y0Y1Y2Y3Y4Y5Y6Y7P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7Y8Y9Y10Y11Y12Y13Y14Y15Y8Y9Y10Y11Y12Y13Y14Y151P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.723456789控制速度按键1617控制显示方式切换按键Y15Y14Y13Y12Y11Y10Y9Y8Y7Y6Y5Y4Y3Y2Y1Y534333222728P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15U1AT89C51Y0Y1Y2Y3Y4Y5Y6Y774LS138Y0Y1Y2Y3Y4Y5Y6Y7123645E1E2E3ABCU2097U474LS138XTAL1XTAL2123PSENALEEA19189293P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RST645E1E2E3ABC

仿真效果图如下所示:

第8页

P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7Y0Y1Y2Y3Y4Y5Y6Y7Y0Y1Y2Y3Y4Y5Y6Y7

P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7Y0Y1Y2Y3Y4Y5Y6Y7Y0Y1Y2Y3Y4Y5Y6Y7

P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7Y0Y1Y2Y3Y4Y5Y6Y7Y0Y1Y2Y3Y4Y5Y6Y7

第9页

8x8点阵LED显示:采用P0口和P3口直接驱动形式,在P0口使用1K的排阻做上拉电阻,确保足够的驱动电流,输出高电平,这里阻值为1K,如果想要亮度更亮一些可以,可以降低阻值,但不能低于200欧,接线如图所示

RP11P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.023456789RESPACK-8P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0

第10页

图2.11 点阵的驱动电路

C230p1RP1X1U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD3938373635343332227281617P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.023456789RESPACK-818C130pXTAL2C3910uFRSTR110K293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0

P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0

第11页

P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.03 系统软件设计

3.1 程序设计流程图

P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0

第12页

3.2 程序设计

8x8LED点阵显示简单图形

#include

unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char code graph[3][8]={{0x12,0x14,0x3c,0x48,0x3c,0x14,0x12,0x00},

{0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00},

{0x30,0x48,0x44,0x22,0x44,0x48,0x30,0x00}

};

unsigned char count;

unsigned char cnta;

void main(void)

{

unsigned char i,j;

TMOD=0x01;

TH0=(65536-4000)/256;

TL0=(65536-4000)%256;

TR0=1;

ET0=1;

EA=1;

while(1)

{

if(P2_0==0)

{

for(i=5;i>0;i--)

for(j=248;j>0;j--);

if(P2_0==0)

{

count++;

if(count==3)

{

count=0;

}

while(P2_0==0);

}

}

}

}

void t0(void) interrupt 1 using 0

{

TH0=(65536-4000)/256;

第13页

TL0=(65536-4000)%256;

P3=tab[cnta];

P1=graph[count][cnta];

cnta++;

if(cnta==8)

{

cnta=0;

}

}

16x16LED点阵显示

第一阶段:左移显示方式的设计

第二阶段:上移显示方式的设计

第三阶段:闪烁显示方式的设计 */

#include

#define uchar unsigned char

#define uint unsigned int

uchar table1[]={

0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,

0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00,/*"O",0*/

0x08,0x20,0xF8,0x3F,0x88,0x20,0xC0,0x01,

0x28,0x26,0x18,0x38,0x08,0x20,0x00,0x00};/*"K",1*//*上移显示的字符*/

uchar code table[]=

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x01,0x00,0x11,0x10,0x09,0x20,0x7F,0xFE,

0x40,0x02,0x8F,0xE4,0x08,0x20,0x0F,0xE0,

0x01,0x10,0x1F,0xF8,0x11,0x10,0x11,0x10,

0x11,0x10,0x11,0x50,0x01,0x20,0x01,0x00,/*"I",0*/

0x10,0x00,0x16,0x00,0x0E,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"'",1*/

0x80,0x20,0x80,0x3F,0x80,0x20,0x80,0x00,

0x80,0x3F,0x80,0x20,0x80,0x00,0x00,0x3F,/*"m",2*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/

0x08,0x20,0xF8,0x3F,0x00,0x21,0x80,0x00,

第14页

0x80,0x00,0x80,0x20,0x00,0x3F,0x00,0x20,/*"h",4*/

0x00,0x00,0x00,0x19,0x80,0x24,0x80,0x22,

0x80,0x22,0x80,0x22,0x00,0x3F,0x00,0x20,/*"a",5*/

0x80,0x80,0x80,0xFF,0x00,0xA1,0x80,0x20,

0x80,0x20,0x00,0x11,0x00,0x0E,0x00,0x00,/*"p",6*/

0x80,0x80,0x80,0xFF,0x00,0xA1,0x80,0x20,

0x80,0x20,0x00,0x11,0x00,0x0E,0x00,0x00,/*"p",7*/

0x80,0x80,0x80,0x81,0x80,0x8E,0x00,0x70,

0x00,0x18,0x80,0x06,0x80,0x01,0x80,0x00,/*"y",8*/

0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x33,

0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,/*"!",9*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",10*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

uchar code table2[]={

0x20,0x04,0x20,0x04,0x22,0x42,0x22,0x82,

0xFE,0x7F,0x21,0x01,0x21,0x01,0x20,0x10,

0x20,0x10,0xFF,0x08,0x20,0x07,0x22,0x1A,

0xAC,0x21,0x20,0x40,0x20,0xF0,0x00,0x00,/*"我",0*/

0x00,0x40,0x40,0x20,0xB2,0xA0,0x96,0x90,

0x9A,0x4C,0x92,0x47,0xF6,0x2A,0x9A,0x2A,

0x93,0x12,0x91,0x1A,0x99,0x26,0x97,0x22,

0x91,0x40,0x90,0xC0,0x30,0x40,0x00,0x00,/*"爱",1*/

0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,

0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00,/*"5",2*/

0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,

0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,/*"1",3*/

0x00,0x08,0x00,0x08,0xF8,0x0B,0x28,0x09,

0x29,0x09,0x2E,0x09,0x2A,0x09,0xF8,0xFF,

0x28,0x09,0x2C,0x09,0x2B,0x09,0x2A,0x09,

/*左移显示的字符*/

第15页

0xF8,0x0B,0x00,0x08,0x00,0x08,0x00,0x00,/*"单",4*/

0x00,0x80,0x00,0x40,0x00,0x30,0xFE,0x0F,

0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x01,

0x10,0x01,0x1F,0x01,0x10,0x01,0x10,0xFF,

0x10,0x00,0x18,0x00,0x10,0x00,0x00,0x00,/*"片",5*/

0x08,0x04,0x08,0x03,0xC8,0x00,0xFF,0xFF,

0x48,0x00,0x88,0x41,0x08,0x30,0x00,0x0C,

0xFE,0x03,0x02,0x00,0x02,0x00,0x02,0x00,

0xFE,0x3F,0x00,0x40,0x00,0x78,0x00,0x00,/*"机",6*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

uchar v,flag,temp;

uchar i,j,k,shuz,shub,temp1;

uchar a,b,c,d,e,f,numa,numb;

uchar ii,jj,kk;

uchar iii,jjj,kkk;

uchar a3,b3;

uchar num3,temp3;

uchar temp2;

void init(); /*主函数的初始化声名*/

void init1(); /*左移显示方式的初始化声名*/

void init2(); /*上移显示方式的初始化声名*/

void init3(); /*闪烁显示方式的初始化声名*/

void disp1(); /*左移显示子程序声名*/

void disp2(); /*上移显示子程序声名*/

void disp3(); /*闪烁显示子程序声名*/

void delay(uint z)/*延时函数声名及定义*/

{

uint x,y;

for(x=z;x>0;x--)

{

for(y=110;y>0;y--);

}

}

void main()

{

init();

while(1) //主循环

{

/*闪烁显示字符*/

/*各变量值的初始化*/

第16页

if(flag%3==0) //判断是不是左移显示方式

{

init1(); //左移显示初始化

while(flag%3==0) //左移循环控制

{

for(i=0;i<=a;i++) //判断左移的字符个数

for(j=0;j<=v;j++) //向左移动的速度由变量v控制

for(k=i*2;k<(i*2+32);) //显示一幕

if(flag%3==0) //判断有没有中断,flag的值有没有变化

disp1(); //若没有中断调用左移显示子程序

else

{

i=a;j=v;k=(i*2+32);//若有中断了初始化左移的各变量

}

}

}

if(flag%3==1) //判断是不是上移显示方式

{

init2(); //上移显示初始化

while(flag%3==1) //上移循环控制

{

for(ii=0;ii<=15;ii++) //上移缓冲

{

for(jj=0;jj<=v;jj++) //向上移动的速度由变量v控制

{

for(kk=0;kk<=15;kk++) //显示一幕

if(flag%3==1) //判断有没有中断,flag的值有没有变化

disp2(); //若没有中断调用左移显示子程序

else

{

ii=15;jj=v;kk=15; //若有中断了初始化左移的各变量

}

delay(1);

}

}

}

}

if(flag%3==2) //判断是不是闪烁显示方式

{

init3();//闪烁显示初始化

while(flag%3==2)//闪烁循环控制

{

for(iii=0;iii<=6*32;iii=iii+32)//判断闪烁显示的字符个数

第17页

for(jjj=0;jjj<=v*10;jjj++)//闪烁显示字符的速度由变量v控制

{

for(kkk=0;kkk<=15;kkk++) //显示一幕

if(flag%3==2)//判断有没有中断,flag的值有没有变化

disp3();//若没有中断调用闪烁显示子程序

num3=0;

temp3=0; //显示完一幕准备下一幕的显示

}

}

}

}

}

void init() //主程序初始化

{

EA=1; //CPU开放所有中断源的中断请求

EX0=1; //允许外部中断0中断

EX1=1; //允许外部中断1中断

IT0=1; //外部中断0采用边沿触发方式产生中断

IT1=1; //外部中断1采用边沿触发方式产生中断

v=15; //设置移动速度的初值

}

void init1() //左移显示方式各变量的初始化

{

shuz=5;

shub=1;

a=shuz*16+shub*8+24;

P0=0;

P2=0;

temp1=0;

}

void disp1() //左移显示子程序

{

P0=table[k];

k++;

P2=table[k];

k++;

P1=temp1;

temp1++;

if(temp1==0x10)

temp1=0x00;

delay(1);

}

第18页

void init2() //上移显示方式各变量的初始化

{

P0=0;

P2=0;

temp2=0;

}

void disp2() //上移显示子程序

{

numa=kk*2;

numb=kk*2+1;

a=table1[numa];

b=table1[numb];

if(jj==v)

{ c=a>>1;

d=b<<(8-1);

e=b>>1;

f=a<<(8-1);

c=c|d;

table1[numa]=c;

e=e|f;

table1[numb]=e;

}

P0=a;

P2=b;

P1=temp2;

temp2++;

if(temp2==0x10)

temp2=0x00;

delay(1);

}

void init3() //闪烁显示方式各变量的初始化

{

P0=0;

P2=0;

num3=0;

temp3=0;

}

void disp3() //闪烁显子程序

{

a3=table2[iii+(num3++)];

b3=table2[iii+(num3++)];

P0=a3;

P2=b3;

P1=temp3++;

第19页

delay(1);

}

void timerr1() interrupt 1 //外部中断0的中断程序

{

v=15; //初始化移动速度

flag++; //flag值加1,改变显示方式

temp1=0x00;

temp2=0x00;

temp3=0x00;

}

void timerr0() interrupt 3

{

v=v/3;

if(v==0)

v=150;

}

总 结

经过近多日的努力,终于将本次课程设计做完了,但由于水平有限,文中肯定有很多不恰当的地方,请老师指出其中的错误和不当之处,使我能做出改正,我会虚心接受。在本次课程设计过程中,我增强了自己的动手能力和分析能力。通过跟老师和同学的交流,也通过自己的努力,我按时完成了这次课程设计。在此过程中,我学会了很多,也看到了很多自己的不足之处。在以后的学习生活中,我会努力学习专业知识,完善自我,为将来的发展做好充分的准备。

总之,在这次课程设计中,我受益匪浅,学到了很多书本上所没有的东西,懂得了理论和实际联系的重要性。在以后的学习中,我不仅要把理论知识掌握牢固,更要提高自己的动手能力和分析能力。

参考文献

[1] 胡汉才.单片机原理与接口技术[M].北京:清华大学出版社,1995.6.

[2] 楼然苗等.51系列单片机设计实例[M].北京:北京航空航天出版社,2003.3.

[3] 何立民. 单片机高级教程[M].北京:北京航空航天大学出版社,2001.

[4] 赵晓安. MCS-51单片机原理及应用[M]. 天津:天津大学出版社,2001.3.

[5] 肖洪兵. 跟我学用单片机[M]. 北京:北京航空航天大学出版社,2002.8.

[6] 夏继强. 单片机实验与实践教程[M]. 北京:北京航空航天大学出版社, 2001.

[7]于凤明.单片机原理及接口技术[M].北京:中国轻工业出版社.1998.


发布者:admin,转转请注明出处:http://www.yc00.com/num/1708074506a1539184.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信