[已解决]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进制数啊[哎...这次又给马潮老师斥一顿啊......] 你是学电子的吗?什么地方有问题?还是我的程序有错误? 嗯 我是学电子的 学校太差啦 都是自己自学 同学们都是很多不做回本专业啊 想找个同学讨论都没有啊 现在学AVR都是单个自己学的 问老师时 单片机只会51 而且只会汇编啊 所以我现在只能求教于网上啊
马潮老师,我想知道BCD码是怎样的一个转换过程啊 你的程序我都是用仿真做的啊
bcd码也叫8421码就是将十进制的数以8421的形式展开成二进制,但是我仿真时数码管不是以二进制显示的,是以十进制数显示的
其实按我分析来说,只是一个逐个取位赋值到缓冲函数dis_buff BCD不是显示用二进制,而是把分解成数都是十进制的每一位模式,而这个数只有8421四个二进制数组成
8->1000
4->0100
2->0010
1->0001
8 4 2 1 可是组合成所有10进制数
说到最终目的就是求得数值的十进制位显
16进制 == 10进制->bcd
0xff ->255 -->2,5,5,(三个数分解了表示255) 0xff不是256吗 为什么是255呢 0xff不是256吗 为什么是255呢
呵呵.是255....数一下吧. sorry 这么小的失误 to:125008301
从你问的若干问题反映出你的基础知识不牢固,更多的问题不出在AVR本身,是你的基础.数制的相互转换于使用,C的编程等都是前期的基础课程.没有牢固的基础,到用的时候就显现出困难了.
把0xff认为是256,看上去是"小失误",其实看你所有的问题,感觉你处在一片混乱之中.BCD码的转换和应用,在数字逻辑课程中肯定学过,但你连这个关都过不了. 多谢马潮老师指点 我继续翻书 遇到网上的名师 是我最幸福的事情 我会尽我最大的努力减少低级问题的出现
页:
[1]