单片机课程设计报告
—8×8 LED点阵屏显示“大”字
第一章 设计内容及要求…………………………………… 3 第二章 总体设计……………………………………………3 2.1 系统框图 …………………………………………………3、4 2.2 设计步骤 ……………………………………………………4 第三章 各部分电路设计 …………………………………4 3. 1 复位电路 ………………………………………………4 、5 3.2时钟电路 ……………………………………………5、 6 3.3显示电路 …………………………………………………6、7 3. 4大字取模 …………………………………………………7 3.5 LED 引脚连接方式 ……………………………………8、9 3.6总体电路 …………………………………………………9 第四章 程序设计 ………………………………………………9 4.1软件流图………………………………………………9、10 4.2大字的模……………………………………………………10 4.2主程序………………………………………………10、11 4.3 C51单片机开发工具:keil 4 Proteus使用方法…11、16
编辑版word
第五章 仿真结果……………………………………………16 第六章 总结与体会…………………………………………17、18 第七章 参考文献………………………………………………18 附录 程序清单……………………………………………19、20
基于C51单片机的8×8 LED点阵屏汉字显示 一 设计要求
1、设计一个8*8点阵LED电子显示屏 2、要求在目测条件下LED显示屏各点亮度均匀、充足,可静态显示一个大字。 二 总体方案设计 2.1系统框图
根据设计要求与设计方案,硬件电路的设计框图如图1所示。硬件电路结构由8个部分组成:时钟电路、复位电路、按键接口电路、电源电路、点阵显示阳极电路、点阵显示阴极电路和8*8点
编辑版word
阵显示电路。
2.2设计步骤
根据设计要求,初步确定设计方案如下: 1. 选择STC89C52单片机(晶振频率为f=12MHZ)作为整个系统的核心器件,对整个系统进行总体控制,发送并时时处理系统信息。 2.由于是8*8点阵屏设计,需要端口16个,可采用静态显示模式,用P0口控制行,P2口控制列 。 3.通过软件编程,即可实现汉字“大”的显示。 4.点阵的点亮过程有程序控制,点阵采用单色显示。
三 各部分电路设计
编辑版word
3.1 复位电路
单片机在启动运行时需要复位,使CPU以及其他功能部件处于一个确定的初始状态,并从这个状态开始工作,另外,在单片机工作过程中,如果出现死机时,也必须对单片机进行复位,使其重新开始工作。本设计中采用按键复位电路
3.2时钟电路
STC89C52单片机内部的振荡电路是一个高增益反向放大器,引线X1和X2分别是放大器的输入端和输出端。单片机内部虽然有振荡电路,但要形成时钟,外部还需附加电路。STC89C52的时钟产生方式有两种:内部时钟电方式和外部时钟方式。由于外部时钟方式用于多片单片机组成的系统中,所以此处选用内部时钟方式。
编辑版word
内部时钟方式:利用其内部的振荡电路在X1和X2引线上外接定时元件,内部振荡电路产生自激振荡。最常用的是在 X1和X2之间接晶体振荡器与电路构成稳定的自激振荡器,如图4所示电路所示为单片机最常用的时钟振荡电路的接法,其中晶振可选用振荡频率为12MHz的石英晶体,电容器一般选择30PF左右
3.3显示电路的设计
本次设计中采用8*8点阵LED显示器,简称LED点阵板或LED矩阵板。它是以发光二极管为像素,按照行与列的顺序排列起来,用集成工艺制成的显示器件。有单色和双色之分,这种显示器有共阳极接法和共阴极接法两种,设计中用到的是共阳极的显示器。图中画出了8*8点阵的二极管。每一行发光二极管的阳极接在一起,有一个引出端r,每一列发光二极管的阴极接在一起,有一个引出端c。当给发光二极管阳极引出端r1加高电平,阴极引出端c1加低电平时,左上角的二极管被点亮因此,对于行和列的电平进行扫描控制时,可以达到显示不同字符的目的。
编辑版word
下图为8*8点阵LED外观及引脚图,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴
关于ARK SZ411288K 8*8点阵 ARK SZ411288K 8*8点阵引脚图
a
编辑版word
b
点阵面对自己,有字的那一面朝ARK那一面。然后按照图b那个坐标轴就可以看出引脚图是如何排列的。1~8为负极,一~八为阳极。
3.4关于“大”字的取模
选用8*8点阵
编辑版word
得出”大”字的取模为
0x44,0x24,0x14,0x0C,0x0F,0x14,0x24,0x44,
3.5关于LED显示器
当采用单片机进行控制时,连接点阵显示器的共阳极r端与单片机的P2口相连,而共阴极c端需经限流电阻与单片机的P0口相连。在编程控制时,将8*8点阵LED显示分成行和列两部分,字符数据从P0口输出,扫描控制字从P2口输出,每一列由一个字节的数据组成,数据可一次送入,然后扫描一行,显示一个字需要扫描8次。
3.6整体电路图
编辑版word
四 程序设计
4.1软件流图
P0口外接点阵来驱动行点亮,P2口外接点阵进行列选通,来显示大字
4.2 大字的模
定义行unsigned char code
taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}//P0口输出 定义列unsigned char code
taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}//P2口输出
4.3主程序
void main(void)
编辑版word
{
TMOD=0X10; //设置定时器1为工作方式1 TH1=(65536-50000)/256;
TL1=(65536-50000)%256; //定时50000us EA=1; //开总中断 ET1=1; //开定时器1中断 TR1=1; //启动定时器1
4.4显示函数
while(1) { for(i=0;i<8;i++) { P0=taba[i]; P2=tabb[i]; } } }
4.5定时中断函数
void ext1() interrupt 3 {
编辑版word
TH1=(65536-50000)/256; TL1=(65536-50000)%256; t++; }
程序清单在最后的附录中
4.3
打开keil,先建立一个工程
建议先新建一个文件夹用来存放,不然待会儿找不着。输入工程名后点保存,出现单片机型号选择框,一般用stc的51单片机,由于上面没有stc的,选择atmel的就可以,因为它们是兼容的。选好后点击OK
编辑版word
新建c程序
点击file/new后点左上角的保存按钮,输入文件名,记住扩展名.c,接着点击target 1,右键source group 1,出现可以选择。点击add files to group's source ,选择刚才的c文件,点击add,后close。
如果要烧录到单片机中,还得创建hex,在上面方框target 1的右边的第一个按钮,单击。选择output,勾选creat hex file,编程完后编译,连接等步骤。
最好生成hex文件
编辑版word
Proteus基本使用方法
功能模块:元件选择 端口模块 测量仪器 点击P可以添加元器件
本次实验所用元器件
编辑版word
搭建电路
选中元器件然后放在电路图合适位置,连线。 本实验的vcc和地在端口原件,分别是power和ground
双击单片机
编辑版word
然后将编译好的hex导入,点确定。
最后运行仿真即可。
编辑版word
五 仿真结果
六 总结及体会
1
在这次课程设计的整个过程中,我们做了一次全面、较规范的设计练习,全面地温习了以前所学过的知识,用理论联系实际并结合单片机原理课程和解决实际问题,巩固、加深和扩展了有关单片机设计方面的知识。尤其重要的是让我们养成了科学的习惯,在设计过程中一定要注意掌握设计进度,按预定计划完成阶段性的目标,在底图设计阶段,注意设计计算与结构设计
编辑版word
画图交替进行,采用正确的设计方法。在整个设计过程中注意对设计资料和计算数据的保存和积累,保持记录的完整性。在课程设计的实践中进行了设计基本技能的训练,掌握了查阅和使用标准、规范、手册、图册、及相关技术资料的基本技能以及计算、数据处理等方面的能力。 2
通过对通用51系列单片机机处理器、常用元器件的设计,掌握了一般单片机设计的程序和方法,让我们对整个单片机程序的设计,C51语言有了一个比较深的理解。 3
还有就是增强了自身的动手能力。在这次课程设计中,我主要负责的是程序设计和单片机部件焊接。通过参考相关的程序设计,自己写出了主要的程序代码。同时将元器件正确焊接到基板上。这些都是将以前书本上讲的或是没有讲的,通过一次课程设计具体的实施,使自己的动手能力和独立设计能力真正得到锻炼,对于以后我们的发展与学习来说,都可以看作一笔不小的财富,前面还有很多需要我们去尝试。
同时不能忽略的是,这一次课程设计是以小组为单位的。在这次课程设计中,我和自己的小组成员学会了
编辑版word
密切分工配合。而这样的合作能力和团队精神在今后的学习工作中是很重要的。
七 参考文献
[1]《单片机原理及应用》 薛峰.朱晓骏 编著 北京:北京理工大学出版社,2011,9
附录 程序清单 #include taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//行选 unsigned char code 编辑版word tabb[]={0x44,0x24,0x14,0x0F,0x14,0x24,0x44,0x04};//列选 unsigned char i; void main(void) { TMOD=0X10; //设置定时器1为工作方式1 TH1=(65536-50000)/256; TL1=(65536-50000)%256; //定时50000us EA=1; //开总中断 ET1=1; //开定时器1中断 TR1=1; //启动定时器1 while(1) { //*****************显示函数****************// for(i=0;i<8;i++) { P0=taba[i]; P2=tabb[i]; } } } //*****************定时中断函数 编辑版word ****************// void ext1() interrupt 3 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; t++; } (此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容, 供参考,感谢您的配合和支持) 编辑版word 因篇幅问题不能全部显示,请点此查看更多更全内容