北京交大单片机课程设计8x8点阵实验报告.docx

上传人:b****6 文档编号:3080860 上传时间:2022-11-17 格式:DOCX 页数:15 大小:311.42KB
下载 相关 举报
北京交大单片机课程设计8x8点阵实验报告.docx_第1页
第1页 / 共15页
北京交大单片机课程设计8x8点阵实验报告.docx_第2页
第2页 / 共15页
北京交大单片机课程设计8x8点阵实验报告.docx_第3页
第3页 / 共15页
北京交大单片机课程设计8x8点阵实验报告.docx_第4页
第4页 / 共15页
北京交大单片机课程设计8x8点阵实验报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

北京交大单片机课程设计8x8点阵实验报告.docx

《北京交大单片机课程设计8x8点阵实验报告.docx》由会员分享,可在线阅读,更多相关《北京交大单片机课程设计8x8点阵实验报告.docx(15页珍藏版)》请在冰豆网上搜索。

北京交大单片机课程设计8x8点阵实验报告.docx

北京交大单片机课程设计8x8点阵实验报告

点阵式LED显示器

一、实验目的

1.了解点阵式LED显示原理。

2.掌握单片机与8×8点阵块之间接口电路设计及编程。

3.掌握8155工作原理及与单片机的接口电路设计。

 

二、设计任务及要求

系统设计要求:

利用8×8点阵显示屏,自己设计、焊接并调试电路板,实现在单片机的控制下,点阵显示屏显示“电子设计”,显示方式分别为单字循环显示、左右滚动显示、上下滚动显示。

系统功能说明:

系统在正常工作模式下为单字循环显示“电子设计”四个字,当按下第一个开关时,点阵显示屏开始上下滚动显示“电子设计”,循环显示三次。

而当按下第二个开关时,点阵显示屏开始左右滚动显示“电子设计”,循环显示三次。

当按下复位开关时,单片机复位,程序重新开始。

 

三、工作原理及设计思路

(1)电路原理图:

点阵显示模块的硬件电路设计如图1所示:

图1

复位电路的基本功能是:

系统上电时提供复位信号,在加电瞬间,RST端出现一定时间的高电平,直至系统电源稳定后,撤销复位信号。

如下图:

晶振电路如下图:

(2)电路设计原理:

8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置0电平,某一行置1电平,则相应的二极管就亮;8X8点阵的列输入为C0~C7,行输入为R0~R7,它们通过驱动电路(芯片1416及74LS245)接至发光二极管的阴极和阳极。

要显示某一个字,首先要设计该字的点阵字形,编好行(或列)点阵码,然后在单片机的控制下对点阵进行逐行(或列)扫描。

在人眼的暂存效应下我们会看到完整的字形,从而实现了字体在点阵显示屏上的输出。

(3)设计思路:

由于只控制8*8点阵显示屏,故不需要扩展单片机的I/O接口。

考虑到P0口需要接上拉电阻,使得电路较为复杂,因此利用单片机的P1口来控制点阵的行,用P2口控制点阵的列。

(4)芯片原理

1.单片机STC89C51RC引脚功能:

4KB程序存储器,512B的数据存储器,中断源8个,定时器3个,32位I/O口,有看门狗电路。

STC89C51RC/RD+系列单片机ISP编程原理

2.74HC245

管脚图如下:

芯片中数据传输方向:

根据所设计的电路原理图,数据由A口传向B口,故应使

=0,DIR=1。

数据从A口输出后需接1K电阻,再接到点阵的行。

3.MC1416BP

管脚图如下:

由于需要八个数据传送口,故应有两片MC1416BP,任选其中八个即可。

此芯片不用接电源,8脚接地。

数据直接接到点阵的列。

 

(5)字模表生成:

字模由LEDDOT生成,字模的提取方式为:

逐行提取,

字模的显示方式为:

单字单行显示,生成的字模格式:

C51十六进制

以下是生成的字模表:

/*这是“电”的字模;该字模由LEDDOT生成;字模的提取方式为:

逐行提取;

字模的显示方式为:

单字单行显示;生成的字模格式:

C51十六进制*/

int8ugRowBuff1[8]={0x10,0xFE,0x92,0xFE,0x92,0xFE,0x91,0x1F};

/*这是“子”的字模;该字模由LEDDOT生成;字模的提取方式为:

逐行提取;

字模的显示方式为:

单字单行显示;生成的字模格式:

C51十六进制*/

int8ugRowBuff2[8]={0xFE,0xC,0x10,0xFF,0x10,0x10,0x10,0x30};

/*这是“设”的字模;该字模由LEDDOT生成;字模的提取方式为:

逐行提取;

字模的显示方式为:

单字单行显示;生成的字模格式:

C51十六进制*/

int8ugRowBuff3[8]={0xDC,0x54,0xF7,0x7E,0x52,0x7C,0x4C,0x37};

/*这是“计”的字模;该字模由LEDDOT生成;字模的提取方式为:

逐行提取;

字模的显示方式为:

单字单行显示;生成的字模格式:

C51十六进制*/

int8ugRowBuff4[8]={0xC4,0x44,0xBF,0x44,0x44,0x64,0x44,0x04};

 

上下循环:

int8ugRowBuffa[]=

{

0x04,0x7F,0x49,0x7F,0x49,0x7F,0x84,0xF4,0x00,//电

0x7E,0x20,0xFE,0x10,0x10,0x10,0x14,0x10,0x00,//子

0x72,0xDF,0x05,0xF5,0x54,0x24,0x5C,0x85,0x00,//设

0x22,0x27,0xFC,0x24,0x24,0x24,0x2C,0x24,0x00//计

};

 

左右循环:

int8ugRowBuff[]=

{

0xC0,0xBE,0xAA,0xAA,0x7F,0x2A,0x2A,0x3E,0x00,//电

0x04,0x04,0x05,0x45,0xFD,0x07,0x05,0x02,0x00,//子

0x02,0x03,0xFE,0xCA,0x5B,0x29,0x5B,0x8A,0x00,//设

0x02,0x03,0xFE,0x88,0xD8,0x7F,0x08,0x08,0x00//计

};

 

四、软件设计

(1)设计说明:

主函数中共分为三部分,主循环为单字循环显示,外部中断0的中断函数为上下循环,外部中断1的中断函数为左右循环。

采用边沿触发方式产生中断,每次中断都循环显示“电子设计”。

(2)软件参数设置:

1.Keil软件:

在Keil中选择AT89C52进行仿真,选择频率为11MHZ,如下图:

选择仿真输出.hex文件,方便进行烧录,如下图:

 

设置Debug,如下图:

2.STC烧录软件:

(3)源程序:

#include

#defineRowP1

#defineColP2

#defineResetBit(byte,i)((byte)&=(0x01<<(i)));

typedefunsignedintint16u;

typedefunsignedcharint8u;

/*************************************************

模块级变量申明——单字循环显示

*************************************************/

/*这是“电”的字模;该字模由LEDDOT生成;字模的提取方式为:

逐行提取;

字模的显示方式为:

单字单行显示;生成的字模格式:

C51十六进制*/

int8ugRowBuff1[8]={0x04,0x7F,0x49,0x7F,0x49,0x7F,0x84,0xF4};

/*这是“子”的字模;该字模由LEDDOT生成;字模的提取方式为:

逐行提取;

字模的显示方式为:

单字单行显示;生成的字模格式:

C51十六进制*/

int8ugRowBuff2[8]={0x7E,0x20,0xFE,0x10,0x10,0x10,0x14,0x10};

/*这是“设”的字模;该字模由LEDDOT生成;字模的提取方式为:

逐行提取;

字模的显示方式为:

单字单行显示;生成的字模格式:

C51十六进制*/

int8ugRowBuff3[8]={0x72,0xDF,0x05,0xF5,0x54,0x24,0x5C,0x85};

/*这是“计”的字模;该字模由LEDDOT生成;字模的提取方式为:

逐行提取;

字模的显示方式为:

单字单行显示;生成的字模格式:

C51十六进制*/

int8ugRowBuff4[8]={0x22,0x27,0xFC,0x24,0x24,0x24,0x2C,0x24};

 

/*************************************************

模块级变量申明——上下循环

*************************************************/

int8ugRowBuffa[]=

{

0x04,0x7F,0x49,0x7F,0x49,0x7F,0x84,0xF4,0x00,

0x7E,0x20,0xFE,0x10,0x10,0x10,0x14,0x10,0x00,

0x72,0xDF,0x05,0xF5,0x54,0x24,0x5C,0x85,0x00,

0x22,0x27,0xFC,0x24,0x24,0x24,0x2C,0x24,0x00

};

 

/*************************************************

模块级变量申明——左右循环

*************************************************/

int8ugRowBuff[]=

{

0xC0,0xBE,0xAA,0xAA,0x7F,0x2A,0x2A,0x3E,0x00,

0x04,0x04,0x05,0x45,0xFD,0x07,0x05,0x02,0x00,

0x02,0x03,0xFE,0xCA,0x5B,0x29,0x5B,0x8A,0x00,

0x02,0x03,0xFE,0x88,0xD8,0x7F,0x08,0x08,0x00

};

 

int8ui,j,n,s;

int16usec;

voidDelay1(void);

voidDelay2(void);

/*************************************************

子函数定义

*************************************************/

voidmain(void)

{

IT0=1;//INT0边沿触发

IT1=1;//INT1边沿触发

EA=1;//允许所有中断

EX0=1;//允许INT0中断

EX1=1;//允许INT1中断

while

(1)

{

Col=0xff;//屏幕清零

sec++;

if(sec<=200)//每个汉字显示四秒;

{

for(i=0;i<8;i++)

{

Col=0xff;

ResetBit(Col,i);//扫描第i列;

Row=gRowBuff1[i];//送显示码;

Delay1();

}

}

elseif((sec>200)&&(sec<=400))

{

for(i=0;i<8;i++)

{

Col=0xff;

ResetBit(Col,i);//扫描第i列;

Row=gRowBuff2[i];

Delay1();

}

}

elseif((sec>400)&&(sec<=600))

{

for(i=0;i<8;i++)

{

Col=0xff;

ResetBit(Col,i);//扫描第i列;

Row=gRowBuff3[i];

Delay1();

}

}

elseif((sec>600)&&(sec<=800))

{

for(i=0;i<8;i++)

{

Col=0xff;

ResetBit(Col,i);//扫描第i列;

Row=gRowBuff4[i];

Delay1();

}

}

elseif((sec>800)&&(sec<=801))

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1