125008301 发表于 2008-4-24 22:55:26

[已解决]P324关于频率值转化为bcd码

void freq_to_disbuff(void)                // 将频率值转化为BCD码并送入显示缓冲区
{
        unsigned char i,j=7;
        for (i=0;i<=4;i++)
        {
                dis_buff = freq % 10;
                freq = freq / 10;
        }
        dis_buff = freq;
}


while (1)
        {
            if (time_1ms_ok)
            {        // 累计T/C0的计数值
                    if (time0_new >= time0_old) freq = freq + (time0_new - time0_old);
                    else freq = freq + (256 - time0_old + time0_new);
                    time0_old = time0_new;
                    if (++freq_time >= 100)
                    {
                            freq_time = 0;                        // 100ms到,
                            freq_to_disbuff();                // 将100ms内的脉冲计数值送显示
                            freq = 0;
                    }
                      time_1ms_ok = 0;
            }
        }
}

============================================================================================================================================
BCD代码。Binary-Coded Decimal‎,简称BCD,称BCD码或二-十进制代码,亦称二进码十进数什么是BCD码2006-3-19 13:24:45
bcd码也叫8421码就是将十进制的数以8421的形式展开成二进制,大家知道十进制是0~9十个数组成,着十个数每个数都有自己的8421码
举个例子:
321的8421码就是
3 2 1
0011 0010 0001

问题就来了呜呜.....
dis_buff = freq % 10;//取余操作
                freq = freq / 10;//取整操作

if (time0_new >= time0_old) freq = freq + (time0_new - time0_old);
                    else freq = freq + (256 - time0_old + time0_new);//10进制数的加减法啊

这里怎样来个2进制数啊[哎...这次又给马潮老师斥一顿啊......]

machao 发表于 2008-4-24 23:27:48

你是学电子的吗?什么地方有问题?还是我的程序有错误?

125008301 发表于 2008-4-25 07:09:00

嗯 我是学电子的 学校太差啦 都是自己自学 同学们都是很多不做回本专业啊 想找个同学讨论都没有啊 现在学AVR都是单个自己学的 问老师时 单片机只会51 而且只会汇编啊 所以我现在只能求教于网上啊

马潮老师,我想知道BCD码是怎样的一个转换过程啊 你的程序我都是用仿真做的啊

bcd码也叫8421码就是将十进制的数以8421的形式展开成二进制,但是我仿真时数码管不是以二进制显示的,是以十进制数显示的

其实按我分析来说,只是一个逐个取位赋值到缓冲函数dis_buff

mljda 发表于 2008-4-25 08:52:52

BCD不是显示用二进制,而是把分解成数都是十进制的每一位模式,而这个数只有8421四个二进制数组成
8->1000
4->0100
2->0010
1->0001
8 4 2 1 可是组合成所有10进制数
说到最终目的就是求得数值的十进制位显

16进制 == 10进制->bcd
0xff   ->255    -->2,5,5,(三个数分解了表示255)

125008301 发表于 2008-4-25 09:40:30

0xff不是256吗 为什么是255呢

liangxliao 发表于 2008-4-25 10:54:05

0xff不是256吗 为什么是255呢
呵呵.是255....数一下吧.

125008301 发表于 2008-4-25 12:03:15

sorry 这么小的失误

machao 发表于 2008-4-25 15:16:54

to:125008301
从你问的若干问题反映出你的基础知识不牢固,更多的问题不出在AVR本身,是你的基础.数制的相互转换于使用,C的编程等都是前期的基础课程.没有牢固的基础,到用的时候就显现出困难了.

把0xff认为是256,看上去是"小失误",其实看你所有的问题,感觉你处在一片混乱之中.BCD码的转换和应用,在数字逻辑课程中肯定学过,但你连这个关都过不了.

125008301 发表于 2008-4-25 19:40:50

多谢马潮老师指点 我继续翻书 遇到网上的名师 是我最幸福的事情 我会尽我最大的努力减少低级问题的出现
页: [1]
查看完整版本: [已解决]P324关于频率值转化为bcd码