单片机原理及应用 设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机设计报告
编写:HUBU2015级通信工程xmx 2017年5月23日
一、设计的目的与要求
利用8*8LED点阵动态显示汉字的字样。采用STC89C52单片机作为整个控制搭电路的核心,并编制软件程序,实现汉字的显示。通过此设计来巩固单片机硬件系统的设计及软件系统的编程,通过设计将平时所学知识付诸实践,提高动手能力。
1、设计一个8*8点阵LED电子显示屏。
2、要求在目测条件下LED显示屏各点亮度均匀、充足,可显示一个“大”字。
二、总体方案设计
2.1 硬件电路的总体设计
1、设计总体框图
硬件电路的设计框图如图1所示。硬件电路结构由8个部分组成:时钟电路、复位电路、按键接口电路、电源电路、点阵显示阳极电路、点阵显示阴极电路和8*8点阵显示电路。
2、工作原理
由于是8*8点阵屏设计,需要端口16个,可采用静态显示模式,用P0口控制行,P1口控制列,通过软件编程,即可实现汉字的显示。
3、元器件清单
2.2系统软件的设计
软件程序主要由开始、初始化、主程序、字库和延时子程序组成。
三、系统硬件电路的具体设计
3.1 时钟电路
STC89C52单片机内部的振荡电路是一个高增益反向放大器,引线X1和X2分别是放大器的输入端和输出端。单片机内部虽然有振荡电路,但要形成时钟,外部还需附加电路。STC89C52的时钟产生方式有两种:内部时钟电方式和外部时钟方式。由于外部时钟方式用于多片单片机组成的系统中,所以此处选用内部时钟方式。
内部时钟方式:利用其内部的振荡电路在X1和X2引线上外接定时元件,内部振荡电路产生自激振荡。最常用的是在 X1和X2之间接晶体振荡器与电路构成稳定的自激振荡器,如图4所示电路所示为单片机最常用的时钟振荡电路的接法,其中晶振可选用振荡频率为12MHz的石英晶体,电容器一般选择30PF 左右
3.2 复位电路
单片机在启动运行时需要复位,使CPU以及其他功能部件处于一个确定的初始状态,并从这个状态开始工作。另外,在单片机工作过程中,如果出现死机时,也必须对单片机进行复位,使其重新开始工作。本设计中采用按键复位电路,上电瞬间,RC电路充电,RST引线端出现正脉冲,只要RST端保持10ms以上的高电平,就能使单片机有效地复位。其中R1选择10KΩ左右的电阻,电容器一般选择10μF。
3.3显示电路的设计
本次设计中采用8*8点阵LED显示器,简称LED点阵板或LED矩阵板。它是以发光二极管为像素,按照行与列的顺序排列起来,用集成工艺制成的显示器件。有单色和双色之分,这种显示器有共阳极接法和共阴极接法两种。设计中用到的是“列共阳,行共阴”,即“列用高电平控制,行用低电平控制”。图中画
出了8*8点阵的二极管。每一行发光二极管的阳极接在一起,有一个引出端r,每一列发光二极管的阴极接在一起,有一个引出端c。当给发光二极管阳极引出端r1加高电平,阴极引出端c1加低电平时,左上角的二极管被点亮因此,对于行和列的电平进行扫描控制时,可以达到显示不同字符的目的。
(1)把“单片机系统”区域中的P0端口用8芯排芯连接到“点阵模块”区域中的“A~H”端口上;
(2)把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“0~7”端口上;
为了方便于单片机连接,我们在焊接的过程中特意将0~7接口排列出来作为列,将A~H接口作为行,这样我们就可以直接将AT89C52单片机的P0口与0~7接口一次连接,将AT89C52单片机的P1口与A~H接口一次连接。要使LED 发亮即使给予数字端高电平,字母端给予低电平,就能使二极管发亮。
四、系统软件的具体设计
4.1显示函数
while(1)
{
for(i=0;i<8;i++)
{
P1=DZ88lie[i]; //列选高电平有效
P0=DZ88hang[i]; //行选低电平有效
}
}
4.2“大”字取模
char code DZ88lie[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};
char code DZ88hang[]={0x77,0xB7,0xD7,0xE0,0xE0,0xD7,0xB7,0x77,};
4.3延时程序
延时程序在单片机编程中使用非常广泛,也很重要,在本次设计的程序中用到了延时子程序。延时子程序如下:
voiddelay_ms(int z)
{
charx,y;
for(x=z;z>0;z--)
for(y=110;y>0;y--);
}
4.4主程序
void main()
{
while(1)
{
for(i=0;i<8;i++)
{
P1=DZ88lie[i]; //列选高电平有效
P0=DZ88hang[i]; //行选低电平有效
delay_ms(1);
}
}
}
五、整体电路图
六、系统软件完整程序代码
#include
#define int unsigned int
#define char unsigned char
char code DZ88lie[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,}; char code DZ88hang[]={0x77,0xB7,0xD7,0xE0,0xE0,0xD7,0xB7,0x77,}; voiddelay_ms(int z);
chari;
void main()
{