38译码器数码管c语言代码,38译码器驱动数码管电路图
使用38譯碼器來驅動數碼管來節省IO端口
(1)什么是38譯碼器?
38譯碼器有3個輸入端口A、B、C和8個輸出端口Y0-Y7。由輸入端口控制輸出端口的值
(2)為什么要使用38譯碼器
回想之前的驅動動態數碼管的時候,一個段碼端口控制顯示的數字,一個com端口控制哪個數碼管工作,段碼端口接8個IO引腳,com端口接8個IO引腳。這樣很浪費IO口資源,為了節省IO資源,使用38譯碼器接在com口,這樣可以使用3個輸入引腳控制8個com端口了。J15接到J16端口。
(3)為什么3個輸入端可以控制8個輸出端口值?
3個輸入端口,每一個端口有兩種狀態(0或1),3個端口可以組成8中不同的狀態。
(4)3個輸入端口如何控制8個輸出端口?
根據74LS138芯片的數據手冊查詢38譯碼器芯片的譯碼表即可。
分析數據手冊可以得到:
(1)G1、G2*兩個端口是使能引腳,并且要想讓38譯碼器工作,G1接高電平,G2*接低電平。所以看上面38譯碼器的原理圖中G1接VCC,G2*接GND。
(2)當ABC三個輸入端口輸入不同的值時,Y0-Y7會對應的輸出低電平,回想動態數碼管是共陰數碼管,而38譯碼器Y0-Y7默認輸出高電平,這樣銜接的天衣無縫。
實驗分析:
第一步:八個數碼管陽極接一個IO端口,來負責輸出顯示的數字(也就是輸出對應的段碼)。
第二步:八個數碼管的com端分別接入38譯碼器的Y0-Y7引腳。由38譯碼器的ABC三個輸入端來控制數碼管的com端口從而達到控制哪個數碼管工作的目的。
第三步:根據原理圖接線,J15-J16、ABC分別接P1.0、P1.1、P1.2
第四步:測出數碼管的段碼和38譯碼器的譯碼表。
第五步:編程。
實驗代碼:
#include
void delay(void)
{
unsigned char i=0,j=0;
for(i=0;i<100;i++);
for(j=0;j<20;j++);
}
void main(void)
{
/*? P0.0接到 A,P0.1接到B,P0.2接到C
P0端口是段碼口,控制要顯示的數字
P1端口是38譯碼器的端口,通過com端控制第幾個數碼管工作
*/
/*? 測試38譯碼器的位碼
c b a
000???? Y0輸出低電平 第1個數碼管工作??????? 對應十六進制數0x1
001???? Y1輸出低電平 第2個數碼管工作??????? 對應十六進制數0x2
010???? Y2輸出低電平 第3個數碼管工作??????? 對應十六進制數0x3
011???? Y3輸出低電平 第4個數碼管工作??????? 對應十六進制數0x4
100???? Y4輸出低電平 第5個數碼管工作??????? 對應十六進制數0x5
101???? Y5輸出低電平 第6個數碼管工作??????? 對應十六進制數0x6
110???? Y6輸出低電平 第7個數碼管工作??????? 對應十六進制數0x7
111???? Y7輸出低電平 第8個數碼管工作??????? 對應十六進制數0x8
*/
unsigned char duanma[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
//段碼
unsigned char weima[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7};????????????????? //38譯碼器的位碼
unsigned char i=0;
while(1)
{
for(i=0;i<=7;i++)
{
P1=weima[i];??? //38譯碼器的位碼
P0=duanma[i];?? //八個數碼管的段碼
delay();
P0=0;?????? //消隱
}
}
}
實驗總結:
(1)使用38譯碼器就是為了節省IO口,如果IO口夠用可以不使用38譯碼器。
(2)動態數碼管的陽極接在P0這個IO端口上,控制數碼管顯示的數字,陰極接在38譯碼器的八個輸出引腳上Y0-Y7,Y0-Y7由38譯碼器的ABC三個輸入引腳控制??刂颇膫€數碼管工作。
(3)測試數碼管的段碼和38譯碼器的位碼。
(4)先分析原理圖看如何接線,再看38譯碼器的數據手冊看它怎么工作。最后編程。
(5)著重實驗分析過程,而非知識本身,多總結學習方法。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的38译码器数码管c语言代码,38译码器驱动数码管电路图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dapper的基本使用
- 下一篇: 手环升级鸿蒙设备名单,鸿蒙2.0升级名单