您好,欢迎访问三七文档
中南民族大学计算机科学学院单片机课程设计报告课程单片机课程设计设计题目品串行数据接收器年级专业自动化12级学号2012215015学生姓名肖雄峰指导教师吴桂华、田微2014年12月20日1课程设计量化评分标准指指指导导导老老老师师师评评评语语语:::指标最高分评分要素评分方案设计35方案选择合理,分析、设计正确,原理清楚,电路、程序流程图清晰,结构合理,程序简洁、正确。调试15过程清晰,调试方案设计合理,测试点选择适当,程序编写正确,调试步骤清楚。结果20电路及程序运行结果正确,达到预期效果。设计报告20报告结构严谨,逻辑严密,论述层次清晰,语言流畅,表达准确,重点突出,报告完全符合规范化要求,用计算机打印成文。工作态度10工作态度认真,按时完成设计任务,是否独立完成。总评成绩2设计题目:串行数据接收器2(接收的数据送数码显示)一、要求:使用矩阵键盘输入数据,通过串行口传递到数码管显示出来。要求能显示数字0到9,以及字母A-F。二、分析实验箱上提供了一个4行4列的矩阵键盘,8155的PA0~PA3连接矩阵键盘的4列,8155的PC0~PC3连接矩阵键盘的4行。该矩阵键盘的工作原理如下:依次输入列驱动扫描码,每次使某一列为低电平,而其他列为高电平;读取行输入码,若该行有按键按下则对应的行输入是低电平,若无按键按下则输入是高电平,这样可以将按键的位置找出,得到唯一与之对应的按键编码,如图所示。例如第2行、第3列按键的按键编码是这么得来的,当输出列驱动码PA=00001011B时,若无按键按下,则得到行输入PC=00001101B,取驱动码的低四位为按键编码的低4位,取行输入的低四位为按键编码的高4位,最终得到按键编码为11011011B(0dbH)。PC0PC1PC2PC3PA0PA1PA2PA30xee0xed0xeb0xe70xde0xdd0xdb0xd70xbe0xbd0xbb0xb70x7e0x7d0x7b0x773实验箱上8155扩展了8位7段LED显示器,可编程采用动态方式驱动显示,即一位LED显示器显示一小段时间,然后是下一位LED显示器一小段时间……,如此类推,周而复始。只要刷新频率不小于50Hz,得用人眼的视觉误差,就可以获得清晰稳定的显示效果。7段LED显示器显示一小段由8155的B口驱动,各段的驱动位如表,段引脚为低电平则对应段发光,高电平则对应段熄灭,依照该方法,可得到常用字符的字形码表。8个LED的选择位由8255的A口驱动,高电平则选中对应LED,低电平则对应LED熄灭,依照该方法,可得到每个7段LED工作时分别对应的位选码表。LED各段与8155PB口各位的对应关系LED的段hgfedcba8155PB的位D7D6D5D4D3D2D1D0显示字的字形码表显示字字形码显示字字形码00xc080x8010xf990x9020xa4A0x8830xb0B0x8340x99C0xc650x92D0xa160x82E0x8670xf8F0x8e三、设计1、硬件设计(包括设计方案及说明、完整的硬件连接图等)用跳帽将串行口的P1.0与P1.1连接,42、软件编程(包括流程图、完整的汇编源程序及其注释)#includeabsacc.h#includereg52.h#includeintrins.h#defineCOM8155XBYTE[0x1000]#definePA8155XBYTE[0x1001]#definePB8155XBYTE[0x1002]#definePC8155XBYTE[0x1003]codeunsignedcharled_font[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,8155初始化调用LED显示程序键盘扫描程序判断有无按键按下修改有LED显示内容50x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};codeunsignedcharkey_code[]={0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};unsignedcharled_data[8]={16,16,16,16,16,16,16,16};voidled_display(unsignedchar*m);voiddelay_ms(unsignedcharn);unsignedcharkey_read(void);voidmain(void){unsignedchari,key_now,key_last;delay_ms(100);delay_ms(100);delay_ms(100);delay_ms(100);delay_ms(100);COM8155=0x03;key_last=0xff;while(1){led_display(led_data);//key_now=key_read();PCON=0x00;SCON=0x50;TMOD=0x20;TH1=0xF4;TL1=0xF4;TR1=1;SBUF=key_read();RI=0;key_now=SBUF;if((key_now!=0xff)&(key_now!=key_last)){for(i=7;i0;i--){6led_data[i]=led_data[i-1];}led_data[0]=key_now;}key_last=key_now;}}voidled_display(unsignedchar*m){unsignedchari;unsignedcharled_bit[8]={0x10,0x20,0x40,0x80,0x01,0x02,0x04,0x08};for(i=0;i8;i++){PB8155=led_font[m[i]];PA8155=led_bit[i];delay_ms(1);PA8155=0;}}voiddelay_ms(unsignedcharn){unsignedchari;while(n--){for(i=0;i125;i++);}}unsignedcharkey_read(void){unsignedchari,scandata;unsignedcharkey_current,col_out,row_in;scandata=0x01;PA8155=0x0f;delay_ms(5);if((PC8155&0x0f)==0x00){return0xff;}7for(i=0;i4;i++){PA8155=scandata;col_out=0x0f&scandata;if((PC8155&0x0f)!=0x00){row_in=(PC8155&0x0f)4;key_current=row_in+col_out;}scandata=_crol_(scandata,1);}for(i=0;i16;i++){if(key_current==key_code[i]){returni;}}return0xff;}3、调试说明将程序正确输入单片机后,用跳线连接串行口的P1.0和P1.1。然后依次按键盘矩阵,8位数码管会从最左边开始依次显示0-9及A-F。则调试成功。4、设计结果及错误分析刚开始我将程序输入机箱后,发现8位数码管一个都不亮。按键盘数码管也没有反应,我就意识到自己的程序有问题,经检查程序将一些有问题规范下后发现结果仍一样。经过询问老师,我才恍然大悟,我并没有将串行口连接起来,以致键盘的数据无法传送到数码管,经过改正,达到了需要的效果。8三、总结通过对《微机原理》,《单片机原理及接口技术》以及单片机的学习,我了解并掌握计算机的简单工作原理,以及汇编语言的编制过程,并且能够综合运用所学到的基本理论进行简单的软硬件实验。在实验期间,虽然时间很短,任务也不艰巨,但是还是遇到了这样,那样不可预期的困难与阻碍。理论知识基础不牢靠,动手能薄弱都给实验带来或大或小的失误与失败,拖累了实验进度。在原有的试验基础上,仅仅将输出显示更改为二极管显示。硬件方面不存在大的问题,关键是改变程序。在老师耐心精辟的指导下,在一次次认真仔细的排查和严密谨慎的测试后,还是很圆满地完成了此次实验的一切内容
本文标题:品串行数据接收器
链接地址:https://www.777doc.com/doc-2581500 .html