点阵课程设计报告(共22页)

上传人:des****85 文档编号:218473434 上传时间:2021-12-04 格式:DOC 页数:22 大小:1.75MB
返回 下载 相关 举报
点阵课程设计报告(共22页)_第1页
第1页 / 共22页
点阵课程设计报告(共22页)_第2页
第2页 / 共22页
点阵课程设计报告(共22页)_第3页
第3页 / 共22页
点阵课程设计报告(共22页)_第4页
第4页 / 共22页
点阵课程设计报告(共22页)_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《点阵课程设计报告(共22页)》由会员分享,可在线阅读,更多相关《点阵课程设计报告(共22页)(22页珍藏版)》请在金锄头文库上搜索。

1、精选优质文档-倾情为你奉上目录一方案论证与设计1.1 设计要求一、使用AT89S51设计一个点阵显示控制系统。二、基本要求(难度系数0.7):(1)在点阵上显示固定的汉字“中”;(2)同过按键切换显示汉字“中”、“国”;(3)在点阵上滚动显示汉字“中国”。三、发挥部分:(1)增加通过串口设置点阵显示内容的功能1.2 要求分析一、点阵说明:88单色点阵共需要64个发光二极管组成,且每个二极管是放置在行线与列线的交叉点上如图(1)。比如:如果要想实现第一发光二极管亮,那么只要将DC8引脚置高电平,DR1引脚置低电平。这样便可以实现第一个二极管亮。如果要实现第一行亮,DC=0x80;DR=0xfe。

2、按照这样的思路就可以让点阵上的任一个二极管亮。本课程设计中,行是由74HC595控制列是由P0口控制的。所以我们下面介绍一下74HC595的用法,及其芯片的原理。图(1)二、74HC595简介:74HC595的输出端为D0D7,这8位并行输出端可以直接控制数码管的8个管段,D7为级联输出端,它用来连接下一片595的串行数据输入端DS,下面给出74HC595控制引脚的详细说明。SRCLK(11脚)用于输入移位时钟脉冲,在上升沿时移位寄存器(shift register)数据移位,D0D1 D2D3D4D5D6D7Q7,其中Q7用于595的级联,本课程设计中串行输入函数Hc595SendByte,

3、使用了SRCLK引脚及下面的DS引脚。SER(14脚)为串行数据输入引脚,Hc595SendByte函数通过移位运算符有高位到低位将各位数据通过SER引脚传行输入595芯片,串行发送时由SRCLK引脚提供移位时钟。For循环控制完成8次移位急可完成1字节的串行传送。RCLK(12脚)提供锁存脉冲,在上升沿时移位寄存器的数据被传入存储器,由于引脚接地,传入存储寄存器的数据会直接出现在输出端D0D7。在串行输入函数完成1个字节的传送后,数据送出由并行输出函数COMMONPORTS在RCLK的上升沿完成。(10脚)在低电平时将移位寄存器数据清零,本课程设计中该引脚直接连接VCC。(13脚)在高电平时

4、禁止输出(高阻态),本课程设计中改引脚接地,存储寄存器中的内容将直接输出。74HC595的主要优点是能锁存数据,在移位过程中,输出端的数据保持不变,这有利于使点阵在串行速度较慢的场合不会出现闪烁感。三、按键的介绍:按键的扫面的方法的有两种,本设计中采用较快的行列扫描的方法。 行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。1.3 方案说明二点阵硬件设

5、计三点阵软件设计开始按下按键得到KeyValue KeyValueKeyValue=0Y KeyValue=0显示“中”NKeyValue=1Y显示“国”NKeyValue=2显示移位“中国”不显示结束void main() display(2); KeyValue=0xff; while(1) KeyDown(); if(KeyValue=0) display(0); if(KeyValue=1) display(1);if(KeyValue=2) int num,temp,tab; temp=ALL0; for(num=0;num15;num+) ALLnum=ALLnum+1; ALL1

6、5=temp; for(num=0;num15;num+) for(tab=0;tab8;tab+)Hc595SendByte(0x00); /消隐COMMONPORTS= TABtab; /输出字码 Hc595SendByte(ALLtab);delay(2); elsedisplay(2); 四. 实验结果与分析五总结与体会一、问题与解决方法(1)74HC595芯片不认识 74HC595芯片是我做这个课程设计遇到的最大的问题,起初我以前点阵像数码管一样,是共阴或者是共阳的方式连接。只要在P0进行控制,便可以随意点亮每一个二极管。通过我上网查看,发现他们不是这样的,需要在一段置高电平,另一端

7、置低电平才能点亮。在原理图上,很显然可以看出发光二极管的一端靠P0口控制的,另一端靠74HC595控制。所以我必须要了解595的工作原理,在要求分析阶段我已经对74HC595做了介绍。(2)delay()函数的延迟计算 延时时间的长短等于指令周期乘以总的只能,如果要是这样算的话。在需要延时一段时间,使用延时延时函数比较方便。如果想要具体延时多久,使用定时器跟准确。(3)“中”字闪烁 “中”字出现了,时间较短的闪烁现象。我马上就想到了,因为我是通过逐行扫描的方式点亮点阵的。所以肯定是扫描的上一行和下一行的眼时间过长。所以只要改变一下delay()函数的延时时间就可以了。(4)FPGA电路板上电后

8、立刻出现“中”字 因为在刚开始定义ValueKey的时候,没有对其赋值。因为在Keil中, 如果定义某个变量,如果不对其进行赋值,keil会默认它为0;所以进入我的住函数的时候,在我没有按下按键之前ValueKey已经得到一个值了,它马上会显示“中”。在老师的帮助下,查出了这个问题。通过这个问题,我觉得是我编程的时候,不规范操作造成的。这提醒我,下次编程的时候,应该在定义个变量的同时将其赋值。参考文献1 张靖武,周灵杉.单片机系统的PROTEUS设计与仿真M.北京:电子工业出版社,20072 张红,邹华. 单片机原理及应用 机械工业出版社 2012.073 王悦凯 51单片机系统入门.扩展.应

9、用开发学习手册 中国铁道出版社 20134 彭伟 单片机C语言程序设计实训100例 电子工业出版社 2011附录(1)显示一个“中”程序如下:#include#include#define uchar unsinged char#define COMMONPORTSP0sbit SRCLK=P36;sbit RCLK=P35;sbit SER=P34;unsigned char code TAB8 = 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;unsigned char code CHARCODE18= 0x7C,0x48,0x48,0xFF,0x48,0

10、x48,0x7C,0x00; /“中”void Hc595SendByte(unsigned char dat)unsigned char a;SRCLK=0;RCLK=0;for(a=0;a7;dat=1;SRCLK=1;_nop_();_nop_();SRCLK=0;RCLK=1;_nop_();_nop_();RCLK=0;void delay(unsigned int time) /延迟程序; unsigned int i,j; for(i=0;itime;i+) for(j=0;j121;j+);void main() unsigned char tab;while(1) for(t

11、ab=0;tab8;tab+)Hc595SendByte(0x00); /消隐COMMONPORTS= TABtab; /输出字码 Hc595SendByte(CHARCODE0tab);delay(2);(2)按下S0显示“中”,按下S1显示“国”,按下S2滚动显示“中国”:#include#include#define uchar unsigned char#define GPIO_KEY P1#define COMMONPORTSP0unsigned char KeyValue;sbit SRCLK=P36;sbit R=P35;sbit SER=P34;uchar code TAB8

12、= 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;uchar code CHARCODE38= 0x7C,0x48,0x48,0xFF,0x48,0x48,0x7C,0x00,/中 0x00,0xff,0xd3,0xd3,0xff,0xd7,0xd3,0xff,/国 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00/点阵不亮 ;uchar ALL16=0x7C,0x48,0x48,0xFF,0x48,0x48,0x7C,0x00,0x00,0xff,0xd3,0xd3,0xff,0xd7,0xd3,0xff;/“中国”void Hc595SendByte(unsigned char dat)unsigned char a;SRCLK=0;R=0; for(a=0;a7;dat=1;SRCLK=1;_nop_();_nop_();SRCLK=0;R=1;_nop_();_nop_();RCLK=0;void delay(unsigned int time) /延迟程序; unsigned int i,j; for(i=0;itime;i+) for(j=0;j50;j+);void KeyDown(void) char a=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)/读取按键是否按下de

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号