串口通信的计算器.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE 信息工程课程设计报告书 课 程 名 称 单片微机原理与接口技术 课 程 设 计 题目 串口通信的计算器 学生姓名、学 号 学 生 专 业 班级 指 导 教 师 姓名 课程设计起止日期 2017年6月19日6月30日 PAGE 一、课程设计项目名称 串口通信的计算器 二、项目设计目的及技术要求 2.1 项目设计目的 通过《单片微型计算机与接口技术》课程设计,使学生能够掌握单片机的开发过程、设计方法和单片机应用电路的特点,使学生能够综合应用《单片机原理及应用》、《模拟电子技术基础》、《数字电子技术基础》等课程的知识。要求学生经过课程设计的教学环节进一步理解智能电子系统的结构和组成原理,掌握智能电子系统的基本设计方法,完成系统电路和应用程序的实践,从而使学生的电子线路设计能力、单片机机应用能力有较大提高。 1)学会单片机的应用方法,开发环境; 2)结合任务要求,完成系统设计和调试,功能扩展和创新; 3)熟悉汇编或C51语言,用C51完成系统的软件编程; 2.2 项目的主要任务 1)上位机串口助手发送字符串,单片机接受到后,进行字符的分解,计算出结果,显示在数码管上,并将结果发送到串口助手上显示。 2)计算的+,-,X,/都可以。在除法运算中,如果除数为0,则在数码管显示0H,表示不能运算。计算出来的结果不能超过999超过,则在数码管上显示0H。 3)矩阵按键的0-4四个按键分别代表+,-,X,/运算。按下按键编号为运算的键,则表示确定开始计算结果,并把结果显示在数码管上面,通过串口发送到上位机显示。同样的在第2步的要求也能实现。 三、项目设计方案论证 3.1实现串口通信的计算器的整体方案 PC可通过串口助手软件将数据发送至单片机,单片机接收数据,通过按键立进行相应的运算,将计算结果在数码管上显示,并且将计算结果发送回PC。 单片机 单片机 STC89C52 上位机串 口助手 按键运算 串口助手 数码管显示结果 图3-1串口通信的计算器的整体思路 3.2硬件原理图 串口通信计算器主要涉及到按键、数码管、单片机的电路图。 3.3程序设计思路 主函数,串口函数、拆分函数、按键函数、计算函数、数码管函数等五部分组成。下面就是对具体函数思路的解析: 串口助手字符串的输入 串口助手字符串的输入 字符串的读取 输出结果 字符串拆分成num1、num2 数码管显示 按键扫描按键驱动 操作计算结果 串口助手显示 图3-3程序中函数的思路图 (1)串口函数:PC通过串口向单片机发送的算式是以字符串的形式发送的,故单片机程序可使用数组存放接收到的字符串。由于每次发送的算式均以“#”结尾,所以在程序中可对每次接收到的字符进行检测,若检测到“#”则接收结束,程序开始执行下一步操作。 /* 串口数据写入,即串口发送函数,buf-待发送数据的指针,len-指定的发送长度 */ void UartWrite(unsigned char *buf, unsigned char len) { while (len--) //循环发送所有字节 { flagTxd = 0; //清零发送标志 SBUF = *buf++; //发送一个字节数据 while (!flagTxd); //等待该字节发送完成 } } /* 串口中断服务函数 */ void InterruptUART() interrupt 4 { if (RI) //接收到新字节 { RI = 0; //清零接收中断标志位 if(SBUF!=#) { if (cntRxd sizeof(bufRxd)) //接收缓冲区尚未用完时, { //保存接收字节,并递增计数器 bufRxd[cntRxd++] = SBUF; //if(bufRxd[0]==1){LED1=0;} //if(bufRxd[2]==2){LED2=0;} } } else { cntRxd =0; restopflag=1; } } if (TI)

文档评论(0)

wyjy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档