51单片机课设-串口计算器_第1页
51单片机课设-串口计算器_第2页
51单片机课设-串口计算器_第3页
51单片机课设-串口计算器_第4页
51单片机课设-串口计算器_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、二0一三年 单片机课程设计报告姓 名 学 号 指导老师 完成时间 2013/12/26 河 海 大 学2013年12月 2013年电科专业单片机课程设计报告 Dec.20131 作品简介本作品为带有串口通信功能的计算器,PC可通过串口助手软件将算式发送至单片机,单片机立即将计算结果发送回PC,并且在液晶上显示结果。串口通信波特率为两档可调,分别为9600bps和4800bps,可通过两个按键调整,同时在液晶上会显示当前的波特率。计算器可自动识别输入的字符串,并自动判断输入的算式是否正确;可自动识别算式中包含错误字符、除数为零、浮点数做取余运算等错误。当计算结果超出设定范围时在液晶上出现“超出范

2、围”提示,同时向PC发送“The result is out of range! ”。2 作品整体方案2.1 串行通信功能:实验板和PC电脑通过USB线相连,使MCU和PC软件“串口助手”能够进行串行通信。 (1)当实验板上电时默认波特率为9600bps,并发送欢迎词和提示词,例如“Welcome to Calculator V1.0”,"You can press key1 and key2 to change baud rate.". (2)当实验板上按键1按下时波特率变更为4800bps,按键2按下时波特率变更为9600bps,并用两个LED灯指示相应的波特率。2.2

3、 计算器功能通过串口助手发送框发送需要计算的公式,例如20*4=,MCU收到后解析公式并计算结果,将结果返回给串口,例如“The result is 80”,同时将计算结果显示在数码管上,具体细节如下:(1)可以进行加(+)、减(-)、乘(*)、除()、取余(%)运算;(2)整形、浮点型运算;(3)当计算结果为整形数时,有效的运算结果范围是-9999999,超过此结果,返回相应的提示符,例如“The result is out of range.”,液晶上显示“超出范围”;(4)当计算结果为浮点数时,有效的运算结果范围是-99.9999.9,液晶上保留3位有效数字,超过此结果,返回相应的提示符

4、,例如“The result is out of range.”,液晶上显示“超出范围”。串口调试助手液晶显示结果及波特率AT89S52单片机波特率调整3 程序设计思路本程序分为四部分:串口接收、字符串识别、算数运算、结果显示。(1)串口接收:PC通过串口向单片机发送的算式是以字符串的形式发送的,故单片机程序可使用数组存放接收到的字符串。由于每次发送的算式均以“=”结尾,所以在程序中可对每次接收到的字符进行检测,若检测到“=”则接收结束,程序开始执行下一步操作。void init_serial() /初始化串口设置TMOD=0x20;TH1=0xfd;TL1=0xfd;SCON=0x50;EA

5、=1;ES=1;TR1=1;void serial_receive() interrupt 4if(RI=1) rec_strrec_count=SBUF; /将接收到的字符串保存在数组rec_str中if(rec_strrec_count='=') flag=1;str_length=rec_count;rec_count+; RI=0;(2)字符串的识别:由于接收到的算式是以字符串的形式保存在数组中,不能直接进行算术运算,需对字符串进行识别转换,得到相应的运算数和运算符。并且自动识别出不正确的表达式。while(rec_stri)if(rec_stri='='

6、;)break; if(rec_stri>=48 && rec_stri<=57) | rec_stri='.')if(rec_stri='.')sign_point=1;numji-k=rec_stri;i+;elseoperator=rec_stri;i+;k=i;j+;(3)算数运算:将转换得到的运算数根据运算符进行相应的运算操作,同时对违反算术运算规则的运算进行错误提示,如除数为零、浮点数取余等运算。若是浮点数的运算还需要对结果进行小数位数的控制(含四舍五入)。if(sign_point)num1=atof(num0);num

7、2=atof(num1);if(num1<=0.001 | num2<=0.001) return 'N'/if(operator='/' && abs(num2)<0.001)/return 'N'switch(operator) case '+': result_f=num1+num2; break;case '-': if(num1-num2<0)result_f=num2-num1;sign_bit=1;if(result_f>99.999)return 

8、9;R'elseresult_f=num1-num2;break;case '*': result_f=num1*num2; break;case '/':result_f=num1/num2; break;/case '%':result_f=(int)num1%(int)num2; break;default: break;if(result_f>999.999)return 'R'result_str_len=sprintf(result_str,"%.3f",result_f);/将浮点数

9、转换成字符串 存储在result_str中elsenum3=atoi(num0);num4=atoi(num1);if(num3=0 | num4=0)return 'N'/if(num4=0 && operator='/')/return 'N'switch(operator) case '+': result_i=num3+num4; break;case '-': if(num3-num4<0)result_i=num4-num3;sign_bit=1;if(result_i>99

10、9)return 'R'elseresult_i=num3-num4;break;case '*': result_i=num3*num4; break;case '/':result_i=num3/num4; break;case '%':result_i=num3%num4; break;default: break;if(result_i>9999)return 'R'result_str_len=sprintf(result_str,"%d",result_i);(4)结果显示:将

11、计算得到的结果通过串口发送至PC并且显示在液晶上,由于串口发送和液晶显示必须以字符的方式,所以须将计算结果转换成字符串。void display_result()uchar i,st=0;PCD_write_chinese_string_space(0,0,8,9,0,0); /清除显示PCD_write_chinese_string_space(0,1,8,9,0,0);if(sign_bit)st=1;PCD_write_chinese_ch(0,0,8,1,18,0);for(i=0;i<result_str_len;i+)if(result_stri='.')PC

12、D_write_chinese_ch(st*8,0,8,1,19,0);else PCD_write_chinese_ch(st*8,0,8,1,result_stri-48,0);st+; 4 遇到的问题及解决办法全局变量定义多了之后编译无法通过:经过资料查询,发现是软件默认的变量存储模式为Small,将其改为Large模式后问题得到很好的解决。计算一次之后,第二次的结果会出现问题,受到第一次计算的影响:经过排查发现是由于没有将第一次存储的数据清空,在接收到第二次的字符时受到第一次存储的数据的影响。对于浮点数保留若干位小数之后需要进行四舍五入的问题:在帮助组员进行数码管显示时,由于只保留一位小数,就需要考虑四舍五入的问题。5 小结此次单片机课设题目的难点在于对接收到的字符串的识别处理,且需要考虑多种特殊情况。经过此次课设,对字符串的识别处理能力有了进一步的提高。作为小组长,需要及时关组组员的进度,并帮助组员解决一些遇到的问题。在这当中,需要按照别人程序的思路来对程序进行调试,这是挺有挑战的。当然,通过与不同人的交流,也对自己的思路有了一定的积极影响,通过互相取长补短,让自己得到了很大的进步。由于程序比较长,所以逻辑性和编程的规范就显得尤为重要

温馨提示

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

评论

0/150

提交评论