求大佬指教单片机16位数据的BCD码转换

2019-07-15 08:29发布

就是这种这种8位的十六进制数temp(0~255)
百位 bai=temp/100;
temp=temp%100;//取余数
shi=temp/10;
ge=temp%10;

16位的也是一样,只是先除以1000(不太懂后面的)

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
PKZz
1楼-- · 2019-07-15 15:57
longrenwenzi 发表于 2018-5-4 16:47
问题描述的详细一点,不知道你在问什么呢。


uint speed=50;
void write_fsm1(uchar add,uchar date)
{
        uchar qian,bai,shi,ge;
        qian=date/1000;
        bai=date%1000/100;
        shi=date%1000%100/10;
        ge=date%1000%100%10;
        write_ml(0x80+add);
        write_data(0x30+qian);
        write_data(0x30+bai);
        write_data(0x30+shi);
        write_data(0x30+ge);}
write_fsm1(6,speed);
大概程序就这样写的,但是输入数据大于255就显示不出来是什么原因呢?求指教
wulinwl
2楼-- · 2019-07-15 17:57
PKZz 发表于 2018-5-4 23:13
uint speed=50;
void write_fsm1(uchar add,uchar date)
{

void write_fsm1(uchar add,uchar date)的入口参数的数据类型要改为unsigned int
人中狼
3楼-- · 2019-07-15 22:48
计算时最好能包括万位,除非确定数据在千位以内
PKZz
4楼-- · 2019-07-16 04:40
 精彩回答 2  元偷偷看……
PKZz
5楼-- · 2019-07-16 08:35
人中狼 发表于 2018-5-5 09:10
计算时最好能包括万位,除非确定数据在千位以内

是的,只用到千位,主要是51单片机计算16位数据要分成两部分吗?
llzzkkxl
6楼-- · 2019-07-16 12:11
PKZz 发表于 2018-5-5 10:41
改成了unsigned long int 还是在只能显示小与255的数,请问是不是51单片机只能计算8位的原因?16位数据是不是要分成2部分来计算?

51单片机RAM是8位,因此计算的数据限于8位2进制数,最大的8位2进制数即255,要想计算出更大的数据就要区分高位和低位,对于16位数据,分为高8位和低8位,在程序编写时要将高8位和低8位分别存在两个寄存器中计算。最大的16位的2进制数是2的17次方减一,可以容易的表示千位甚至万位的10进制数。

一周热门 更多>