基于单片机的8X8点阵数字显示.docx
- 文档编号:24034903
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:17
- 大小:383.48KB
基于单片机的8X8点阵数字显示.docx
《基于单片机的8X8点阵数字显示.docx》由会员分享,可在线阅读,更多相关《基于单片机的8X8点阵数字显示.docx(17页珍藏版)》请在冰豆网上搜索。
基于单片机的8X8点阵数字显示
课程设计报告书
课题:
基于单片机的8X8点阵数字显示
院(系):
机电工程学院
专业:
机械电子工程
学生姓名:
周堂
学号:
0800160129
题目类型:
理论研究实验研究工程设计工程技术研究软件开发
2011年12月5日
前言
本次课程设计的题目为8X8点阵数字显示,设计的任务为使用单片机控制8X8的点阵显示0到9的数字,不仅显示清晰,并且当按键按一次,显示的数字加一,从0到9循环。
在资料收集方面,主要是参考了《51单片机原理及应用—基于KeilC与Proteus》一书,结合了一些网络资料,以及一些集成块的使用说明书。
在整个工作过程中,根据收集来的资料绘制出大概的原理图,然后通过Proteus仿真,与此同时运用KeilC编程,用KeilC与Proteus进行联调,调试成功后确定了原理图和控制程序。
再使用Protel99绘制原理图以及PCB图。
然后利用热转印法做电路板,焊接元器件。
最后进行调试。
第一章系统概述
1.1系统设计思路与方案
基于设计要求,采用单片机读取键盘的数据,通过程序直接控制点阵的方式。
方框图如图1.1.1。
图1.1.1
系统采用51系列单片机控制,选用外部引脚P3.2、P3.3以中断的方式来实现按键信号的读入。
采用中断方式的优势在于不会影响到程序的控制流程,有利于控制程序的设计。
单片机与8X8点阵之间的信号控制可由P0口与P2口共同实现,由于采用单片机直接控制8X8点阵的控制方式,使得硬件电路相对简单,只需在I/O口与8X8点阵之间接入限流电阻限流即可,同时也有利于程序的设计。
P0口作为普通的I/O口使用时,输出的是漏极开路电路,所以需要外界上拉电阻(5~10k)才能正常工作。
在完成设计任务基本功能的基础上,还增加了扩展功能,即增加了自动模式和二进制显示功能以及数据记录显示模式。
自动模式能自动依次显示组员的学号,中间以“心”隔开。
二进制显示用于显示当前点阵所显示数字的二进制代码。
数据记录显示模式能过选择任意数字串(长度小于15)进行记录显示。
1.2可行性分析
51单片机拥有两个外部中断源,可以以中断的方式引入两个按键。
51单片机有4组32个I/O口,分别为P0、P1、P2、P3,能够满足利用两组I/O口来控制8X8点的要求。
至于扩展的功能,通过控制程序的设计也可以实现。
第二章单元电路及程序设计与仿真
2.1电路的设计
根据已完成的设计方案可知,硬件电路主要为单片机最小系统板加上中断按键电路,以及电阻限流的8X8点阵电路。
(1)单片机最小系统板
单片机最小系统版是指单片机运行起来最基本的电路组成,单片机最小系统板主要由复位电路和时钟电路组成,如图2.1.1所示。
①复位电路
在51单片机中最常见的复位电路有如图2.1.2所示的上电复位和手动复位电路,均能有效的实现复位。
RST引脚是复位信号输入端,复位信号为高电平有效,有效持续时间在24个振荡周期以上才能复位。
出于对单片机在使用过程中死机时能过方便复位的考虑,这里选用手动复位电路。
②时钟电路
单片机的时钟连接方式可以分为内部时钟和外部时钟方式。
内部振荡方式:
如图2.1.3,单片机内有一个用于构成振荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
把放大器与作为反馈元件的晶体振荡器或陶瓷谐振器连接,就构成了内部自激振荡器并产生振荡时钟脉冲。
外部振荡方式:
将外部已有的时钟信号引入单片机内。
此处选用内部振荡方式。
图2.1.1
图2.1.2
图2.1.3
(2)中断按键电路
中断按键电路取决于控制程序的设计,在控制程序中选用中断为负跳变触发方式,因此中断按键电路设计如图,当按键未按下时,相应管脚位高电平,当按键按下时,管脚电平负跳变,触发中断,使控制程序转入中断服务程序,如图2.1.4。
如图2.1.4
(3)电阻限流的8X8点阵电路
8X8点阵内部有64个LED组成,驱动时,仅需加限流电阻限流即可,如图2.1.5。
图2.1.5
由资料知LED发光极管的压降一般为1.5-2.0V,工作电流一般为10-20mA,这里取其工作时,I=10mA,U=1.5V,则限流电阻的阻值为:
R=(5-1.5)/0.01=350Ω
由于学校无法买到350Ω的电阻,这里选用限流电阻R=470Ω
2.2程序的设计
(1)8X8点阵数字显示的编码原理
8X8点阵数字显示主要应用行扫描动态显示的方法实现,如图2.2.1所示,将行线依次置零,一次对列线编码,有红色填充部分为1,无填充部分为0。
图2.2.1
如此可得到“0”的编码为{0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00},同理可得到:
{0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00},//1
{0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00},//2
{0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00},//3
{0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00},//4
{0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00},//5
{0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00},//6
{0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00},//7
{0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00},//8
{0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00}//9
(2)程序设计
程序设计采用了模块化的设计思想,即将各功能程序段封装成函数,以待后续程序调用,流程图2.2.2。
1开机检测程序
开机检测程序让8X8点阵全亮,以检测屏幕是否有坏点。
主要的语句:
P0=0xff;//开点阵
P2=0x00;
P1=0xff;
delay(1000/i);
P0=0x00;//关点阵
P1=0x00;
delay(1000/i);
图2.2.2
2数字显示(无时间控制)程序
该程序段以行扫描动态显示的方式显示0-9任意数字。
voiddisplaynumon(intn)//待显示的数字n
{
intj;
for(j=0;j<8;j++)//行扫描动态显示
{
P2=tabh[j];
P0=tabn[n][j];
delay
(1);
}
}
③外部中断1ISP
该程序段以按键中断的方式进行运行模式的选择,在三种模式中切换。
voidINT_0()interrupt0
{
EX0=0;
delay(20);//去抖
EX0=1;
flag++;//模式标志
if(flag==3)
flag=0;
}
④外部中断2ISP
该程序段用于手动模式下显示数字的手动循环,以及数据记录显示下的数据选择和确认。
voidINT_1()interrupt2
{
EX1=0;
delay(10);
EX1=1;
if(flag==1)//手动模式递增
{
number++;
if(number==10)
number=0;
}
if(flag==2)//数据记录显示模式选择和确认
{
TR0=1;
if(k<15)
{
tabmem[k]=tabnum[i];
k++;
P0=0xff;
P2=0x00;
delay(10);
}
}
}
⑤定时中断
用于数据选择显示模式下的确认控制
voidtime0()interrupt1
{
TH0=(65536-50000)/256;//定时器赋初值
TL0=(65536-50000)%256;
count++;
if(count>=10)
{
count=0;
TR0=0;//关闭定时器
}
if(but==0&&count==9)
{
mark++;
if(mark==2)
mark=0;
P0=0xff;
P2=0x00;
delay(20);
if(mark==0)
{
k=0;
for(j=0;j<15;j++)
tabmem[j]=0;
}
}
}
2.3仿真
基于proteus和keilc对设计的软件和硬件进行联调仿真,如图2.3.1。
经过仿真,初步验证了原理图和程序设计的正确性,接着可以进行Protel99PCB布线,制版。
图2.3.1
第三章电路的安装与调试
在电路的安装调试中主要出现了两个问题,一个是8X8点阵封装与protel99中不一致,另一个是在8X8点阵封装改正之后单片机P0口有几位出现无法上拉输出的现象。
(1)8X8点阵封装问题
①现象记录
当做好板子后进行实际电路的调试时,发现8X8点阵上出现的仅为乱码,即便程序只要求8X8点阵全亮时,点阵也是无规律的点亮部分点。
2原因分析
认真检查电路后发现电路无短路和断路现象,单片机管脚输出信号也正常,空之程序也无误,猜想点阵的封装可能与Protel99中不一致。
③处理措施及效果
从网上搜索该点阵的封装后,发现其封装确实不同于Protel99中的封装,8X8点阵封装如图3.1,因此将PCB板上的点阵驱动信号用排线引出,在按照实际封装与点阵管脚相连,得到正确清晰地数字显示,因此需重新印制PCB板。
图3.1
(2)P0口有几位输出无法上拉
①现象记录
在重新印制好PCB板后,再次将软硬件进行联调,发现点阵还是有三行无法显示,猜测行控制信号出错,用万用表测量P0口电压发现P0.5、P0.6以及P0.7输出电压仅为2V左右,显然这几位输出无法上拉。
②原因分析
首先,我们认为是P0口的上拉排阻出错,因此用万用表测量上拉排阻的组织,发现P0.5、P0.6、
P0.7位处排阻阻值异常,因此猜想是排阻烧坏,更改换新的排阻后还是出现相同的情况,因此排除排阻烧坏的可能,然后接着检查电路,发现P0.5、P0.6、P0.7控制点阵的线路出现与相邻线路短接的现象,因此我们得出错误原因来源于腐蚀电路板时腐蚀不够彻底,使得残余的小点状铜片让相邻的线路短接的现象。
3理措施及效果
用小刀割断相连处的铜片,使得相邻线路分开。
用万用表再次测量时发现P0口上拉正常,插入点阵,运行程序正常,调试成功。
第四章结束语
本系统能够完成设计任务,即能够显示数字0-9,并且能够用按键控制数字递增,显示也较为稳定清晰,除了实现基本的设计任务以外本系统还能够实现自动与手动模式的选择,自动模式能够自动的显示各组员的学号,并以“❤”隔开,同时本系统还能够显示当前点阵上数字的二进制码。
对于本系统的进一步改进意见主要有两点:
一是增加滚屏功能,即使数字在屏幕上滚动显示,这样更有动感,也能使界面更加友好;二是增加键盘输入显示值功能,这需要系统增加一个行扫描键盘以实现。
在本次课程设计中,主要使用了Protel99、Protenus以及KeilC等软件进行硬件电路和控制程序的设计,加深了对这些软件的了解,同时在硬件电路PCB板子制作上,也加深了对热转印法制版的流程和应注意的问题,例如在腐蚀电路时一定要腐蚀完全,否则会造成线路的短接等。
在PCB板布线时应根据实际的元件封装来绘制PCB图纸。
附件
元件清单表
序号
名称
型号参数
数量
备注
1
铜板
14X15、14X12
2
废掉一块
2
排针
5
3
芯片插针
3
4
自锁座
2
废掉一个
5
晶振
12M
1
6
按键
6
废掉3个
7
LED
5
8
点阵
8X8
1
9
电阻
1k
36
废掉26个
10
电阻
470Ω
16
11
瓷片电容
22pF
2
12
电解电容
20uF
1
13
单片机
AT89S51
1
原理图
PCB图
参考文献
[1]陈海宴主编.51单片机原理及应用—基于KeilC与Proteus[M].北京:
北京航天航空大学出版社,2010.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 X8 点阵 数字 显示