点阵课程设计报告材料.doc

上传人:李司机 文档编号:1089111 上传时间:2022-06-21 格式:DOC 页数:21 大小:1.75MB
返回 下载 相关 举报
点阵课程设计报告材料.doc_第1页
第1页 / 共21页
点阵课程设计报告材料.doc_第2页
第2页 / 共21页
点阵课程设计报告材料.doc_第3页
第3页 / 共21页
点阵课程设计报告材料.doc_第4页
第4页 / 共21页
点阵课程设计报告材料.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《点阵课程设计报告材料.doc》由会员分享,可在线阅读,更多相关《点阵课程设计报告材料.doc(21页珍藏版)》请在三一办公上搜索。

1、word目录目录1一方案论证与设计21.1 设计要求21.2 要求分析21.3 方案说明5二点阵硬件设计5三点阵软件设计6四. 实验结果与分析6五总结与体会8参考文献9附录9一方案论证与设计1.1 设计要求一、使用AT89S51设计一个点阵显示控制系统。二、根本要求难度系数0.7:1在点阵上显示固定的汉字“中;2同过按键切换显示汉字“中、“国;3在点阵上滚动显示汉字“中国。三、发挥局部:1增加通过串口设置点阵显示内容的功能1.2 要求分析一、点阵说明:88单色点阵共需要64个发光二极管组成,且每个二极管是放置在行线与列线的交叉点上如图1。比如:如果要想实现第一发光二极管亮,那么只要将DC8引脚

2、置高电平,DR1引脚置低电平。这样便可以实现第一个二极管亮。如果要实现第一行亮,DC=0x80;DR=0xfe。按照这样的思路就可以让点阵上的任一个二极管亮。本课程设计中,行是由74HC595控制列是由P0口控制的。所以我们下面介绍一下74HC595的用法,与其芯片的原理。图1二、74HC595简介:74HC595的输出端为D0D7,这8位并行输出端可以直接控制数码管的8个管段,D7为级联输出端,它用来连接下一片595的串行数据输入端DS,下面给出74HC595控制引脚的详细说明。SRCLK11脚用于输入移位时钟脉冲,在上升沿时移位存放器shift register数据移位,D0D1 D2D3

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

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

5、行有按键按下,这样就能够确定是哪一个按键按下了。1.3 方案说明二点阵硬件设计三点阵软件设计开始按下按键得到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

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

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

8、就可以了。4FPGA电路板上电后立刻出现“中字 因为在刚开始定义ValueKey的时候,没有对其赋值。因为在Keil中, 如果定义某个变量,如果不对其进展赋值,keil会默认它为0;所以进入我的住函数的时候,在我没有按下按键之前ValueKey已经得到一个值了,它马上会显示“中。在教师的帮助下,查出了这个问题。通过这个问题,我觉得是我编程的时候,不规X操作造成的。这提醒我,下次编程的时候,应该在定义个变量的同时将其赋值。参考文献1 X靖武,周灵杉.单片机系统的PROTEUS设计与仿真M.:电子工业,20072 3 王悦凯 51单片机系统入门.扩展.应用开发学习手册 中国铁道 20134 彭伟

9、单片机C语言程序设计实训100例 电子工业 2011附录1显示一个“中程序如下:#include#include#define uchar unsinged char#define MONPORTSP0sbit 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,0x48,0x7C,0x00; /“中void Hc595SendBy

10、te(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(tab=0;tab8;tab+)Hc595SendByte(0x00);

11、/消隐MONPORTS= TABtab; /输出字码 Hc595SendByte(CHARCODE0tab);delay(2);2按下S0显示“中,按下S1显示“国,按下S2滚动显示“中国:#include#include#define uchar unsigned char#define GPIO_KEY P1#define MONPORTSP0unsigned char KeyValue;sbit SRCLK=P36;sbit R=P35;sbit SER=P34;uchar code TAB8 = 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;uchar

12、 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;S

13、RCLK=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)/读取按键是否按下delay(99);/延时10ms进展消抖if(GPIO_KEY!=0x0f)/再次检测键盘是否按下GPIO

14、_KEY=0X0F;/测试列switch(GPIO_KEY)case(0X07):KeyValue=0;break;case(0X0b):KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e):KeyValue=3;break;GPIO_KEY=0XF0;switch(GPIO_KEY)case(0X70):KeyValue=KeyValue;break; case(0Xb0):KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+8;break;case(0Xe0):KeyVa

15、lue=KeyValue+12;break;while(a50)&(GPIO_KEY!=0xf0) /检测按键松手检测delay(99);a+;void display(unsigned int d) unsigned char tab;for(tab=0;tab8;tab+)Hc595SendByte(0x00); /消隐MONPORTS= TABtab; /输出字码 Hc595SendByte(CHARCODEdtab);delay(1);void main() display(2); KeyValue=0xff; while(1) KeyDown(); if(KeyValue=0) di

16、splay(0); if(KeyValue=1) display(1);if(KeyValue=2) int num,temp,tab; temp=ALL0;for(num=0;num15;num+) ALLnum=ALLnum+1; ALL15=temp; for(num=0;num15;num+) for(tab=0;tab8;tab+)Hc595SendByte(0x00); /消隐MONPORTS= TABtab; /输出字码 Hc595SendByte(ALLtab);delay(2); elsedisplay(2); (3)串口实验:计算机向单片机发送数据,单片机接收到数据点阵就现

17、实“中#include#include#define uchar unsigned char#define GPIO_KEY P1#define MONPORTSP0sbit SRCLK=P36;sbit R=P35;sbit SER=P34;uchar receiveData=0xff,flag;uchar code TAB8 = 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;ucharcodeCHARCODE18= 0x7C,0x48,0x48,0xFF,0x48,0x48,0x7C,0x00;void init() /程序初始化;SCON=0X50;/设

18、置为工作方式1TMOD=0X20;/设置计数器工作方式2PCON=0X80;/波特率加倍TH1=0XF3;/计数器初始值设置,波特率是4800TL1=0XF3;ES=1;/打开接收中断EA=1;/打开总中断TR1=1;/打开计数器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) /延迟程序; unsign

19、ed int i,j; for(i=0;itime;i+) for(j=0;j50;j+);void display(unsigned int d) unsigned char tab;for(tab=0;tab8;tab+)Hc595SendByte(0x00); /消隐MONPORTS= TABtab; /输出字码 Hc595SendByte(CHARCODEdtab);delay(2); void main() init(); while(1)if(flag=1)display(0); void Usart() interrupt 4receiveData=SBUF;/出去接收到的数据RI=0;/去除接收中断标志位SBUF=receiveData;/将接收到的数据放入到发送存放器while(!TI);/等待发送数据完成 flag=1; / 标志位TI=0; /去除发送完成标志位课程设计独创性声明: 学生签名:指导教师评语:课程设计成绩: 指导教师签名:20 / 21

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号