搜索
bottom↓
回复: 8

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

[复制链接]

出0入0汤圆

发表于 2008-4-24 22:55:26 | 显示全部楼层 |阅读模式
void freq_to_disbuff(void)                // 将频率值转化为BCD码并送入显示缓冲区
{
        unsigned char i,j=7;
        for (i=0;i<=4;i++)
        {
                dis_buff[j-i] = freq % 10;
                freq = freq / 10;
        }
        dis_buff[2] = 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&#8206;,简称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[j-i] = 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进制数啊[哎...这次又给马潮老师斥一顿啊......]

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2008-4-24 23:27:48 | 显示全部楼层
你是学电子的吗?什么地方有问题?还是我的程序有错误?

出0入0汤圆

 楼主| 发表于 2008-4-25 07:09:00 | 显示全部楼层
嗯 我是学电子的 学校太差啦 都是自己自学 同学们都是很多不做回本专业啊 想找个同学讨论都没有啊 现在学AVR都是单个自己学的 问老师时 单片机只会51 而且只会汇编啊 所以我现在只能求教于网上啊

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

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

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

出0入0汤圆

发表于 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)

出0入0汤圆

 楼主| 发表于 2008-4-25 09:40:30 | 显示全部楼层
0xff不是256吗 为什么是255呢

出0入0汤圆

发表于 2008-4-25 10:54:05 | 显示全部楼层
0xff不是256吗 为什么是255呢
呵呵.是255....数一下吧.

出0入0汤圆

 楼主| 发表于 2008-4-25 12:03:15 | 显示全部楼层
sorry 这么小的失误

出0入0汤圆

发表于 2008-4-25 15:16:54 | 显示全部楼层
to:125008301
从你问的若干问题反映出你的基础知识不牢固,更多的问题不出在AVR本身,是你的基础.数制的相互转换于使用,C的编程等都是前期的基础课程.没有牢固的基础,到用的时候就显现出困难了.

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

出0入0汤圆

 楼主| 发表于 2008-4-25 19:40:50 | 显示全部楼层
多谢马潮老师指点 我继续翻书 遇到网上的名师 是我最幸福的事情 我会尽我最大的努力减少低级问题的出现
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 09:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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