74HC138譯碼器
1. 介紹
在設計單片機電路的時候,單片機的IO口數量是有限的,有時并滿足不了我們的設計需求,因此為了控制更多的器件,就需要使用一些外圍的數字芯片進行引腳擴展,常用的是74HC138,也叫38譯碼器,

2. 作業原理
38譯碼器,從名字來分析就是把3種輸入狀態翻譯成8種輸出狀態,對于數字器件的引腳,如果一個引腳輸入的時候,有 0 和 1 兩種狀態;對于兩個引腳輸入的時候,就會有 00、01、10、11 這四種狀態了,那么對于 3 個輸入的時候,就會出現 8 種狀態了,真值表如下圖所示,

可以看出,左面三位相當于從0~8,右面則是8種輸出狀態,在任意輸入狀態時,只有一個輸出引腳是低電平,這一點需要注意,也可以通過連接反相器實作高電平輸出,
使用時,E2、E3接地,E1用來控制譯碼器的選通1為開啟,0為關閉,A、B、C分別對應A0、A1、A2,E1、A、B、C連接單片機的4個引腳,就可以實作共輸出狀態的控制,
Protues仿真實驗
1. 實驗目的
使用51單片機控制12個電機的選擇啟動
2. 實驗程序

- L298N作為步進電機的驅動
- CD4066作為步進電機的選通開關,控制端收到高電平則導通
- 74HC138譯碼器+74HC240反相器用于擴展引腳,將單片機的信號經翻譯后發送給給CD4066選擇電機
3. 實驗結果
電機按照預期要求以此選通啟動,

4. 代碼
#include<reg52.h>
sbit enable = P3^0;
sbit key = P3^1;
void delay(int i)
{
int j;
for(;i>0;i--)
for(j=114;j>0;j--);
}
void main()
{
unsigned char step[] = {0x01,0x02,0x04,0x08}; //順時針轉動
//unsigned char istep[] = {0x01,0x02,0x04,0x08}; //逆時針轉動
unsigned char table[] = {0x80,0x90,0xa0,0xb0,0xc0,0xd0,0xe0,0xf0,0x08,0x09,0x0a,0x0b};
int i=0,num=0;
enable=1;
P1=0x00;
while(1)
{
if(key == 0);
{
delay(10);
if(key == 0)
{
num++;
if(num>=12)
num=-1;
while(!key);
}
}
/*
if(num==-1)
{
P1=0x00;
P0=0x00;
}
else if(num<8)
P1=table1[num];
else
P0=table2[num-8];
*/
if(num==-1)
P1=0x00;
else
P1 = table[num];
for(i=0; i<4; i++)
{
P2 = step[i];
delay(500);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/245274.html
標籤:其他
上一篇:C語言一些實體
