ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:604.33KB ,
资源ID:12731556      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12731556.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(李佛垚51单片机实验报告.docx)为本站会员(b****0)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

李佛垚51单片机实验报告.docx

1、李佛垚51单片机实验报告 实验报告 实验名称: 矩阵键盘控制点阵的显示 专业班级: 控制科学与工程 学号:s20100394 学生姓名: 李佛垚 指导教师:李晓林、李丽宏、牛昱光 2013年 1月18日目 录一、实验目的 1二、实验内容 1(一)扫描矩阵键盘读出键值。 1(二)数码管显示键号。 1(三)点阵显示不同按键需要输出的信息。(根据需要可以修改)。 1三、实验设备及配套软件 1四、实验原理 2五、实验电路及功能说明 2(一)STC89C52RC单片机主要性能 2(二) 矩阵键盘 41.连接线路图 42.矩阵键盘说明: 4(三) 点阵 51.连接线路图 52.8x8点阵LED等效电路连接

2、图: 53.显示原理说明: 6(四) 数码管 61数码管连接线路图 62.动态显示原理 6(五)XT100最小系统原理图 7(六)实验结果分析 81.实物图 82.结果分析 8六、软件设计流程图 8(一)程序说明 8(二)流程图 91.主程序流程图 92.键盘扫描程序流程图 10(三)程序 11七、实验中的问题与心得 16一、实验目的一般任何一个适用的系统都少不了键盘和显示这两个部分,键盘为使用者设定功能提供操作平台;显示反映出使用者设定功能的状态。在传统的设计中,一般都是把键盘模块和显示模块分开设计,这样结构清晰,软件设计简单,当I/O口不够用时,通常通过扩展I/O的方法来解决问题。以上做法

3、有优点但同时也暴露了一个问题,它们都需要通过增加芯片来扩展I/O口。当硬件成本要求苛刻的情况下,这种设计理念就很难适应其要求,而本设计采用显示模块和键盘模块共用端口的方法,分时显示和按键扫描,很好的解决了这一矛盾。二、实验内容利用XT100开发板中的STC89C52单片机的P0口和P2口的分时复用以及单片机执行速度快和人的视觉反应有限的原理,通过对同一I/O端口分时作为键盘电路的输入端口和数码管以及点阵显示电路的输出及控制端口来实现I/O端口的公用。由于XT100开发板已经固化,P0口作为数码管的数据输出口同时还是点阵的数据输出口,P2口作为矩阵键盘和点阵的控制端口,在不用扩展I/O口和增加成

4、本的基础上解决I/O不够用的问题。实验具体内容:(一)扫描矩阵键盘读出键值。(二)数码管显示键号。(三)点阵显示不同按键需要输出的信息。(根据需要可以修改)。三、实验设备及配套软件XT100学习开发板,Keil uVision软件,Microsoft Visual C+,STC_ISP_V483四、实验原理我们知道微控制器的运行速度快,人的视觉灵敏度有限,同时显示器件(主要是发光二极管,数码管)具有余光效应,所以我们可以充分利用以上特点,合理分配显示和键盘扫描的时间,就可以实现显示模块和键盘模块共用端口以及不同显示共用端口的功能。在本实验中利用模拟的方式,通过不同的按键来显示不同的信息,达到实

5、验的目的。硬件原理框图如图1所示五、实验电路及功能说明(一)STC89C52RC单片机主要性能1. 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.2. 工作电压:5.5V3.3V(5V单片机)/3.8V2.0V(3V单片机)3. 工作频率范围:040MHz,相当于普通8051的080MHz,实际工作频率可达48MHz4. 用户应用程序空间为8K字节5. 片上集成512字节RAM6. 通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉

6、电阻。7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片8. 具有EEPROM功能9. 具有看门狗功能10. 共3个16位定时器/计数器。即定时器T0、T1、T211. 外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒12. 通用异步串行口(UART),还可用定时器软件实现多个UART13. 工作温度范围:-40+85(工业级)/075(商业级)14. PDIP封装15. STC89C52RC引脚图(二) 矩阵键盘1.连接线路

7、图2.矩阵键盘说明:键盘是人机对话不可缺少的组件之一,在按键比较少时,我们可以一个单片机I/O口接一个按键,但当按键需要很多,I/O资源又比较紧张时,使用矩阵式键盘无疑是最好的选择。其原理是初使化时我们先让P2口的低四位输出低电平,高四位输出高电平,即让P2口输出0xF0。扫描键盘的时候,我们读P2口,看P2是 否还为0xF0,如果仍为0xF0,则表示没有按键按下;如果不0xF0,读P2口,说明有按键按下了,我们就可以读键码来识别到底是哪一个键按下了,识别的过程是这样的,初使化时我们让P2口的低四位输出低电平,高四位输出高电平,确认了真的有按键按下时,我们首先读P2口的高四位,然后P2口输出

8、0x0F,即让P2口的低四位输出高电平,高四位输出低电平,然后读P2口的低四位,最后我们把高四位读到的值与低四位读到的值做或运算就得到了该按键的键值。就可以知道是哪个键按下了。(三) 点阵1.连接线路图2.8x8点阵LED等效电路连接图:3.显示原理说明: 点阵LED扫描法介绍点阵LED一般采用扫描式显示,实际运用分为三种方式:(1)点扫描; (2)行扫描;(3)列扫描。若使用第一种方式,其扫描频率必须大于1664=1024Hz,周期小于1ms即可。若使用第二和第三种方式,则频率必须大于168=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外一次驱动一列或一行(8颗LED)时需外加驱动

9、电路提高电流,否则LED亮度会不足。在本实验的点阵是8x8共阳极,所采用的是列扫描方法。所有行的数据由P0口输出,每一列由P2口动态扫描,并且有1K的排阻所接的驱动电路。(四) 数码管1数码管连接线路图 2.动态显示原理数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp 的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示

10、的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且功耗更低。(五)XT100最小系统原理图(六)实验结果分析 1.实物图 2.结果分析 矩阵键盘的扫描过程中没有延时确认按键,因为具体实物中按键的动作是比较慢的,不会出现有“假按”的现

11、象,另一方面是由于整个程序是顺序执行的,要求整个程序要快速的顺序执行,如果太多延时会影响程序的实时性。在点阵的显示中,会出现“阴影”这是由于扫描时需等待P0口完成数据的输出,经过适当延时可以得到很好的解决。六、软件设计流程图(一)程序说明在键盘扫描的过程中需要用到P2口,因此为了在点阵显示中不影响到点阵,必须在键盘扫描完后的时间内初始化,同理,在数码管显示中用到了P0口作为数据输出口,因此在程序中也要对P0口初始化,这样在点阵的显示中需要用到P0与P2口才不受影响,同时在点阵和数码管的动态扫描过程中要合理划分好时间,以免影响到各自显示的亮度和清晰度。(二)流程图1.主程序流程图2.键盘扫描程序

12、流程图(三)程序#include /包含头文件 unsigned char code face18=0x0,0x80,0x80,0xFF,0x88,0x88,0x80,0x0; unsigned char code face28=0x0,0x2,0x2,0xFE,0xA,0x12,0x22,0x0;unsigned char code face38=0x40,0x24,0x54,0x5C,0x77,0x54,0x44,0x0;unsigned char code face48=0x40,0x24,0x14,0x7C,0x57,0x74,0x4,0x0;unsigned char code fa

13、ce58=0x0,0x8,0xC,0xFA,0x81,0xFA,0xC,0x8;unsigned char code face68=0x10,0x30,0x5F,0x81,0x5F,0x30,0x10,0x0;unsigned char code face78=0x8,0x14,0x22,0x77,0x14,0x14,0xF4,0xFC;unsigned char code face88=0xFC,0xF4,0x14,0x14,0x77,0x22,0x14,0x8;unsigned char code face98=0x9,0xE,0xFE,0x89,0xFA,0x2C,0x48,0x80;u

14、nsigned char code face108=0x12,0x34,0x5F,0x91,0x7F,0x70,0x90,0x0;unsigned char code face118=0x88,0x54,0x22,0x77,0x1C,0xF4,0xFE,0x1;unsigned char code face128=0x1,0xFE,0xF4,0x1C,0x77,0x22,0x54,0x88;unsigned char code face138=0x42,0xE7,0x42,0x18,0x18,0x42,0xE7,0x42;unsigned char code face148=0x24,0x24

15、,0xE7,0x0,0x0,0xE7,0x24,0x24;unsigned char code face158=0x50,0x50,0x48,0x44,0x42,0x59,0x54,0x52;unsigned char code face168=0x1,0x2,0xFF,0xF9,0x19,0x29,0x46,0x80;unsigned char code table16= 0xee,0xde,0xbe,0x7e, 0xed,0xdd,0xbd,0x7d, 0xeb,0xdb,0xbb,0x7b, 0xe7,0xd7,0xb7,0x77; /键值unsigned char code a16=0

16、xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; /共阳极数码管的段码0 1 2 3 4 5 6 7 8 9 A B C D E Funsigned char b3,b4;unsigned char Key;unsigned char KeyH; /检测到键值高4位unsigned char KeyL; /检测到键值低4位sbit LED_0=P10; /以下定义P1各口为控制口sbit LED_1=P11;sbit LED_2=P12;sbit LED_3=P13;#define

17、KL_0 P2&=0xf0 /P2低4位为0指令#define KL_F P2|=0x0f /P2低4位为1指令#define KH_0 P2&=0x0f /P2高4位为0指令#define KH_F P2|=0xf0 /P2高4位为1指令void delay1(unsigned int x) /延时 unsigned int i; /x为延时长度,可以设置 for(i=0;ix;i+) void delay() /延时函数 unsigned int c; c=300; while(c-)void SJ(void) unsigned char t; P2=0xff; /p2口初始化 KL_0;

18、 /P2低4位设置为低电平 t=P2&0xf0; /取P2的高4位 if(t!=0xf0) /如果高4位不全为1(有键按下) KeyH=t&0xf0; /把高4位的键码保存到KeyH 得到的是第几列有键按下 P2=0xff; /恢复P2 P2&=0x0f; /设置P2高4位为0 t=P2&0x0f; /读P2低4位状态 if(t!=0x0f) /如果低4位不全为1(有键按下) KeyL=t; /把低4位的键码保存到KeyL 得到的是第几行有键按下 Key=KeyH|KeyL; /组合KeyH和KeyL成为键值Key P2=0Xff; /防止影响到点阵的显示因为扫键的时候用了P2口第四位void

19、 JH(unsigned char H) /计算键值 unsigned char i; unsigned char d3, d4; /键值翻译为可显示的数码管数字序号 unsigned char res=0; /在键值表中查到的序号 for(i=0;i16;i+) /在表中查找Key所在的序号位置,并返回位置 if(tablei=H) res=i; d3=res/10; /分离序号方便数码管显示 d4=res%10; b3=d3; b4=d4;void display(unsigned char d3,unsigned char d4)/显示键号给数码管 P0=a5; /选中第二位,发送第二位

20、段码 LED_1=0; delay1(50); LED_1=1; P0=ad3; /选中第三位,发送第三位段码 LED_2=0; delay1(50); LED_2=1; P0=ad4; /选中第四位,发送第四位段码 LED_3=0; delay1(50); LED_3=1; P0=0x00; /以免影响到点阵,因为P0口有数据输出void DZ(unsigned char AJ) /去除影响点阵选择性输出 unsigned char i; for(i=0;i8;i+) /点阵8列动态扫描法显示,每次扫描一列并发送数据码 if(AJ=table0) P0=face1i; if(AJ=table

21、1) P0=face2i; if(AJ=table2) P0=face3i; if(AJ=table3) P0=face4i; if(AJ=table4) P0=face5i; if(AJ=table5) P0=face6i; if(AJ=table6) P0=face7i; if(AJ=table7) P0=face8i; if(AJ=table8) P0=face9i; if(AJ=table9) P0=face10i; if(AJ=table10) P0=face11i; if(AJ=table11) P0=face12i; if(AJ=table12) P0=face13i; if(A

22、J=table13) P0=face14i; if(AJ=table14) P0=face15i; if(AJ=table15) P0=face16i; P2=(1i); /扫描该列 delay(); /必要的等待不然扫描太快有阴影 void main(void) /主函数 /t为判断键码的临时变量 while(1) SJ(); JH(Key); display(b3,b4); /给数码管显示,第二位为5,5和S比较类似,这里理解为S; DZ(Key); 七、实验中的问题与心得这次实验主要还是在软件编程中出现了一些问题,尤其是要想找出一个解决I/O口不够用又不想扩展I/O口,完全依靠软件解决,就得不断地调试和修改程序。在调试中不断地下载到实验板中观察找出问题再修改,再下载,需要非常多的耐心,尤其是在时间分配上尤其显得重要。下一步的想法是在允许的情况下利用XT100开发板在不扩展I/O口的情况下,如何把矩阵键盘实现控制蜂鸣器。通过本次学习实验,获得了实验室同学的帮助,也从他们身上学到了很多知识,在老师同学的指导下,我查阅了许多相关资料,综合运用了大学中所学相关知识,通过自学、请教老师、请教同学、耐心思考、上网查询等方式,终于解决了一个又一个难题,完成本次设计,此过程中,我受到了很大的启发。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1