永发信息网

用C语言编写单片机上计算器程序遇到问题

答案:7  悬赏:30  手机版
解决时间 2021-04-27 12:28
  • 提问者网友:斑駁影
  • 2021-04-26 18:32
目的是通过串口输入100以内任意两个数,进行加法运算后通过串口输出结果。我遇到两个问题:第一,如何输入两位数;第二,加法运算的时候是按照ASCII码来计算的,比如我输入1和2,ASCII码分别是49和50,计算结果是99,输出的时候也按照ASCII码输出看到的结果就变成了c,求解。希望能提供下程序代码。特别声明下,我想做2个2位数的加法运算,但是SBUF变量是八位的,比如我输第一个两位数33,通过助手传入单片机后,单片机误认为是传了两次1位的数字,并以ASCII码的形式相加。很是苦恼。
最佳答案
  • 五星知识达人网友:夜余生
  • 2021-04-26 19:15

串口输入数据:用串口调试助手 输入然后点发送就行 如 输入 3和4 就在串口助手填入0x03  0x04 勾16进制发送选项就不会以ASCII码发送,单片机接收到的就是0x02和0x04


另外ASCII码和10进制可以转换,如果以ASCII码发送,那就收后转为10进制计算再转为ASCII发回电脑即可


还有8位2进制数可以代表最大的10进制数为255,所以你发送33单片机不会误以为是两个数的


全部回答
  • 1楼网友:舊物识亽
  • 2021-04-27 00:42
串口调试好像只是用来给初学者调试串口的 你做计算器还是得自己写上位机吧
  • 2楼网友:上分大魔王
  • 2021-04-26 23:38

不懂

  • 3楼网友:迟山
  • 2021-04-26 22:26

串口输入就不用说了吧。

串口调试助手,或者你上位机软件好,也能自己写个。

第二个问题,结果 -48就行了。假设2+2,电脑得到的是(2+2)=(50+50)=100-48=52=4

  • 4楼网友:雪起风沙痕
  • 2021-04-26 21:02

void Serial_INT() interrupt 4 {  static unsigned char Pointer;

 if(!RI) return;

 ES = 0;  RI = 0;        switch(SBUF)  {   case 0xfe:    //指令开始    Pointer = 0x00;    Register[0] = 0x00;    break;   case 0x80:    //执行指令    if(Register[0] != 0x00)     Serial_instru = 0x80;       break;   default:    Register[Pointer] = SBUF;  //指令内容    Pointer++;    break;  }

 ES = 1; }

  • 5楼网友:迷人又混蛋
  • 2021-04-26 20:30
多看看C语言的书
  • 6楼网友:青灯有味
  • 2021-04-26 20:10

问题一:如何输入一个两位数是吧……

通过串口输入:串口进来的数是以位传输的,如果是8位的,你需要先将数据转换成十进制数,用(x*10+y)得到两位数,x是高位,y是低位。这样就得到了两位的数了!

问题二:无论加减乘除都是二进制形式计算的!比如你输入的是1和2,他们二进制形式为别是1,10,那么加起来后就是11,即3!

如果你想输入33,即先输入3,再输入3,按照3*10+3就得到33.

你输入的时候应该一位一位的输入,应该都是这样吧,从键盘上按下一个数字就发送给单片机,单片机接收后再次接收一个数,直到你按下+-*/为止,然后就把它转换成十进制形式加成你想要的两位或者更多位!

最后再进行加法或其它!

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯