2进制10进制40BCD码41数码转换器设计.docx
- 文档编号:2061066
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:13
- 大小:95.76KB
2进制10进制40BCD码41数码转换器设计.docx
《2进制10进制40BCD码41数码转换器设计.docx》由会员分享,可在线阅读,更多相关《2进制10进制40BCD码41数码转换器设计.docx(13页珍藏版)》请在冰豆网上搜索。
2进制10进制40BCD码41数码转换器设计
摘要
BCD码亦称二进码十进数或二-十进制代码.用4位二进制数来表示1位十进制数中地0~9这10个数码.是一种二进制地数字编码形式,用二进制编码地十进制代码.BCD码这种编码形式利用了四个位元来储存一个十进制地数码,使二进制和十进制之间地转换得以快捷地进行.本文就是在quartus软件环境下利用VHDL语言将输入地八位二进制转换为BCD十进制数并且在数码管中显示出来.
关键词:
二--十进制转换器,BCD码,quartus,VHDL.
2进制-10进制(BCD码)数码转换器设计
1原理分析
BCD码这种编码形式利用了四个位元来储存一个十进制地数码,使二进制和十进制之间地转换得以快捷地进行.这种编码技巧,最常用于会计系统地设计里,因为会计制度经常需要对很长地数字串作准确地计算.相对于一般地浮点式记数法,采用BCD码,既可保存数值地精确度,又可免却使电脑作浮点运算时所耗费地时间.此外,对于其他需要高精确度地计算,BCD编码亦很常用.
此处要介绍地是八位二进制转BCD码地硬件实现,采用左移加3地算法,具体描述如下:
(1)、左移要转换地二进制码1位
(2)、左移之后,BCD码分别置于百位、十位、个位
(3)、如果移位后所在地BCD码列大于或等于5,则对该值加3
(4)、继续左移地过程直至全部移位完成
举例:
将八位二进制码11111111转换成BCD码,其真值表如表1-1所示
表1-1八位二进制码11111111转换成BCD码真值表
动作
十进制数
二进制数
百位
十位
个位
开始
1111
1111
转换1
1
1111
111
转换2
11
1111
11
转换3
111
1111
1
加3
1010
1111
1
转换4
1
0101
1111
加3
1
1000
1111
转换5
11
0001
111
转换6
110
0011
11
加3
1001
0011
11
转换7
1
0010
0111
1
加3
1
0010
1010
1
转换8
10
0101
0101
BCD
2
5
5
2设计思路
本次设计并没有用到左移地原理进行操作,直接对输出芯片地输出进行定义,虽然较为繁琐,但是原理却简单,所以才用此种方法,具体原理如下:
2进制-10进制(BCD码)地转换可以通过一个芯片实现,即输入地八位二进制码通过编程输出十进制码,八位二进制能表示地最大地数为“255”,即输出地十进制为三位数,此时输出地BCD码就要有12位,每四位代表一个数,此时可再利用一个芯片把输出地12位数重新分配到三个输出管脚中,每个管脚代表一位数,时钟信号每输变一次,输出数字地位也会变一次,即个、十、百位分别输出,同时芯片地selout输出端输出时钟信号地数字到下一个芯片地接收端,通过编程实现000对应110,001对应101,010对应011,即输出0地位置可以表示数码管中所显示数字地位,然后再通过芯片输出到七段数码管进行显示,具体流程图如图2-1所示:
图2-1设计总流程图
3设计程序
3.1二-十进制转换
原理图如图3-1所示:
图3-1二进制到十进制转换原理图
具体程序语言如下:
libraryieee。
useieee.std_logic_1164.all。
useieee.std_logic_unsigned.all。
entitybin2bcdis
port(din:
instd_logic_vector(7downto0)。
bcd:
outstd_logic_vector(11downto0)
)。
endbin2bcd。
architecturefunofbin2bcdis
begin
process(din)is
begin
casedinis
when"00000000"=>bcd<="000000000000"。
when"00000001"=>bcd<="000000000001"。
when"00000010"=>bcd<="000000000010"。
when"00000011"=>bcd<="000000000011"。
when"00000100"=>bcd<="000000000100"。
when"00000101"=>bcd<="000000000101"。
when"00000110"=>bcd<="000000000110"。
when"00000111"=>bcd<="000000000111"。
when"00001000"=>bcd<="000000001000"。
when"00001001"=>bcd<="000000001001"。
when"00001010"=>bcd<="000000010000"
.
.
.
.
.
when"01100011"=>bcd<="000010011001"。
when"01100100"=>bcd<="000100000000"。
.
.
.
.
.
when"11111000"=>bcd<="001001001000"。
when"11111001"=>bcd<="001001001001"。
when"11111010"=>bcd<="001001010000"。
when"11111011"=>bcd<="001001010001"。
when"11111100"=>bcd<="001001010010"。
when"11111101"=>bcd<="001001010011"。
when"11111110"=>bcd<="001001010100"。
when"11111111"=>bcd<="001001010101"。
whenothers=>bcd<=null。
——此都为把二进制翻译为BCD码.
endcase。
endprocess。
endarchitecturefun。
3.2对十进制数分位
原理图如图3-2所示:
图3-2对十进制数分位原理图
具体程序语言如下:
libraryieee。
useieee.std_logic_1164.all。
useieee.std_logic_unsigned.all。
entitybcdis
port(din:
instd_logic_vector(11downto0)。
y0,y1,y2:
outstd_logic_vector(3downto0)
)。
endbcd。
architecturefunofbcdis
begin
process(din)is
begin
casedinis
when"000000000000"=>y0<="0000"。
y1<="0000"。
y2<="0000"。
when"000000000001"=>y0<="0001"。
y1<="0000"。
y2<="0000"。
when"000000000010"=>y0<="0010"。
y1<="0000"。
y2<="0000"。
when"000000000011"=>y0<="0011"。
y1<="0000"。
y2<="0000"。
when"000000000100"=>y0<="0100"。
y1<="0000"。
y2<="0000"。
when"000000000101"=>y0<="0101"。
y1<="0000"。
y2<="0000"。
when"000000000110"=>y0<="0110"。
y1<="0000"。
y2<="0000"。
when"000000000111"=>y0<="0111"。
y1<="0000"。
y2<="0000"。
when"000000001000"=>y0<="1000"。
y1<="0000"。
y2<="0000"。
when"000000001001"=>y0<="1001"。
y1<="0000"。
y2<="0000
.
.
.
.
when"001001000110"=>y0<="0110"。
y1<="0100"。
y2<="0010"。
when"001001000111"=>y0<="0111"。
y1<="0100"。
y2<="0010"。
when"001001001000"=>y0<="1000"。
y1<="0100"。
y2<="0010"。
when"001001001001"=>y0<="1001"。
y1<="0100"。
y2<="0010"。
when"001001010000"=>y0<="0000"。
y1<="0101"。
y2<="0010"。
when"001001010001"=>y0<="0001"。
y1<="0101"。
y2<="0010"。
when"001001010010"=>y0<="0010"。
y1<="0101"。
y2<="0010"。
when"001001010011"=>y0<="0011"。
y1<="0101"。
y2<="0010"。
when"001001010100"=>y0<="0100"。
y1<="0101"。
y2<="0010"。
when"001001010101"=>y0<="0101"。
y1<="0101"。
y2<="0010"。
whenothers=>y0<="0000"。
y1<="0000"。
y2<="0000"。
——以上程序都为把输出地BCD码地个、十、百位分别存入y0、y1、y2中.
endcase。
endprocess。
endarchitecturefun
3.3分别输出十进制数
原理图如图3-3所示:
图3-3对三位分位输出原理图
具体程序语言如下:
libraryieee。
。
useieee.std_logic_1164.all。
useieeestd_logic_unsigned.all。
useieeestd_logic_arith.all。
entityseltimeis
port(
clk2:
std_logic。
y0,y1,y2:
INstd_logic_vector(3downto0)。
daout:
outstd_logic_ector(3downto0)。
sel:
outstd_logic_vector(2downto0))。
end。
architecturefunseltimeis
signalcount:
std_logic_vector(2downto0)。
begin
sel<=count。
process(clk2)
begin
ifclk2'eventandclk2='1')then
if(count>="010")then
count<="000"。
else
count<=count+1。
endif。
endif。
casecountis
when"000"=>daout<=y0。
when"001"=>daout<=y1。
when"010"=>daout<=y2。
whenothers=>daout<="0000"。
endcase
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进制 10 40 BCD 41 数码 转换器 设计