课程设计报告单片机PC机串行通讯设计.doc

上传人:可**** 文档编号:32571361 上传时间:2022-08-09 格式:DOC 页数:26 大小:176KB
返回 下载 相关 举报
课程设计报告单片机PC机串行通讯设计.doc_第1页
第1页 / 共26页
课程设计报告单片机PC机串行通讯设计.doc_第2页
第2页 / 共26页
点击查看更多>>
资源描述

《课程设计报告单片机PC机串行通讯设计.doc》由会员分享,可在线阅读,更多相关《课程设计报告单片机PC机串行通讯设计.doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、- .xxxxxx大学课 程 设 计 报 告课程设计名称:单片机系统综合课程设计课程设计题目:单片机与PC机串行通讯设计院系:专 业:班 级:学 号:姓 名:指导教师:完成日期:目 录第1章 总体设计方案11.1 课程设计的容和要求.11.2 课程设计原理.11.3课程设计思路.21.4 实验环境.2第2章 详细设计方案32.1 实现方法.32.2模块设计.32.2.1主函数流程图.32.2.2功能1模块.42.3程序连线图.7第3章 调试及结果分析83.1 调试步骤及方法.83.2 实验结果及分析.8参考文献9附 录A源程序10附 录B原理图13附 录C元器件清单14. word.zl.-

2、.第1章 总体设计方案1.1 课程设计的容和要求1、课程设计容:利用伟福公司的LAB6000通用微控制器仿真实验系统开发单片机与PC机串行通讯系统,实现单片机与PC机的通讯。要现数据收发功能。具要求容如下:.通过LAB6000的小键盘选择功能;.功能1:接收PC机发送的数据,并将其回发给PC机;.功能2:从LAB6000的小键盘输入数据,发送给PC机。2、课程设计要求:.认真完成课程设计任务;.通过教师现场验收;.交出完整的课程设计报告。1.2 课程设计原理根据题目要求,要完成LAB6000的小键盘选择,接收并且回发数据,小键盘可以输入并发送数据等功能,在本次设计中主要使用了MCS-51芯片以

3、及局部连线来完成串行通讯的模拟。采用MCS-51芯片实现不同模式串行通讯,通过延时程序控制串行通讯的频率。将键盘选择功能、PC机发送及接收数据功能、小键盘发送功能等通过不同的子程序实现,然后在程序中调用不同的子程序来实现不同的功能。因为需要实现小键盘输入数据,所以必须实现键盘扫描功能及按键检测功能。按键的扫描方法有扫描法和线反转法,因为小键盘按键不是非常多,所以本设计采用行列扫描法来进展小键盘扫描。1.3 课程设计思路1提出方案设计键盘扫描函数函数和按键检测函数,通过MCS-51芯片,实现键盘扫描。通过小键盘设置17个键位选择键,输入“1时在LED灯显示并选择功能1接收和发送PC机发送的数据;

4、输入“2时在LED灯显示并选择功能2从小键盘输入数据并发送给PC机。小键盘选择功能:首先设置定时器及波特率,然后再设计键盘扫描函数和按键检测函数,使之能实现小键盘选择功能。输入不同的数实现调用不同的函数,从而实现不同的功能。功能1:设计PC发送函数,此功能还需要有串行口中断处理函数。目的是实现单片机可以承受PC机发送的数据,并将其回发给PC机。设置一个返回键,如按键“1时返回小键盘选择功能,可以重新选择功能1还是功能2。功能2:设计小键盘发送程序,需调用键盘扫描函数及按键检测函数,假设有键按下,将键值发送到LED灯上,并将其转为ASCII码发送回PC机。同样设置一返回键,如按键“NEXT(右数

5、第一列,下数第一行)时返回小键盘选择功能。使函数能循环使用。2方案论证从实际应用的角度,用户可以任意选择事先设计好的2种状态,中选择完一种状态时,它可以无限的按照这种方案循环的运行下去,在此过程中,用户可以选择退出这种工作状态,从而实现对当前进展状态的控制,即可以令程序重新开场。在整个串行口输入过程中可随时做出不同的输入方式,对输入数据的工作状态进展控制。1.4 实验环境硬件环境:MCS-51实验箱,PC机。软件环境:WAVE2000应用软件. word.zl.- .第2章 详细设计方案2.1 实现方法开场运行程序时数码管初始化显示6个数字0,然后选择一种模式1和2,假设输入的数不是“1或“2

6、,只在LED灯上显示该数,等待重新输入一工作状态。此处在扫描键盘并按键检测后需将扫描到的段码发送到LED灯上。假设选择“1,即要实现功能1那么调用PC机发送函数,用串行口中断函数来保存断点防止计数器溢出。使之能实现接收PC机发送的数据后再将其回发给PC机。设置一全局变量flag,当用户输入一个数例如“1的ASCII码时flag置1使之跳出while语句死循环,从而到达返回小键盘选择功能的目的。假设选择“2,即要实现功能2需调用小键盘扫描函数和按键检测函数,将小键盘输入的数据发送到LED灯上,同时然后将该数据转换成ASCII码的形式通过串行口发送到PC机上。同小键盘选择功能一样该功能也要调用小键

7、盘扫描函数和按键检测函数。由于要实现按键返回的目的,在小键盘扫描函数中设置了“NEXT键变量kk=100时,同样利用了while语句来跳出死循环。2.2 模块设计2.2.1主函数流程图主程序用于控制个功能子程序的调用和相应的芯片及存、存放器、变量的初始化,协调整个程序的运行。由于本课设只用了8031芯片,小键盘和LED灯来显示模拟结果,而且所有的功能都是用软件实现的,所以主程序要能很好的组织程序的运行。主函数模块首先设置定时器及波特率的选择,根据标志位k1的值选择是PC模式发送数据还是小键盘模式发送数据,并根据功能选择模块中对各模式的信息的进展相应的初始设置。通过小键盘选择功能控制数据的输出方

8、式,还能承受新的键值来执行相应的功能。读取的键值要先判断是否是无效键,是无效键要执行死循环程序,按下“1或“2键才能继续显示。如果是停顿键指程序设计功能1中的“1键和功能2中的“NEXT键,应立刻清空数码管的显示存并将其重新初始化。如下页图2. 1所示。开场设置定时器工作方式及波特率大小N输入按键为1或2YN按键为1Y小键盘发送函数PC发送函数返回断点图2.1主函数模块流程图2.2.2功能1模块功能1模块利用单片机的串行口,实现PC机的串行通讯。启动功能1时开启定时器,调用串行中断函数,通过while(!flag)语句实现循环发送的功能,在串行中断子函数中先将PC机中输入的容发送到单片机上,执

9、行while(!RI)(即RI=1单片机接收完数据跳出该循环) 语句。在单片机将其容回发给PC机之前需要进展是否返回小键盘选择功能的判定,通过if(temp=49)flag=1语句,判断是否是数1的ASCII码49,假设是那么将flag置1,到达跳出该循环的目的。如图2.2所示。8031的RXD、TXD接线柱在POD51仿真板上,8086的TXD、RXD在POD8086仿真板上的8031芯片旁边。通讯双方的RXD、TXD信号本应经过电平转换后再行穿插连接,本设计中为减少连线可将电平转换略去,而将双方的RXD、TXD直接穿插连接。开场启动定时器工作并允许串口中断调用串行中断函数是否输入数据01数

10、据输入到变量temp中N接收完成YRI=0Y返回断点按键1N从temp中输出数据N发送完成YTI=0图2.2功能1模块流程图2.2.3功能2模块功能2模块实现小键盘发送数据的功能,需调用小键盘扫描函数和按键检测函数,将小键盘输入的数据发送到LED灯上。启动功能2时同功能1一样先启动定时器工作,扫描小键盘使之能够在小键盘输入数据,对输入的数据进展判定,假设为返回键(NEXT)那么跳出该函数重新进展小键盘选择功能,使之能够循环使用;假设为根本键,将扫描到的按键的键值通过查表的方式转为ASCII码,好发送回PC机中。如图2.3。开场声明变量kk和knum启动定时器1工作调用键盘扫描函数Y按键为NEX

11、TN返回断点使LEN2灯亮将键值相对应的ASCII码发送到变量knum中从temp中输出数据N发送完成YTI=0图2.3功能2模块流程图2.3 程序连线图本设计提供了一个6*4的小键盘,向列扫描地址0X002H逐列输出低电平,然后从行码地址0X001H读回。如果有键按下,那么对应行的值应为低电平;如果无键按下,由于上拉的作用,行码为高。这样就可以通过输出的列码和读取的行码来判断按下的是什么键。地址中的X是由KEY/LED CS决定,做键盘和LED相连时,需将KEY/LED CS接到相应的地址译码上,以便用相应的地址来。例如将KEY/LED CS信号接CS0上,那么列扫描地址为08002H,行码

12、地址为08001H。列扫描码还可以分时用作LED的位选通信号。如图2.4所示。图2.4键盘图. word.zl.- .第3章 调试及结果分析3.1调试步骤及方法编译并连接程序后全速运行,在数码管上显示六个LED灯都初始化为0,然后按下小键盘键中的任意一个键,假设为3F中的任意一键在LED的6个灯都显示该数,此时并没有选择执行功能1和2;假设为1那么执行功能1,即可以在PC机上输入数据并且可以回发,此时在右数第2个LED灯上始终显示1;假设为2那么执行功能2,即实现小键盘发送数据功能,此时在右数第2个LED灯上始终显示2。3.2实验结果及分析本程序满足课程设计要求,在程序运行时,一共有17个按键

13、,“1和“2键即为功能选择键,又为输入数据键,NEXT为复位键其他键为普通数据键,各个按键均能实现其所拥有的功能,程序能很好的模拟串行发送功能。功能1模式切换时,按下PC机大键盘的“1键后,返回功能选择模块,可以重新选择工作方式;同样功能2模式切换时,按下小键盘的“NEXT键也可以返回功能选择模块,从而实现程序循环使用的功能。. word.zl.- .参考文献1毅刚.杰.MCS-51单片机原理及应用M.:工业大学,20212 王忠民.微型计算机原理 M.:电子科技大学,20033 顶峰.单片微型计算机原理与接口技术 M.:科学,20074 初华.汇编语言、微机原理及接口技术M.:电子工业,20

14、065 瑞和.微型计算机原理与接口技术M.:高等教育,20046 胡汉才.单片机原理及接口技术 M.:清华大学,2007. word.zl.- .附 录A源程序#include #include #define uchar unsigned char#define uint unsigned intxdata uchar key _at_ 0x8001;/定义键盘行地址xdata uchar led _at_ 0x8002;/定义键盘列地址并定义段码显示所在列xdata uchar dat _at_ 0x8004;/定义段码输出地址uchar ascii=48,49,50,51,52,53,5

15、4,55,56,57,0x41,0x42,0x43,0x44,0x45,0x46;uchar ledmap=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; uint k1; uchar flag; uchar temp; void pcsend(); void keysend(); int i,j,p;void delay() for(i=0;i100;i+) for(j=0;j100;j+) for(p=0;p100;p+) ;unsigned char testkey() /数

16、码管显示函数 led = 0; return (key&0x0f); uint getkey() /键盘扫描函数 uint k; led=0xfb; /扫描左数第四列 switch(key) case 0x0e:k=13; while(testkey();return (k); /下数第一行d case 0x0d:k=12; while(testkey();return (k); /下数第二行c case 0x0b:k=11; while(testkey();return (k); /下数第三行b case 0x07:k=10; while(testkey(); return (k); /下数

17、第四行a default:break; led=0xf7; /扫描左数第三列 switch(key) case 0x0e:k=14; while(testkey();return (k); case 0x0d:k=3; while(testkey();return (k); case 0x0b:k=6; while(testkey();return (k); case 0x07:k=9; while(testkey();return (k); default:break; led=0xef; /扫描左数第二列 switch(key) case 0x0e:k=15; while(testkey(

18、);return (k); case 0x0d:k=2; while(testkey();return (k); case 0x0b:k=5; while(testkey();return (k); case 0x07:k=8; while(testkey();return (k); default:break; led=0xdf; /扫描左数第一列 switch(key) case 0x0e:k=0; while(testkey();return (k); case 0x0d:k=1; while(testkey();return (k); case 0x0b:k=4; while(test

19、key();return (k); case 0x07:k=7; while(testkey();return (k); default:break; led=0xfe; switch(key)case 0x0e: k=100; while(testkey();return(k); default: return(-1); break; void main()/主函数 TMOD=0x20; TH1=0xF3; TL1=0xF3; SCON=0x50; PCON=0x80; while(1) k1=getkey(); /k1=1; led=2; flag=0; dat=ledmapk1; if(

20、k1=1|k1=2) switch(k1) case 1: pcsend();IE=0x00;k1=0; break; case 2: keysend();k1=0; break; void pcsend()/PC发送函数 TR1=1; IE=0x90; while(!flag); void keysend()/小键盘发送函数 uint kk=0; uchar knum; TR1=1; kk=getkey(); while(kk!=100) kk=getkey(); if(kk=-1) continue; led=2; knum=asciikk; SBUF=knum; while(!TI);

21、TI=0; void Int1() interrupt 4/串行口中断函数 while(!RI); temp=SBUF; RI=0; SBUF=temp; while(!TI); TI=0; if(temp=49) flag=1; . word.zl.- .附 录B原理图附 录C元器件清单编号名称型号数目U1单片机80511D1译码器74LS1381U58路总线收发器74LS2451U2、U68上升沿D触发器74LS3742U7串行口芯片MAX2321U3LED灯RES21U4达林顿管阵列反向驱动器MC1413-61J1串行口接口DB91S1按键SW-PB1Y1晶振6MHz1R1、R2、R3、

22、R4、R5电阻10K5C1、C2无极性电容22pF2C3、C4、C5、C6、C7无极性电容10uF5课程设计总结:经过这次课程设计,我对汇编语言、C语言及单片机芯片8031有了进一步的了解,并且稳固了对芯片功能的理解和应用,增加了我的动手能力和实践能力。并且在与教师和同学的交流过程中,开阔了自己的想法,通过使用更好的方法,程序变得更加高效。本次课程设计是用硬件实现串行口通讯的设计。在刚开场实验中遇到了很多问题,其中很多是因为自己的粗心大意导致程序的功能不能正确实现,还有一些是在编写程序时出现的错误。刚接触这些功能时,我还不能真正理解如何实现串行口通讯的功能,从汇编语言来实现小键盘扫描功能无法实现到采用C语言实现,虽然最后的键盘扫描功能不尽人意,但是我认为在这次课程设计后我真的学到了很多东西,在教师和同学的帮助下能完成课程设计的要求我认为很鼓励我的学习兴趣。通过本次课程设计让我更加深刻的理解了MCS-51单片机原理及其应用。同时也认识到自己在书本上所学习到的知识还远远缺乏,需要亲自动手实践来充实自己在书本上的所学,并且应用到具体的语句实现上。所以我会在以后的学习中更加虚心努力,增加自己的编程能力。指导教师评语:指导教师(签字):年月日课程设计成绩. word.zl.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁