




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学华夏学院单片机原理与应用课程设计基于单片机的电子画板设计 摘 要电子画板是一个非常有趣的电子产品,在各个场合都非常实用。电子画板是采用单片机通过编写C语言程序控制的。其显示主体是一个8X8的LED点阵。控制器是51单片机。整个装置由按键控制。在键盘上有四个键方向控制一个动点(画笔)上下左右移动。当移动到某一点后如果我们要画下这一点,就按下一个“确认键”让这一点始终在画板上显示(让对应的的LED常亮)。如果某一点画错了,再通过一个“取消键”来删除上一次确定的点,让其对应的LED熄灭。当我们想要重新画,或者画完了一幅画想要再来画一幅的时候我们就可以按下一个“重画键”让系统复位到最初状态。目录前言 4第一章 电子画板系统的设计要求与设计方案 51.1 电子画板的功能与要求51.2 电子画板设计方案的确定5第二章 电子画板系统的硬件设计 62.1 电子画板的硬件介绍及硬件框图 62.2电子画板的硬件方案 82.3硬件框图8第三章 电子画板系统的软件设计 93.1 主程序流程图 93.2 键盘扫描程序设计 10第四章 电子画板系统的安装与调试114.1 硬件调试11 4.2 软件调试11第五章 设计体会与小结16 5.1 总结设计体会与心得16附录17参考文献17 前言单片机程设计是计算机学习中非常重要的一个环节,是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。电子画板是一个非常有趣的电子产品,在各个场合都非常实用。电子画板是采用单片机通过编写C语言程序控制的。其显示主体是一个8X8的LED点阵。控制器是51单片机。在键盘上有四个键方向控制一个动点(画笔)上下左右移动。当移动到某一点后,如果我们要画下这一点,就按下一个“确认键”让这一点始终在画板上显示(让对应的的LED常亮)。如果某一点画错了,再通过一个“取消键”来删除上一次确定的点,让其对应的LED熄灭。当我们想要重新画,或者画完了一幅画想要再来画一幅的时候我们就可以按下一个“重画键”让系统复位到最初状态。第一章 电子画板系统的设计要求与设计方案1.1 电子画板的功能与要求 电子画板要求在一块8X8LED点阵上可以画出各种形状的图形。同时要求可以擦除画错的点,可以全盘复位重新作画。1.2 电子画板的方案确定课题要求我们设计一块电子画板,而所谓的画板实际上是一块8X8的LED点阵,那么我们的“作画”这一动作实际上就是在LED点阵上去点亮一个个的点,通过这样一种方式来实现最终的绘画动作。画板是一个点阵,那么这就决定了我们的“画笔”只能有四个动作方向,即上、下、左、右四个方向。这四个方向的动作我们可以通过四个方向键来方便的控制。这四个方向键的作用仅仅只是为了控制“画笔”的方向,然而要让画笔最终落在“纸张”上作画,这就需要用另一个键来实现“画”这个动作。因此我们在这里用按下一个确认键的方法来实现画。在作画的过程中我们有画错的可能,所以在画错这后必须要有一个取消上一个动作的操作,我再设一个取消键来实现这一功能。以上的方案就基本上实现了一个电子画板的功能。考虑难到在每次作画完毕,需要下一次作画时,在上述功能下必须一个个点的取消,所以作为扩展功能我们在此还要设置一个全盘取消的控制键,实现“换纸”的功能。综上所诉,总体方案就是:在键盘上有四个键方向控制一个动点(画笔)上下左右移动。当移动到某一点后,如果我们要画下这一点,就按下一个“确认键”让这一点始终在画板上显示(让对应的的LED常亮)。如果某一点画错了,再通过一个“取消键”来删除上一次确定的点,让其对应的LED熄灭。当我们想要重新画,或者画完了一幅画想要再来画一幅的时候我们就可以按下一个“重画键”让系统复位到最初状态。第二 电子画板系统的硬件设计2.1 电子画板的硬件系统硬件部分主要是:控制器(单片机),键盘,8X8LED点阵。单片机我们选用的是STC89C51单片机。STC89C51单片机简介:STC89C51系列单片机是宏晶科技推出的新一代超强抗干扰/高速/低功耗的单片机,是MCS-51系列单片机的派生产品; STC89C51单片机具有增强型12时钟/机器周期、6时钟机器/周期任意选择,工作电压为5.5V-3.4V(5V单片机)/3.8V-2.0V(5V单片机);工作频率范围:0-40MHZ,相当于普通8051的0-80MHZ。实际频率可达48MHZ。用户应用程序空间为4K/8K/13K/16K/20K/32K/64K字节 ;片上集成1280字节/512字节RAM;有32/36个通用I/O口,P1/P2/P3/P4是准双向口;集成ISP(在系统可编程)/IPA(在应用可编程),无需专用的编程器/仿真器,可通过串行口(P3.0/P3.1)直接下载用户程序,built-in drive,8K程序3秒就可以完成一片,具备EEPROM功能,共有3个16位定时器/计数器,其中定时器T0还可以当成2个8位定时器使用。4KB/8KB程序存储器128/256字节数据存储器2/3个16位定时器/计数器可编程串行口振荡器及定时电路CPU内部中断外部中断穿行输入64KB总线扩展控制器控制可编程I/O口并行I/O口串行输出基准频率源脉冲计数输入 图1 51系列单片机内部结构图键盘。由于本次设计在已经连接好的开发板上进行,所以我们使用的键盘是一个4X4的矩阵键盘。如图P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7 图矩阵键盘8X8的LED点阵是由64个LED以矩阵方式连接的,由于手工绘画复杂,绘画具体的电路连接图形参考附图的开发板资料。2.2 电子画板的硬件方案由于这个系统的硬件构成比较简单,加之所驱动的LED点阵的功率很小,故不用单独外加驱动设备。在总体构成上我们在这个矩阵键盘上定义自己所需要的按键,通过这些按键向单片机发出控制指令。然后单片机通过运算处理将LED点阵上的对应点点亮,完成我们的设计要求。2.3硬件框图89C51单片机8X8点阵键 盘电 路图硬件框图第三章 电子画板系统的软件设计 3.1 主程序流程图开始点亮左上角第一个灯,将端口值分保存在数组C【】,D【】中扫描键盘,读键值灯左移D【0】循环右移灯右移D【0】循环右移灯上移C【0】循环右移灯下移C【0】循环左移确认C【】D【】送至AB取消将上次送AB的值还原将AB数组的值全部还原C【】D【】数组中的值送入AB的相应位置将AB【】【】中的值依次送至端口现实送完YN3.2 键盘扫描程序设计键盘扫描程序:unsigned char keyscan(void) int a=0; unsigned char cord_h,cord_l; P3=0xf0; cord_h=P3&0xf0; if(cord_h!=0xf0) /判断是否有键按下 for(a=0;a=2;a+) / 扫描数组AB,去抖动 for(i=0;i=64;i+) P0=ABi0; P2=ABi1; for(j=0;j50;j+); P3=0xf0; cord_h=P3&0xf0; if(cord_h!=0xf0) /再次读键盘,并返回键值 cord_h=P3&0xf0; P3=cord_h|0x0f; cord_l=P3&0x0f; return(cord_h+cord_l); 第四章 电子画板系统的安装与调试1.1 硬件调试硬件部分比较简单,但在调试过程中还是发生了而一些问题。在这个键盘中有有一些键的接触不是特别好,因此中有一些键不能正常工作。最初,我们认为是键盘的去抖动延时设置的不够合理,进过反复的修改延时的去抖动延时时间,这个现象依然不能消除,这说明问题并不在软件。然后将不能用的键舍弃,换用其他的键便解决了这个问题。1.2 软件调试软件部分的设计与调试是此次课程是设计的一个重要环节。1、在软件的设计部分,我碰到的第一个问题是,我希望当动点移动到画板的右边界时,若继续按下右移按键,动点能自动调回左边。这一过程对应以程序上的语句就是一个循环语句。但我们知道在C语言中没有循环移位的语句,为了实现这一功能我需要用现有的移位语句来实现循环移位功能。具体实现做法如下:D0=(D01)这里要实现一个八位数(51系列为八位)的循环右移,先将此数右移一位,让后再将原数左移7位,接着将两个数做“或”运算。这样我们就用移位指令实现了循环移位功能。2、主程序中我将临时点(即可以移动的点,我们可以将其成为“笔尖”)报存在一个临时数组中,而将确定的点存放在意一个64X2的大数组中。我将这个数组定义为 char AB。但是,在编译的时候,系统提示“auto segment too large”。这是因为,我们定义的数组存放在单片机的内部数据存储区内,这部分存储区只有128个字节,显然如果定义这样一个大数组在内部数据存储器是不行的。我们因该将其定义在尾部数据存储区,定义如下:xdata char AB 3、在扫描显示输出部分,有两种扫描方式。我的设计中,每按下一次确认键就会有一对数据存入AB这个二维数组中。再依次将这个数组的数据送到口,两个数据配合就会点亮一个相应的灯,如此实现画图的动作。这里有有两种方式来送数据到口显示。第一种,只扫描确认的点,即每个循环中只将那些存进数组AB的输出到IO口显示。程序段如下:for(i=0;i=M;i+) / 扫描数组AB P0=ABi0; P2=ABi1; for(j=0;j50;j+); 程序中M为存入的点的个数。第二种方法是全盘扫描。即不论数组中存放了多少对点的坐标,在每一次的扫描中都将整个数组扫描一遍。程序段如下:for(i=0;i=64;i+) / 扫描数组AB P0=ABi0; P2=ABi1; for(j=0;j0;k-); /*键盘扫描程序*/ unsigned char keyscan(void) unsigned char cord_h,cord_l; P3=0xf0;cord_h=P3&0xf0; if(cord_h!=0xf0) ys(); P3=0xf0;cord_h=P3&0xf0; if(cord_h!=0xf0) cord_h=P3&0xf0;P3=cord_h|0x0f; cord_l=P3&0x0f; return(cord_h+cord_l); 不用延时(空循环)程序,但仍然要让程序在有键按下后个一段时间再读键值,这个问题该怎么解决呢?我们可换一种思维方式。延时不一定要用空循环语句来写。我们可以利用躲避抖动的这段时间间隔内去干其他的事情啊。这样我很容易想到,既然这段时间会带来画面的闪动,即在这段时间内程序没有去扫描数组AB,那么我们就将扫描数组AB的程序段再次在子程序中走一遍。这样问题便很好的解决了。程序段如下:unsigned char keyscan(void) int a=0; unsigned char cord_h,cord_l; P3=0xf0; cord_h=P3&0xf0; if(cord_h!=0xf0) for(a=0;a=2;a+) / 扫描数组AB for(i=0;i=64;i+) P0=ABi0; P2=ABi1; for(j=0;j50;j+); P3=0xf0; cord_h=P3&0xf0; if(cord_h!=0xf0) cord_h=P3&0xf0; P3=cord_h|0x0f; cord_l=P3&0x0f; return(cord_h+cord_l); 在这个地方要注意,如果我们在主程序和子程序都用到了数组AB,那么该数组必须定义为全局变量。当然,我们这样做其实是并不妥善的。这样做会有一定的局限性。因为在去抖动的这段时间内,系统是出于失控状态的,主程序在这段时间内不能干任何事情。如果系统在这段时间内有其请求,如其他的外部中断请求,这样一来单片机内的程序时无法知道的。所以最好的解决办法是在子程序扫描到有按键按下后让程序跳出子程序,继续执行主程序,以执行主程序的这段时间来代替延时。 23第五章 设计体会与小结5.1 总结设计体会与心得为期两周的单片机课程设计告一段落。通过两周的努力,我也终于按时保质的完成了预定任务。收获非常之大。首先,通过这次单片机课程设计,我收获了信心。原来的我总是在接到一个任务之后就换衣自己是否能够把它完成,对自己完全没有信心。通过这次成功的解决一个个问题,我在自信心上有了很大的提升。其次,我收获了解决问题的办法。但我们拿到一个任务之后,我懂得了应该从哪里下手。以这次电子画板的题目为例。在接到任务后,首先我仔细研究在这次设计过程中我要用到的电子器件,51单片机,8X8LED点阵,4X4矩阵键盘。然后我分析了画板要实现的功能,接着画程序的流程图并依据流程图写出程序,最后一步一步的调试程序,解决遇到的问题,最终直至成功完成任务。第三,通过这次课程设计,我收提升了自己解决问题的能力。从点阵的点亮,键盘的扫描,去抖动,画面质量的优化等等这些问题我们原来都没有具体去解决过,知识只停留在理论方面,而这次我自己在老师的指导之下一个一个的问题都解决了。所谓一分耕耘一分收获,付出的努力换来了成果。这些成果的得来离不开其他人的帮助,在这次课程设计中得到了李波老师的精心指导,在此真心的表示感谢。还有指导老师黄竹君老师,熊薇薇师都给予了很多帮助,在次也一并说声感谢。附录一部分源程序#include int i,j; xdata char AB652=0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF, 0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF, 0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF, 0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF, 0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF, 0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF;/*键盘扫描程序*/ unsigned char keyscan(void) int a=0; unsigned char cord_h,cord_l; P3=0xf0; cord_h=P3&0xf0; if(cord_h!=0xf0) for(a=0;a=2;a+) / 扫描数组AB for(i=0;i=64;i+) P0=ABi0; P2=ABi1; for(j=0;j50;j+); P3=0xf0; cord_h=P3&0xf0; if(cord_h!=0xf0) cord_h=P3&0xf0; P3=cord_h|0x0f; cord_l=P3&0x0f; return(cord_h+cord_l); /*主程序*/void main(void) unsigned char key; unsigned char C1;/存当前动点P0口(列)值 unsigned char D1;/存当前动点P2口(行)值 int m=1,n=0; P0=0x01;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建省福州第四中学2026届高一化学第一学期期末复习检测模拟试题含解析
- 桥梁专业知识培训课件
- 2026届河北省巨鹿中学高一化学第一学期期末监测模拟试题含解析
- 2025年机关事务管理面试宝典门诊部岗位面试模拟题及解析
- 2025年徐州市中考生物试题卷(含答案及解析)
- 2025江苏高校大学《辅导员》招聘考试题库及答案
- 2025年初级摄影课程学员面试题
- 2025年度注册验船师资格考试船舶检验法律法规考前冲刺模拟题及答案(网页版)
- 2025年验船师考试(C级船舶检验专业实务)考前模拟试题及答案二
- 北京市门头沟区2024-2025学年八年级上学期第二次月考生物考试题目及答案
- 蛇咬伤急救处理流程
- 陕西省特种设备隐患排查清单(2025年)
- 货款转让协议书
- 2025年内蒙古鄂尔多斯一中高考生物倒计时模拟卷含解析
- 2025CACA子宫颈癌诊疗指南解读
- 绿色建筑概论 课件全套 第1-11章 绿色建筑概述-绿色建筑运营与维护
- 2025医务人员手卫生规范
- 医务人员行为规范
- 光伏电站安全培训
- GB/T 35267.4-2025清洗消毒器第4部分:内镜清洗消毒器
- DB45T 1056-2014 土地整治工程 第2部分:质量检验与评定规程
评论
0/150
提交评论