单片机与pc机软件开发_第1页
单片机与pc机软件开发_第2页
单片机与pc机软件开发_第3页
免费预览已结束,剩余14页可下载查看

下载本文档

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

文档简介

1、单片机与 pc 机软件开发1.1 设计内容和要求(1) 课程设计内容利用南京伟福公司的LAB8000来开发单片机与PC机串行通讯系统,实现单片机与 PC机的通讯。要求实现数据收发功能。具体要求内容如下:通过 LAB8000的小键盘选择功能;功能 1:接受 PC机发送的数据,并将其回发给 PC机;功能 2:从 LAB8000的小键盘输入数据,发送给 PC机。(2) 课程设计要求:认真完成课程设计任务;通过老师现场验收;交出完整的课程设计报告。1.2 课程题目分析题目背景:串行口在计算机中有重要的作用,MCS51 单片机内部有一个功能强的全双工的异步通信串行口,就是指双机之间的串行接收、发送数据可

2、同时进行。要传送的串行数据在发方是以数据帧形式一帧一帧地发送,通过传输线由收方一帧一帧地接收。 本次课设要求完成从PC机发送数据, 将其传入单片机, 并将其发回给 PC机。然后再从 LAB8000的小键盘输入数据,将其发送给PC机。1.3 课程设计原理本次课程设计由于要完成功能的选择,所以要用键盘扫描程序。 通过键盘扫描程序来判断按下来的是哪一个按键,实现功能选择。当扫描到用户按LAB8000上面的小键盘 1 时,实现功能 1 的选择,这时候从 PC机的键盘输入数据, 就可以使之发送出去,传送到单片机然后后传回PC机,这里面需要一个SBUF缓冲区来缓冲存储数据, 当把数据往单片机里面发送时,

3、数据需要先发送到 SBUF缓冲区里面,然后再往单片机里面发送, 当单片机往 PC机发送数据时, 数据也需要先送到SBUF里面,然后在往外发送,当扫描到输入的值是 1 时,结束功能 1,停止发送。当扫描到用户按 LAB8000上面的按键 2 时,通过键盘扫描程序进入功能 2,功能二要求从 LAb8000小键盘输入数据,然后传给 PC机。当扫描到按 NEXT键时,停止发送。要实现单片机与PC机的串行通信, 要用到 MAX232来实现电平转换。 串行通信时选择串行口工作在方式一,定时器工作时选择工作在方式二。经过计算,设置通信时的波特率为4800bits/s,将 4800bits/s往回带入公式,计

4、算出误差小于 <7% ,所以可以选择这种工作模式。1.4 方案设计设计键盘扫描函数和按键检测函数,通过MCS-51芯片,实现键盘扫描,通过小键盘设置 17 个键位选择键( 4*4+NEXT键),再输入时在数码管上面显示1,进入功能一:接收PC机发送的数据并将其发回给PC机,在输入 2 时,在数码管上面显示数值 2,然后从小键盘输入数据发送给PC机。1.4.1 小键盘选择功能小键盘选择功能:首先设置定时器及波特率,然后在设计键盘扫描函数和按键检测函数,使之能实现小键盘的选择功能。 输入不同的数实现调用不同的函数,从而实现不同的功能。1.4.2 功能 1, PC 机发送模块功能 1:设计 P

5、C发送函数,此功能还需要有串行口中断函数。目的是实现单片机可以接收 PC机发送的数据,并且将其发送给PC机。设置一个返回键,让按键 1 实现返回小键盘选择功能,可以重新选择功能1 还是功能 2。1.4.3 功能 2,单片机发送模块功能 2:设计小键盘发送程序,需要调用键盘扫描函数和按键检测函数,若有键按下,将键值发送到数码管上, 并将其转化为 ascii 码发回 PC机。同样设置一个返回键,设置小键盘右下角的“ NEXT”时返回小键盘的功能选择,使函数能够循环使用。1.5 方案论证从实际应用的角度,可以任意选择事先设计好的3 种状态,当选择完一种状态时(除 0),它可以无限的按照这种方案循环的

6、运行下去,在此过程中,用户可以选择退出这种工作状态,从而实现对当前进行状态的控制,即可以令程序重新开始。当输入 0 时,结束。在整个串行口输入过程中可随时做出不同的输入方式,对输入数据的工作状态进行控制。2 总体设计方案2.1 实现方法开始运行程序时,数码管初始化显示 6 个数字 0,然后选择一种模式( 1 和 2),若输入的数不是“ 1”或“ 2” , 只在 LED登上显示该数,等待重新输入一个工作状态,此处在扫描键盘并按键检测后需要将扫描到断码发送到登上。在选择“ 1”,即要实现功能 1,则调用 PC机发送函数,用串行口中断函数来保存断点(防止计数器溢出) 。使之能实现接收 PC机发送的数

7、据后,在将其回发给 PC机。设置一全局变量 flag ,当用户按键 1 时,flag 置 1,使之跳出 while 死循环,从而达到返回小键盘,重新选择功能 1 跟 2。若选择“ 2”,即要实现功能 2,须调用小键盘扫描函数,将数据显示到数码管上,同时然后将该数据转化成 acsii 码的形式通过串行口发送到 PC机上。当从小键盘按键 NEXT时,返回初始状态,可以进行功能 1 和 2 的重新选择。2.2 设计思路本课设主要分 3 个模块,第一个模块是主程序中的键盘扫描,通过键盘扫描程序来获取从小键盘输入的键值, 此次课设里面用到的键盘的按键主要有三个,一个是 0,一个是1,另一个是 2。当输入

8、0时,结束。当输入的是 1 时,进入第二个功能模块,由 PC机发送数据,将数据发送给单片机,然互在传给 PC 机。当输入数值 2时,进入第二个模块,将数据由单片机小键盘输入,发送给 PC机。模块调用图如下页图 2.1 所示单片机与 PC 机通讯系统键盘选择按键模块PC机发送数据模块单片机发送数据模块图 2.1模块调用2.3 设计环境硬件环境:伟福LAB8000 ;软件环境: Kei vision3 详细设计3.1硬件电路设计8051 单片机内部的总体电路图如图3.1 所示,图 3.1 8051 单片机电路图3.2软件设计3.2.1 主程序键盘扫描模块该模块的功能是用户从小键盘输入数据,以进行功

9、能选择。将某一键按下,通过扫描键盘,向列扫描码地址(0X8002H)逐列输出低电平,然后从行码地址(0X8001H)读回。如果有键按下 , 则相应行的值应为低 , 如果无键按下,由于上拉的作用,行码为高。这样就可以通过输出的列码和读取的行码来判断按下的是哪个键。该模块中键盘扫描的电路图和键盘扫描电路如图3.2 和 3.3 所示图 3.2 键盘电路图开始初始化地址参数输出列扫描信号列扫描信号移位读入行信号该列有键输入否否是按照行列计算键值查表得键码6列扫描完等待按键释放是结束图 3.3 键盘扫描流程图主函数模块首先设置定时器及波特率的选择,根据标志位k1 的值选择是PC模式发送数据还是小键盘模式

10、发送数据,并根据功能选择模块中对各模式的信息的进行相应的初始设置。通过小键盘选择功能控制数据的输出方式,还能接受新的键值来执行相应的功能。读取的键值要先判断是否是无效键,是无效键要执行死循环程序,按下“ 1”或“ 2”键才能继续显示。如下页图3.4 所示开始设置定时器工作方式及波特率小键盘输入NN为值是 1或者YY值是否为1结束Y上微机键盘发送数据用小键盘发送数据按小键盘 1 键按小键盘NEXT 键图 3.4 主函数模块流程图3.2.2 功能 1 模块该模块的功能是通过键盘扫描程序的按键选择选择功能 1(串口传输),并且将数字显示到数码管上面。要实现单片机与 PC机的串行通信 ,数码管显示电路

11、图如图 3.5 所示图 3.5数码管显示电路图功能 1 模块利用单片机的串行口, 实现 PC机的串行通讯。启动功能 1 时开启定时器,调用串行中断函数,通过 while(!flag) 语句实现循环发送的功能 , 在串行中断子函数中先将 PC机中输入的内容发送到单片机上 , 执行 while(!RI) 。在单片机将其内容回发给 PC机之前需要进行是否返回小键盘选择功能的判定 , 通过 if(temp=49)flag=1 语句 , 判断是否是数 1 的 ASCII 码 49, 若是则将 flag 置 1, 达到跳出该循环的目的。如图 3.6 所示。开始启动定时器,允许串行口中断上微机输入传输数据数

12、据由 SBUF 传入 TempN接收完RI=0将 Temp 中的数据传到SBUFN发送完NYTI=0小键盘输入1?Y返回断点图 3.6 功能 1 模块流程图3.2.3 功能 2 模块本次课设实现单片机与PC 机之间的串行通信需要串口通信需要用到 MAX232芯片,由于标准的MAX232电平很高,可以达到正负15V,常用的 TTL电平最高可以达到5V,所以需要 MAX232芯片来进行转换。将 P3.0 接 RXD引脚, P3.1 接 TXD引脚MAX232芯片如下图 3.7 所示,用 MAX232接单片机与 PC机后的电路图如图 3.8 所示图 3.7 MAX232 芯片图 3.8 MAX232

13、 连接后的电路图功能 2 模块实现小键盘发送数据的功能, 需调用小键盘扫描函数和按键检测函数,将小键盘输入的数据发送到LED灯上。启动功能2 时同功能 1 一样先启动定时器工作 , 扫描小键盘使之能够在小键盘输入数据, 对输入的数据进行判定, 若为返回键 (NEXT)则跳出该函数重新进行小键盘选择功能, 使之能够循环使用 ; 若为基本键 , 将扫描到的按键的键值通过查表的方式转为ASCII 码, 好发送回 PC机中。如图 3.9 所示开始启动定时器1 工作调用键盘扫描函数按键为 NEXTNY让第二个数码管显示返回断点将键值相对应的ASCII码发送到变量knum 中从 temp 中输出数据N发送

14、完成YTI=0图 3.9 功能 2 模块流程图4 调试4.1调试过程主函数模块中的键盘扫描开始不太会,所以在本次课程设计开始做的时候就参照着实验指导书进行了细致地系统地学习,深刻地了解了其工作原理,以便后来理解代码以及编写代码。功能 1 即 PC机发送数据模块进行编代码时, 由于平时学习单片机时用的是汇编语言编程,这次课程设计要求用C语言进行编程,结合着实验箱上的各器件和接线方法进行编程。因为以前实验时候做过串口通信实验,所以对这部分还是挺熟悉的,将以前写的实验原理汇编语言转化为C语言。有时候调试的时候忘记连实验箱的线,急的满头大汗,最后发现真是又高兴又无奈。编写代码过程中还会存在一些小的语法

15、错误,通过 keil软件不断进行调试的过程中,根据其给出的错误提示,来进行检查修改。4.2调试结果根据此次课程设计题目的要求,在老师和同学的帮助下,经过上述的各种调试过程,实现了课设上面的所有要求,可以在按键1 时数码管显示1,进行PC机发送数据,发送给单片机,单片机再将数据发给PC机。按键2 时数码管显示2,将小键盘输入的数据发送给PC机。但是由于课设简单,孙老师让增加一个界面,类似于串口大师的,经过一天多的学习,只做完了对话框,没有将之与单片机连接到一起。参考文献1 张毅刚,刘杰 . MCS-51单片机原理及应用 M. 哈尔滨:哈尔滨工业大学出版社, 20082 张义和 . 例说 51 单

16、片机: C 语言版 M. 北京:人民邮电出版社, 20103 段晨东,爨莹 . 单片机原理及接口技术 M. 北京:清华大学出版社, 20084 伟福 Lab8000 系列单片机仿真实验系统 使用说明书 M. 南京伟福实业有限公司, 20155 高峰 . 单片微型计算机原理与接口技术 M . 北京:科学出版社, 2007附录(关键部分程序清单)#include <reg51.h>#include <intrins.h>#defineuchar unsigned char#defineuint unsigned intxdata ucharkey_at_ 0x8001;/

17、定义键盘行地址xdata ucharled_at_ 0x8002;/ 定义键盘列地址并定义段码显示所在列xdata uchardat_at_ 0x8004;/ 定义段码输出地址uchar ascii=48,49,50,51,52,53,54,55,56,57,0x41,0x42,0x43,0x44,0x45,0x46; ucharledmap=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x7 1;uint k1;uchar flag;uchar temp;void pcsend();vo

18、id keysend();int i,j,p;unsigned char testkey()/数码管显示函数led = 0;return (key&0x0f);uint getkey() uint k;/ 键盘扫描函数led=0xfb;switch(key)/扫描左数第四列case 0x0e:k=13;case 0x0d:k=12;case 0x0b:k=11;case 0x07:k=10;while(testkey();return (k);while(testkey();return (k);while(testkey();return (k);while(testkey(); r

19、eturn (k);/下数第一行/下数第二行/下数第三行/下数第四行dcbadefault:break;led=0xf7;/扫描左数第三列switch(key) case 0x0e:k=14;case 0x0d:k=3;while(testkey();return (k);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

20、=15;while(testkey();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(testkey();return

温馨提示

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

评论

0/150

提交评论