键盘、数码管及串口间的通信实验报告.doc_第1页
键盘、数码管及串口间的通信实验报告.doc_第2页
键盘、数码管及串口间的通信实验报告.doc_第3页
键盘、数码管及串口间的通信实验报告.doc_第4页
键盘、数码管及串口间的通信实验报告.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科实验报告填写说明1学员完成人才培养方案和课程标准要所要求的每个实验后,均须提交实验报告。2实验报告封面必须打印,报告内容可以手写或打印。3实验报告内容编排及打印应符合以下要求:(1)采用A4(21cm29.7cm)白色复印纸,单面黑字打印。上下左右各侧的页边距均为3cm;缺省文档网格:字号为小4号,中文为宋体,英文和阿拉伯数字为Times New Roman,每页30行,每行36字;页脚距边界为2.5cm,页码置于页脚、居中,采用小5号阿拉伯数字从1开始连续编排,封面不编页码。(2)报告正文最多可设四级标题,字体均为黑体,第一级标题字号为4号,其余各级标题为小4号;标题序号第一级用“一、”、“二、”,第二级用“(一)”、“(二)” ,第三级用“1.”、“2.” ,第四级用“(1)”、“(2)” ,分别按序连续编排。(3)正文插图、表格中的文字字号均为5号。一、实验目的和要求1、熟悉定时器、键盘、数码管及串口的工作原理;2、熟悉查询或者中断的概念和工作原理;3、能够用汇编语言/C语言编写相关程序。二、实验内容和原理(一)实验内容为: 1键盘输入+串口发送实验,串口发送内容为键盘输入键值,键值自行定义; 2串口接收+数码管显示实验,把串口接收的内容通过数码管显示出来。 (二)依据的原理:1. 根据实验箱的硬件环境,单片机选为NXP公司的P89V51RD2(与80C51兼容),时钟频率为6.144MHz,串口处于工作方式1,波特率为2400bps。2. 按照要求编写相应程序,采用Keil C51进行编译,首先在集成开发环境上进行仿真,确保程序正确,然后下载到实验箱上进行检查。3. 单片机和微机都带有符合RC232C的串口,利用实验箱上的键盘、数码管和串口进行通信实验,进一步熟悉单片机的硬件、程序设计以及单片机系统开发流程。三、实验项目(一) 实验项目:键盘、数码管及串口间的通信(二) 实验原理:1 初始化:启动定时器0(用于更新数码管的显示与键盘扫描)、定时器1(用于串口与实验箱通信),串口初始化,置各种值为0,中断置1,开中断2 键盘 数码管:当键盘按下后,与键盘相连的P0口发生变化,当检测到这种变化时,将行、列的变化值用x,y记录下来,经过转换,可以得到键盘上的数字值,再通过与数码管相连的P1、P2口显示到数码管上,这里,用P2控制位选,P1控制字形3 键盘 PC机:自初始化置TI为1后,出发串口中断循环执行,当发生按键时,不仅会在数码管上显示出来,而且会将send_ptr(发送标志位)设为1,此时,会将键值变换成ASCII码后送给串口的SBUF,然后即可在串口调试助手的窗口中显示出来4 PC机 数码管:在串口调试助手的输入窗口中输入一串十六进制数字,串口串行地将数字送给SBUF,SBUF通过P1和P2口显示到数码管上四、实验器材(一) 清华科教TMC-2实验箱、USB转串口电缆;(二) 华硕 F80c PC机及Win 7操作系统、Keil C51集成开发环境、FlashMagic、串口调试助手。五、操作方法与实验步骤写出实验操作的总体思路、操作规范和主要注意事项;按顺序记录实验中每一个环节和实验现象。画出必要的实验装置结构示意图,并配以相应文字说明;(一) 总体思路:已在“实验项目”中说明;(二) 操作规范和主要注意事项:我认为有这么几点,一是芯片一定要放对位置;二是要分清阴极和阳极;三是线要接对;四是要正确配置好各种参数;五是要走正确的步骤。(三) 实验环节及现象:1.编写键盘、数码管及串口通信程序,代码在文档的后面章节中;2.采用Keil C51集成开发环境进行编译、仿真,生成hex文件;3.准备实验箱运行环境,将实验箱连接到PC机上,调试参数;4.将hex文件下载到实验箱上,复位后,可以开始在键盘或PC机上操作。六、实验数据七、实验结果与分析发送123456877后,数码管上出现456877六个数字,这说明串口是串行地将数字发送过去,并且会一位位向左移动,最后只留下6位数字。八、问题与建议这次实验感觉比较难,要理解各种操作的原理、细节,而且实验箱不同,做出来的效果不同,然后我觉得要多向教员、小教员或者同学请教,通过交流,能更深地理解原理之类的。我认为老师应该多给些辅助性的文档,让我们个人能钻研地更深。九、源程序#includeunsigned char rec_buff; /接收缓存unsigned char key_ptr; /按键状态标识unsigned char x,y; /键盘扫描横纵坐标值unsigned char key; /识别的键值unsigned char send_ptr; /发送标识unsigned char code key_to_char=0123456789ABCDEF; unsigned char code LedTable = 0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F,0X6F,0xF7,0xFF,0xB9,0xB F,0xF9,0xF1; /0-9,a-f 的字型码unsigned char A; /键盘比较临时变量unsigned char LED_buff6; /LED 缓存内容unsigned char LED_ptr; /LED 更新时指针位置int i;void Timer_Init(void);/定时器初始化void Uart_Init(void); /串口初始化 void init_main(void);/主函数初始化void push_LED(unsigned char a); /数码管内容向左更新unsigned char convert(unsigned char a); /返回扫描线横向纵向的位权unsigned char LED_loc_convert(unsigned char loc);/数码管位选输入转换unsigned char char_to_LED(unsigned char b);/接收的ASCII字符转换void key_scan(void);/定时器0中断处理void Uart_ISR(void); /串口中断处理void Timer_Init(void)/定时器初始化/定时器0TL0=0x00;/定时10msTH0=0xFC;ET0 = 1;/开T0中断TR0=1; /启动T0定时/定时器1 */TL1 = 0xF3;/ 波特率为2400bpsTH1 = 0xF3;ET1= 0;/ 关闭T1中断TR1= 1;/ 启动T1定时TMOD = 0x21;/T0处于方式1, T1处于方式2-8位自动重装void Uart_Init(void) /串口初始化PCON = 0x80;/ 波特率加倍SCON = 0x50;/ 方式1,波特率可编程T1,允许接收ES= 1;/ 使能串口中断void init_main(void)/主函数初始化x=0;y=0; /键盘扫描的横纵坐标值key=0; /识别的键值key_ptr=0; /按键状态标识send_ptr=0; /发送标识LED_ptr=0x01; /LED更新时指针位置EA=1;/全局中断开;TI=1;void push_LED(unsigned char a) /数码管内容向左更新for(i=5;i0;i-)LED_buffi=LED_buffi-1;LED_buff0=a;unsigned char convert(unsigned char a) / 返回扫描线横向纵向的位权switch(a)case 0x0E:return 0x00;case 0x0D:return 0x04;case 0x0B:return 0x08;case 0x07:return 0x0C;case 0xE0:return 0x00;case 0xD0:return 0x01;case 0xB0:return 0x02;case 0x70:return 0x03;return 0x00;unsigned char LED_loc_convert(unsigned char loc) /数码管位选输入转换switch(loc)case 0x00:return 0x01;case 0x01:return 0x02;case 0x02:return 0x04;case 0x03:return 0x08;case 0x04:return 0x10;case 0x05:return 0x20;default:return 0x00;unsigned char char_to_LED(unsigned char b)/接收的ASCII字符转换if(b=0x30&b=0x41&b=0x46)return b-0x37;return 0;void key_scan(void) interrupt 1/定时器0中断处理TL0=0x00;/定时10msTH0=0xFC;if(LED_ptr=0x05)LED_ptr=0x00;else LED_ptr+;P2=LED_loc_convert(LED_ptr); /由LED_ptr获得位选P1=LED_buffLED_ptr;/从数码管BUFF得到显示内容/printf(timer0n);switch(key_ptr)/键盘扫描状态机case 0x03:P0=0x0F;A=(P0&0x0F);if(A=0x0F)key_ptr=0x00;else key_ptr=0x02;break;case 0x02:P0=0x0F;A=(P0&0x0F);if(A=0x0F)key_ptr=0x03;break;case 0x01 : P0=0x0F;A=(P0&0x0F);if(A!=0x0F)/这就是有键盘按下,检测到有某列发生变化 x=A;/得到列的数值, P0=0xF0; A=(P0&0xF0); y=A;/得到行的数值 key=convert(x)+convert(y); /得到键值 send_ptr=0x01;/发送标识设为1 push_LED(LedTablekey);/数码管内容向左更新,然后最右边那位设为a,放到缓存中 key_ptr=0x02;else key_ptr=0x00;break;case 0x00:P0=0x0F;A=(P0&0x0F);if(A!=0x0F)key_ptr=0x01;break;default :key_ptr=0x00;void Uart_ISR(void) interrupt 4/串口中断处理if(RI)/ 接收中断RI = 0;/ 清除接收中断标志rec_buff=SBUF; /这里拿到的是ASCII码pus

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论