找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1400|回复: 4
收起左侧

单片机加法计算器程序调试问题

[复制链接]
回帖奖励 10 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
ID:1079270 发表于 2023-6-30 14:21 | 显示全部楼层 |阅读模式
void KeyAction(unsigned char keycode)
{
    static unsigned long result = 0;  //用于保存运算结果
    static unsigned long addend = 0;  //用于保存输入的加数
   
    if ((keycode>=0x30) && (keycode<=0x39))  //输入0-9的数字
    {
        addend = (addend*10)+(keycode-0x30); //整体十进制左移,新数字进入个位
        ShowNumber(addend);    //运算结果显示到数码管
    }
    else if (keycode == 0x26)  //向上键用作加号,执行加法或连加运算
    {
        result += addend;      //进行加法运算
        addend = 0;
        ShowNumber(result);    //运算结果显示到数码管
    }
    else if (keycode == 0x0D)  //回车键,执行加法运算(实际效果与加号相同)
    {
        result += addend;      //进行加法运算
        addend = 0;
        ShowNumber(result);    //运算结果显示到数码管
    }
    else if (keycode == 0x1B)  //Esc键,清零结果
    {
        addend = 0;
        result = 0;
        ShowNumber(addend);    //清零后的加数显示到数码管
    }
}
问:(keycode-0x30)计算出是一个十六进制的数, ShowNumber(addend)的addend是一个十进制的数





回复

使用道具 举报

ID:161164 发表于 2023-6-30 17:56 | 显示全部楼层
进制是给人看得
单片机只认1/0
回复

使用道具 举报

ID:404160 发表于 2023-6-30 18:00 | 显示全部楼层
你的shownumber()是按十进制格式显示的,可改成十六进制格式输出,就不是十进制的数了。你可以手工转换下十进制数为十六进制数,看看显示的值是否正确
回复

使用道具 举报

ID:1086796 发表于 2023-7-1 21:13 | 显示全部楼层
在给定的代码中,(keycode-0x30)计算的结果是一个十六进制数减去十六进制数字0x30,这实际上是将十六进制数转换为对应的十进制数。这是因为在ASCII编码中,数字0-9的十六进制表示正好是0x30-0x39。所以,通过将keycode减去0x30,可以将十六进制数字转换为对应的十进制数字。

ShowNumber(addend)函数可能接受的是十进制数字作为参数,因为在代码中没有给出ShowNumber函数的实现细节,无法确定确切的数据类型。但是,根据代码中的逻辑,addend应该是一个保存十进制数字的变量,因为它在每次按下0-9的数字键时都会被更新,并且最终传递给ShowNumber函数以显示在数码管上。

评分

参与人数 1黑币 +12 收起 理由
xnysfh + 12 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:1079270 发表于 2023-7-3 08:31 | 显示全部楼层
dwping 发表于 2023-7-1 21:13
在给定的代码中,(keycode-0x30)计算的结果是一个十六进制数减去十六进制数字0x30,这实际上是将十六进制数 ...

非常感谢,看了你的解释我大致明白了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表