2进制10进制40BCD码41数码转换器设计Word格式文档下载.docx
《2进制10进制40BCD码41数码转换器设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《2进制10进制40BCD码41数码转换器设计Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
百位
十位
个位
开始
1111
转换1
1
111
转换2
11
转换3
加3
1010
转换4
0101
1000
转换5
0001
转换6
110
0011
1001
转换7
0010
0111
转换8
10
BCD
2
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
casedinis
when"
00000000"
=>
bcd<
="
000000000000"
。
00000001"
000000000001"
00000010"
000000000010"
00000011"
000000000011"
00000100"
000000000100"
00000101"
000000000101"
00000110"
000000000110"
00000111"
000000000111"
when"
00001000"
000000001000"
00001001"
000000001001"
when"
00001010"
000000010000"
.
01100011"
000010011001"
01100100"
000100000000"
11111000"
001001001000"
11111001"
001001001001"
11111010"
001001010000"
11111011"
001001010001"
11111100"
001001010010"
11111101"
001001010011"
11111110"
001001010100"
11111111"
001001010101"
whenothers=>
=null。
——此都为把二进制翻译为BCD码.
endcase。
endprocess。
endarchitecturefun。
3.2对十进制数分位
原理图如图3-2所示:
图3-2对十进制数分位原理图
entitybcdis
instd_logic_vector(11downto0)。
y0,y1,y2:
outstd_logic_vector(3downto0)
endbcd。
architecturefunofbcdis
begin
y0<
0000"
y1<
y2<
0001"
0010"
0011"
0100"
0101"
0110"
0111"
1000"
1001"
0000
001001000110"
001001000111"
——以上程序都为把输出地BCD码地个、十、百位分别存入y0、y1、y2中.
endcase。
endprocess。
endarchitecturefun
3.3分别输出十进制数
原理图如图3-3所示:
图3-3对三位分位输出原理图
useieeestd_logic_unsigned.all。
useieeestd_logic_arith.all。
entityseltimeis
port(
clk2:
std_logic。
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)
ifclk2'
eventandclk2='
1'
)then
if(count>
010"
count<
000"
else
=count+1。
endif。
casecountis
daout<
=y0。
001"
=y1。
=y2。
whenothers=>
endcase