点阵课程设计报告材料.docx
- 文档编号:13433964
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:22
- 大小:1.77MB
点阵课程设计报告材料.docx
《点阵课程设计报告材料.docx》由会员分享,可在线阅读,更多相关《点阵课程设计报告材料.docx(22页珍藏版)》请在冰点文库上搜索。
点阵课程设计报告材料
一.方案论证与设计
1.1设计要求
一、使用AT89S51设计一个点阵显示控制系统。
二、基本要求(难度系数0.7):
(1)在点阵上显示固定的汉字“中”;
(2)同过按键切换显示汉字“中”、“国”;
(3)在点阵上滚动显示汉字“中国”。
三、发挥部分:
(1)增加通过串口设置点阵显示容的功能
1.2要求分析
一、点阵说明:
8×8单色点阵共需要64个发光二极管组成,且每个二极管是放置在行线与列线的交叉点上如图
(1)。
比如:
如果要想实现第一发光二极管亮,那么只要将DC8引脚置高电平,DR1引脚置低电平。
这样便可以实现第一个二极管亮。
如果要实现第一行亮,DC=0x80;DR=0xfe。
按照这样的思路就可以让点阵上的任一个二极管亮。
本课程设计中,行是由74HC595控制列是由P0口控制的。
所以我们下面介绍一下74HC595的用法,及其芯片的原理。
图
(1)
二、74HC595简介:
74HC595的输出端为D0~D7,这8位并行输出端可以直接控制数码管的8个管段,D7’为级联输出端,它用来连接下一片595的串行数据输入端DS,下面给出74HC595控制引脚的详细说明。
SRCLK(11脚)用于输入移位时钟脉冲,在上升沿时移位寄存器(shiftregister)数据移位,D0→D1→D2→D3→D4→D5→D6→D7→Q7’,其中Q7’用于595的级联,本课程设计中串行输入函数Hc595SendByte,使用了SRCLK引脚及下面的DS引脚。
SER(14脚)为串行数据输入引脚,Hc595SendByte函数通过移位运算符有高位到低位将各位数据通过SER引脚传行输入595芯片,串行发送时由SRCLK引脚提供移位时钟。
For循环控制完成8次移位急可完成1字节的串行传送。
RCLK(12脚)提供锁存脉冲,在上升沿时移位寄存器的数据被传入存储器,由于
引脚接地,传入存储寄存器的数据会直接出现在输出端D0~D7。
在串行输入函数完成1个字节的传送后,数据送出由并行输出函数COMMONPORTS在RCLK的上升沿完成。
(10脚)在低电平时将移位寄存器数据清零,本课程设计中该引脚直接连接VCC。
(13脚)在高电平时禁止输出(高阻态),本课程设计中改引脚接地,存储寄存器中的容将直接输出。
74HC595的主要优点是能锁存数据,在移位过程中,输出端的数据保持不变,这有利于使点阵在串行速度较慢的场合不会出现闪烁感。
三、按键的介绍:
按键的扫面的方法的有两种,本设计中采用较快的行列扫描的方法。
行列扫描:
我们可以通过高四位全部输出低电平,低四位输出高电平。
当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。
1.3方案说明
二.点阵硬件设计
三.点阵软件设计
voidmain()
{
display
(2);
KeyValue=0xff;
while
(1)
{KeyDown();
if(KeyValue==0)
display(0);
if(KeyValue==1)
display
(1);
if(KeyValue==2)
{
intnum,temp,tab;
temp=ALL[0];
for(num=0;num<15;num++)
{
ALL[num]=ALL[num+1];
}
ALL[15]=temp;
for(num=0;num<15;num++)
{for(tab=0;tab<8;tab++)
{
Hc595SendByte(0x00);//消隐
COMMONPORTS=TAB[tab];//输出字码
Hc595SendByte(ALL[tab]);
delay
(2);
}
}
}
else
display
(2);
}
}
四.实验结果与分析
五.总结与体会
一、问题与解决方法
(1)74HC595芯片不认识
74HC595芯片是我做这个课程设计遇到的最大的问题,起初我以前点阵像数码管一样,是共阴或者是共阳的方式连接。
只要在P0进行控制,便可以随意点亮每一个二极管。
通过我上网查看,发现他们不是这样的,需要在一段置高电平,另一端置低电平才能点亮。
在原理图上,很显然可以看出发光二极管的一端靠P0口控制的,另一端靠74HC595控制。
所以我必须要了解595的工作原理,在要求分析阶段我已经对74HC595做了介绍。
(2)delay()函数的延迟计算
延时时间的长短等于指令周期乘以总的只能,如果要是这样算的话。
在需要延时一段时间,使用延时延时函数比较方便。
如果想要具体延时多久,使用定时器跟准确。
(3)“中”字闪烁
“中”字出现了,时间较短的闪烁现象。
我马上就想到了,因为我是通过逐行扫描的方式点亮点阵的。
所以肯定是扫描的上一行和下一行的眼时间过长。
所以只要改变一下delay()函数的延时时间就可以了。
(4)FPGA电路板上电后立刻出现“中”字
因为在刚开始定义ValueKey的时候,没有对其赋值。
因为在Keil中,如果定义某个变量,如果不对其进行赋值,keil会默认它为0;所以进入我的住函数的时候,在我没有按下按键之前ValueKey已经得到一个值了,它马上会显示“中”。
在老师的帮助下,查出了这个问题。
通过这个问题,我觉得是我编程的时候,不规操作造成的。
这提醒我,下次编程的时候,应该在定义个变量的同时将其赋值。
参考文献
[1]靖武,周灵杉.单片机系统的PROTEUS设计与仿真[M].:
电子工业,2007
[2]红,邹华.单片机原理及应用机械工业2012.07
[3]王悦凯51单片机系统入门.扩展.应用开发学习手册中国铁道2013
[4]彭伟单片机C语言程序设计实训100例电子工业2011
附录
(1)显示一个“中”程序如下:
#include
#include
#defineucharunsingedchar
#defineCOMMONPORTSP0
sbitSRCLK=P3^6;
sbitRCLK=P3^5;
sbitSER=P3^4;
unsignedcharcodeTAB[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsignedcharcodeCHARCODE[1][8]={0x7C,0x48,0x48,0xFF,0x48,0x48,0x7C,0x00};//“中”
voidHc595SendByte(unsignedchardat)
{
unsignedchara;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}
voiddelay(unsignedinttime)//延迟程序;
{
unsignedinti,j;
for(i=0;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 点阵 课程设计 报告 材料