目錄
前言
1. BCD碼
2. BCD碼和十進制轉(zhuǎn)換的算法
前言
? ? ? ? 最近在學(xué)習(xí)STM32單片機(不僅僅是32)的RTC實時時鐘系統(tǒng)的過程中,需要配置時鐘的時間、日期;這些都需要實現(xiàn)BCD碼和十進制之間進行轉(zhuǎn)換。這里和大家一起學(xué)習(xí)BCD碼和十進制之間轉(zhuǎn)換的代碼;
1. BCD碼
????????BCD碼是指用二進制數(shù)來表示十進制的數(shù);也就是說4位二進制數(shù)來表示一位十進制數(shù),因此二進制可以表示的最大十進制數(shù)為9(1001)。
????????因為二進制數(shù)能表示的最大十進制數(shù)才是9,所以當數(shù)字大于9時,也就是數(shù)字為兩位數(shù)時,我們需要用8位BCD碼來表示;4位的BCD碼只能表示9以下的數(shù)字;遵循逢九進一的原則;
????????我們都知道:二進制是逢二進一,十進制是逢十進一,十六進制是逢十六進一,它們之間每次都差6,所以一個十進制想要轉(zhuǎn)換成BCD碼,必須先要算清楚進了幾次位;
當兩個十進制數(shù)相加:
但是如果相加最終的值位于10-15之間,也就是十六進制數(shù)的A-F之間,則需要加6進行修正;如果相加的值位于20-25之間,則需要修正2次,也就是加上2*6=12;就是這個道理;(每出現(xiàn)一次十六進制溢出9,就修正一次,溢出多少次,修正多少次)
多次修正的情況:比方說十進制下的66,66/10=6次,也就是說修正了6次,這里修正次數(shù)的意思是,出現(xiàn)一次十六進制下溢出9,就修正一次,(溢出第一次來到10-15,溢出第二次來到20-25,依次類推,總共溢出了6次,就是這個道理),所以需要加上6*6=36,所以最終的BCD碼為66+36=102;
BCD碼轉(zhuǎn)十進制是一個道理:
2. BCD碼和十進制轉(zhuǎn)換的算法
十進制轉(zhuǎn)換成BCD碼,代碼如下
//dec:十進制數(shù) bcd:BCD碼
int dec_bcd(int dec)
{
return(dec+(dec/10)*6);
}
BCD碼轉(zhuǎn)換成十進制,代碼如下文章來源:http://www.zghlxwxcb.cn/news/detail-435144.html
//dec:十進制數(shù) bcd:BCD碼
int bcd_dec(int bcd)
{
return(bcd-(bcd>>4)*6);
//該返回的意思是說:比如BCD碼為10011,右移四位,空位補0會得到0001,
//該值表示修正的次數(shù),之所以這樣,是因為四位的二進制表示不來大于9的十進制
//所以才會引入8位BCD碼,如果將8位BCD的高4位移回到低四位的位置,就會得到減去1111之后的數(shù),該數(shù)就是修正的次數(shù)
}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??文章來源地址http://www.zghlxwxcb.cn/news/detail-435144.html
到了這里,關(guān)于STM32F4_十進制和BCD碼的轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!