找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 826|回复: 15
打印 上一主题 下一主题
收起左侧

我是小白,求思路,如何用at89c52将十进制数转换为十六进制数,后在LCD上显示

  [复制链接]
跳转到指定楼层
楼主
ID:1090450 发表于 2023-11-5 23:24 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
50黑币
我是小白,求思路,如何用at89c52将十进制数转换为十六进制,然后在LCD上显示

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:517951 发表于 2023-11-6 07:31 | 只看该作者
与10进制显数方法一样的, 向右位移4位,每位数取余,然后每位根据余数值显示0-f.
回复

使用道具 举报

板凳
ID:69038 发表于 2023-11-6 07:51 | 只看该作者
给你思路,8位(1字节)10进制的高4位是10,低4位是1,16制制的高4位是16,低4 位是1

回复

使用道具 举报

地板
ID:584814 发表于 2023-11-6 08:14 | 只看该作者
将十进制数除以16,得到结果后在LCD上显示就可以
回复

使用道具 举报

5#
ID:996773 发表于 2023-11-6 08:53 | 只看该作者
我是高手,求问题,这十进制数字有多少位?个位还是百位还是千位,还是上亿?

您给我分辨率多大的LCD?
回复

使用道具 举报

6#
ID:819526 发表于 2023-11-6 08:54 | 只看该作者
把十进制数转换成十六进制在转换成字符串,在输出到lcd上就行了。




给你个参考程序:
/*八位无符号整型->字符串(十六进制)*/
void u82str(u8* x,u8* Str,u8 lenth)
{
        u8 i;
        for(i=0;i<lenth;i++)
        {
                *(Str+2*i)   = (*(x+i)/16<=9)?(*(x+i)/16+'0'):(*(x+i)/16-10+'A');
                *(Str+2*i+1) = (*(x+i)%16<=9)?(*(x+i)%16+'0'):(*(x+i)%16-10+'A');
        }
        *(Str+2*lenth) = '\0';
}
回复

使用道具 举报

7#
ID:276663 发表于 2023-11-6 08:58 | 只看该作者
思路就是
1、先在屏幕上实现画点
2、将0-F取模并且能在屏幕上显示
3、DecToHex需要自己实现
4、屏幕显示
回复

使用道具 举报

8#
ID:161164 发表于 2023-11-6 09:00 | 只看该作者
Hex_H =Uchar_dat/16;
Hex_L = Uchar_dat%16;
回复

使用道具 举报

9#
ID:883242 发表于 2023-11-6 13:41 | 只看该作者
我觉得楼主未能理解十进制和二进制的区别。应该举例说明原始数据和想显示的数据。
回复

使用道具 举报

10#
ID:1090450 发表于 2023-11-6 13:50 | 只看该作者
在LCD1602上先显示所要计算的四位十六进制数,然后在第二行输出计算后的十进制数,想法是这样的
回复

使用道具 举报

11#
ID:1088099 发表于 2023-11-6 15:52 | 只看该作者
按你这个说法是已经知道十六进制数了,现在想问的是如何显示吗?这个你去搜如何控制LCD1602或者看看数据手册通过指令去控制输出就好了
回复

使用道具 举报

12#
ID:883242 发表于 2023-11-6 18:08 | 只看该作者
丢车保帅 发表于 2023-11-6 13:50
在LCD1602上先显示所要计算的四位十六进制数,然后在第二行输出计算后的十进制数,想法是这样的

你还是举例说明吧,比如有个“四位十六进制数”0x7fff,你想显示32767???还是别的什么东西,你现在这么说没人能看懂。
回复

使用道具 举报

13#
ID:1090450 发表于 2023-11-6 21:44 来自手机 | 只看该作者
那我举个例子,我输四位十进制数2222,然后转换成十六进制数8AE,最后在LCD上显示
回复

使用道具 举报

14#
ID:883242 发表于 2023-11-6 21:58 | 只看该作者
丢车保帅 发表于 2023-11-6 21:44
那我举个例子,我输四位十进制数2222,然后转换成十六进制数8AE,最后在LCD上显示

那就根本不用转换,原始数据是0,按2,原始数据变成2,再按2,原始数据*10加上刚刚输入的2,……如此反复就可以了。你是不明白2222在内存里面就是8AE,不要转换。
回复

使用道具 举报

15#
ID:272612 发表于 2023-11-8 10:16 | 只看该作者
结合2楼和14楼的回答就能搞定了。14楼:数据在内存里都是二进制存储的,不存在十进制和16进制的转换问题,这个是前提要理解。LCD上的东西只是给人看的,是按照单个字符逐一显示出来的。所以你想在LCD上显示一个数据,不管用什么进制显示,只要按照进制取出每一位字符,然后逐一显示出来就行了。二楼通过移位的方式可以很方便的满足一个数据取16进制的各位字符,如果是10进制,那就是不断除以10取余就可以了。
回复

使用道具 举报

16#
ID:1097455 发表于 2023-11-13 15:17 | 只看该作者
程序里面的十进制你可以直接转化的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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