点阵屏制作论文文档格式.docx

上传人:b****8 文档编号:22439918 上传时间:2023-02-04 格式:DOCX 页数:16 大小:100.55KB
下载 相关 举报
点阵屏制作论文文档格式.docx_第1页
第1页 / 共16页
点阵屏制作论文文档格式.docx_第2页
第2页 / 共16页
点阵屏制作论文文档格式.docx_第3页
第3页 / 共16页
点阵屏制作论文文档格式.docx_第4页
第4页 / 共16页
点阵屏制作论文文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

点阵屏制作论文文档格式.docx

《点阵屏制作论文文档格式.docx》由会员分享,可在线阅读,更多相关《点阵屏制作论文文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

点阵屏制作论文文档格式.docx

一、课程设计目的:

1、学习8*8LED点阵显示模块的结构和显示原理,并设计实现16*32LED动态显示屏。

2、学习有关单片机的知识,了解Atmel芯片和74HC154的相关功能。

3、复习C语言的相关知识并学习MCS-51单片机的C语言编程。

4、复习KeiluVision4集成开发环境。

5、复习AltiumDesignerWinter09设计。

6、学习osoft字模提取软件。

7、培养自主学习能力和探索解决问题的能力。

8、培养团队协作精神。

二、作品开发的软硬件平台

操作系统平台:

WindowsXP

集成开发平台:

KeiluVision4

硬件设计平台:

AltiumDesignerWinter09

字模提取平台:

osoft(畔畔字模提取软件)

三、作品设计

1、电源电路

本电源电路以三段集成稳压器7805为核心元件,在工频变压器的变换下将220V的交流市电变换为14v的交流电,再经过由四个1N4007二极管组成的整流桥进行整流,将交流变换为直流,加在三段集成稳压器7805上,经过前级和后级的滤波电路后,得到稳定的5V直流电,用一个共阴数码管显示一个’5’作为电源电压的输出显示,整个电源模块电路如下图所示:

2、硬件

采用4块8*8点阵模块组成16*16的256像素的显示模块,并采用74HC154的4线16线译码功能进行16*16显示模块的列线扫描,一个74HC154占用单片机的4个I/O口,用单片机的两组I/O口进行上8行和下8行进行行线扫描,本设计采用两个16*16的显示模块,因此用2个74HC154进行列线扫描;

由于本设计用的是AT89C52单片机,没有推挽输出功能,所以在设计中用上拉电阻给LED提供稳定的电流,以使显示均匀。

2.1AT89C52

  AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。

  AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。

  AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线;

AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

  AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。

  主要功能特性:

  ·

兼容MCS51指令系统·

8k可反复擦写(>

1000次)FlashROM

32个双向I/O口·

256x8bit内部RAM

3个16位可编程定时/计数器中断·

时钟频率0-24MHz

2个串行中断·

可编程UART串行通道

2个外部中断源·

共6个中断源

2个读写中断口线·

3级加密位

低功耗空闲和掉电模式·

软件设置睡眠和唤醒功能

2.2LED显示系统

主要由2部分构成:

主控单元和显示子模块。

主控单元选用具有8kB片内FLASHROM的AT89C52,若要增加存储容量,可以选用外挂存储器,或者用其它更高级的单片机;

主控单元主要完成对显示数据的滚动和分割处理,然后通过并行口发送到每个LED显示模块中。

显示模块用四块8*8的点阵屏组合成16*16的LED电子显示模块,用两个74HC154进行列线的驱动。

若要进行更多的扩展,则进行74HC154级联的方式进行扩展。

主控电路:

显示模块电路:

3、软件开发

在KeiluVision4集成开发平台上进行MCS-51单片机的C语言程序开发,用osoft(畔畔字模提取软件)进行显示内容代码的提取,并对整个软件进行了开发和调试,最后烧写在AT89C52上进行运行。

流程图如下:

流程图

4、作品实物图(略)

四、结论

本系统实现了16*32LED点阵显示屏的设计,并滚动显示了“天水师范学院”等字样,整体设计的模块度和集成度都很好;

在整个设计和制作过程中,小组成员配合紧密,完成了整个系统的设计和制作,体现了很好的团队精神,总体上比较成功。

致谢

感谢为本次设计做出支持和指导的李老师,同时感谢小组领队、总设计和助理等人为本设计做出的努力,望在今后的学习中更加的努力上进,精益求精。

参考文献:

[1]康华光主编.电子技术基础.模拟部分(第五版)高等教育出版社.2006年1月

[2]康华光主编.电子技术基础.数字部分(第五版)高等教育出版社.2006年1月

[3]吴戈李玉峰等编著案例学单片机C语言开发人民邮电出版社2008年12月

[4]王秋爽曾昭龙等编著单片机开发基础与经典设计实例机械工业出版社2008年3月

[5]石磊张国强等编著AltiumDesigner8.0电路设计标准教程清华大学出版社2009年11月

附1:

电源电路图

附2:

主控电路图

附3部分程序代码

#include<

reg52.h>

#defineuintunsignedint

#defineucharunsignedchar

#defineulongunsignedlong

#definehang1P0//上行线

#definehang2P2//下行线

#definelieP3//列线

#definesumsizeof(hanzi)/32//自动计算汉字字数

#defineziti16//字体大小(宽为16)

/*==============================参数设置=============================*/

uintk=0,j;

//移位变量,k:

移位个数

uinta=0;

//软件延时,用于定时器0

uchardisbuf[32][2];

//定义显示缓冲区(16行两列的二维数以开辟1个16*16汉字的空间)

bitmove_st;

//移动标志

sbitcs1=P1^0;

//片选

sbitcs2=P1^1;

ucharcodedriver[]={0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,

0x80,0x90,0xa0,0xb0,0xc0,0xd0,0xe0,0xf0,

0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,

0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff};

/*============================显示内容译码表========================*/

ucharcodehanzi[]={/*--宋体12;

此字体下对应的点阵为:

宽x高=16x16--*/

/*--标志--*/

0x77,0x63,0x41,0x00,0x00,0xF8,0xFC,0x86,0x41,0xA0,0x50,0x29,0x17,0x8B,0x8F,0x1F,

0xE0,0xE0,0xD0,0x28,0x14,0x0F,0x0F,0x1F,0x3F,0x30,0x30,0x30,0x31,0xB3,0xD3,0xE9,

/*--空白,用于间隔--*/

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

/*--天--*/

0x40,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x00,

0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0xC0,0x40,0x00,

/*--水--*/

0x00,0x20,0x20,0x20,0x20,0xE0,0x00,0xFF,0x80,0x80,0x40,0x20,0x10,0x00,0x00,0x00,

0x10,0x08,0x04,0x02,0x01,0x40,0x80,0x7F,0x00,0x01,0x02,0x04,0x08,0x10,0x10,0x00,

/*--师--*/

0x00,0xFC,0x00,0x00,0xFF,0x00,0x02,0xF2,0x12,0x12,0xFE,0x12,0x12,0xF2,0x02,0x00,

0x00,0x8F,0x40,0x20,0x1F,0x00,0x00,0x3F,0x00,0x00,0xFF,0x10,0x20,0x3F,0x00,0x00,

/*--范--*/

0x04,0x44,0x94,0x24,0x6F,0x04,0xE4,0x24,0x24,0x24,0x2F,0xE4,0x04,0x04,0x04,0x00,

0x00,0x08,0x19,0x39,0x04,0x00,0x3F,0x40,0x40,0x42,0x44,0x43,0x40,0x40,0x70,0x00,

/*--学--*/

0x40,0x30,0x10,0x92,0x9C,0x90,0x92,0x9C,0x90,0x90,0x98,0x16,0x10,0x50,0x30,0x00,

0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7C,0x06,0x05,0x04,0x04,0x04,0x04,0x04,0x00,

/*--院--*/

0xFE,0x22,0x52,0x8E,0x10,0x0C,0x44,0x44,0x45,0x46,0x44,0x44,0x44,0x14,0x0C,0x00,

0xFF,0x04,0x08,0x07,0x80,0x81,0x41,0x21,0x1F,0x01,0x3F,0x41,0x41,0x41,0x70,0x00,

/*--空白,用于结束--*/

};

ulongs=(sum+1)*16;

//计算全部列数,并赋值s

/*=========================延时子程序================================*/

voiddelay(void)

{

uchari;

for(i=0;

i<

50;

i++);

//显示亮度,50可更改

}

/*============================初始化子程序==========================*/

voidinit(void)

{

TMOD=0x01;

//定时器0工作方式为1

TH0=0xfc;

//装载初值,高八位(定时1ms)

TL0=0x18;

//装载初值,低八位

EA=1;

//开总中断

TR0=1;

//启动定时器0

ET0=1;

//打开定时器0中断

/*==============================循环显示内容=========================*/

voidrun_move(void)

uchark1,k2;

if(a>

=80)//控制移动速度,50可更改

if(k>

s-16-1)k=0;

//整屏移动列数

k1=k/16;

k2=k%16;

j=16*2*k1+k2;

//显示指针

k++;

move_st=1;

a=0;

}

/*==========================装载显示数据至缓冲区==================*/

voidload_hanzi()

uchari;

run_move();

//调用移动函数

if(move_st)//move_st用于判断是否移位

{

for(i=0;

16;

i++)

{

disbuf[i][0]=disbuf[i+1][0];

disbuf[i][1]=disbuf[i+1][1];

}

for(i=16;

32;

i++)

disbuf[i][0]=disbuf[i+1][0];

disbuf[i][1]=disbuf[i+1][1];

disbuf[31][0]=hanzi[j];

disbuf[31][1]=hanzi[16+j];

move_st=0;

/*=======================扫描显示数据缓冲区的内容================*/

voiddisplay(uchar*p)

for(i=16;

i++)//第一个汉字显示

cs2=0;

cs1=1;

lie=*p;

//列线接74LS154,进行译码

hang1=disbuf[i][0];

hang2=disbuf[i][1];

delay();

hang1=0;

hang2=0;

p++;

for(i=0;

i++)//第二个汉字显示

cs2=1;

cs1=0;

/*=============================主程序==========================*/

voidmain(void)

{

init();

while

(1)

load_hanzi();

display(driver);

}

/*==========================定时器0中断服务程序=================*/

voidtimer0(void)interrupt1

//定时1ms

a++;

//进中断计数值

/*=================================END=========================*/

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

当前位置:首页 > 表格模板 > 合同协议

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

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