使用74HC595結合數碼管顯示字符。
proteus仿真設計如下,74HC595的輸出端連接到動態數碼管的位選和靜態數碼管的段選,動態數碼管的段選連接到P0口。這兩個數碼管都是共陰極的。
靜態數碼管顯示字符0-F,軟件設計如下:
/*實現功能:74HC595芯片控制靜態數碼管顯示字符0-F[2023-12-11] zoya
*/
#include "reg52.h"
#include "intrins.h"
#include "HC595.h"// 共陰極數碼管編碼
u8 code smg[] = {0x3F, 0x06, 0x5B, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, // 0~9
0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00}; // a~f+不顯示// 延時函數,i=1時延時10us
void Delay(u16 i)
{while(i--);
}void main()
{u8 i;while(1){for(i=0;i<17;i++){HC595SendByte(smg[i]); // 發送段選數據Delay(50000);}}
}
HC595SendByte
函數參考前面的文章“【51單片機系列】74HC595擴展實驗之使用74HC595芯片在LED點陣中顯示數字”。
仿真結果:
動態數碼管顯示0-7,軟件代碼如下:
/*實現功能:74HC595芯片控制動態數碼管顯示0-7[2023-12-11] zoya
*/
#include "reg52.h"
#include "intrins.h"
#include "HC595.h"#define GPIO_LED P0// 共陰極數碼管編碼
u8 code smg[] = {0x3F, 0x06, 0x5B, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, // 0~9
0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00}; // a~f+不顯示u8 duan = 0xfe;
// 延時函數,i=1時延時10us
void Delay(u16 i)
{while(i--);
}// 數碼管顯示函數
void digDisplay()
{u8 i;for(i=0;i<8;i++){HC595SendByte(duan);GPIO_LED = smg[i];Delay(150);duan = _crol_(duan,1);GPIO_LED = 0x00;}
}void main()
{while(1){digDisplay();}
}
仿真結果:
顯示動態數碼管時嘗試使用多個延時時間,均不能達到38譯碼器穩定顯示0-7的效果,這也是一個bug,希望日后了解更多可以解決。