根據(jù)項目需求可以用I/O外部上拉,用來驅(qū)動數(shù)碼管;也可以74HC138(38譯碼器)+74HC245(8路信號收發(fā)器)驅(qū)動數(shù)碼管。本文會以后者為數(shù)碼管驅(qū)動電路,在代碼上實現(xiàn)數(shù)碼管的顯示。
驅(qū)動電路:
電路講解:
1)數(shù)碼管元件采用共陰數(shù)碼管,如果需要某位數(shù)碼管被點亮,位選引腳需要被拉成電平;
2)八個數(shù)碼管有8個位選引腳,8個段選引腳。為了將節(jié)省I/O口,使用74HC138將3位(CBA)選擇,轉(zhuǎn)換為8位二值代碼,例如CBA值為000時,Y0輸出低電平,其余為高電平,由于Y0連接到數(shù)碼1位選引腳(圖中的LED1網(wǎng)絡標號),數(shù)碼管1被選中。
3)74HC138控制的是位選引腳,而74HC245控制的是段選引腳,增強驅(qū)動能力。電路原理圖中將DIR接高電平,OE接GND,使得其工作狀態(tài)為An輸入Bn輸出。當P0輸出0x00時,Bn端也會輸出0x00;
代碼實現(xiàn):
1)數(shù)碼管顯示數(shù)值,有對應的編碼(編碼對應段選被點亮或不亮);
2)數(shù)碼管編碼按照一定的關系(一般為順序0~F),存儲在一維數(shù)組里面;
3)74HC245收發(fā)器,主要用來驅(qū)動數(shù)碼管,根據(jù)數(shù)碼管顯示可以看做P0數(shù)據(jù)直接到達數(shù)碼管;
4)調(diào)用一維數(shù)的元素,將編碼值通過I/O口輸出,控制段選信號,顯示對應數(shù)值;
5)數(shù)字選擇數(shù)碼管,數(shù)字轉(zhuǎn)換為38譯碼器的3路輸入信號,選中某個數(shù)碼管顯示。
實現(xiàn)數(shù)碼管顯示函數(shù):
void showsmg(uchar selsmg,uchar num){
//選擇顯示數(shù)碼管第幾個,拆解為38譯碼器對應編碼
smg0 = selsmg&0x01;
smg1 = (bit)((selsmg >>1)&0x01);
smg2 = (bit)((selsmg >>2)&0x01);
//將數(shù)碼管編碼(一維數(shù)組)賦值給P0口,顯示對用數(shù)字
P0 = table[num];
}
具體顯示代碼:
功能:8個(7~0)數(shù)碼管,從高到底顯示7~0;
/********************************************************************************
* @File name: main.c
* @Author: AdamChen
* @Version: 1.1
* @Date: 2020-08-07
* @Description: LED display
* @contact:[email protected]
********************************************************************************/
#include "reg52.h"
typedef unsigned char uchar;
typedef unsigned int uint;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x80};
sbit smg2 = P2^4;
sbit smg1 = P2^3;
sbit smg0 = P2^2;
/*******************************************************
* Function name :delay
* Description : 延時函數(shù)
* Parameter :
@ms millisecond(毫秒)
* Return :None
**********************************************************/
void delay(unsigned int ms) // ms代表需要延時的毫秒數(shù)
{
uint x,y;
for(x=ms;x >0;x--)
for(y=110;y >0;y--);
}
/*******************************************************
*
* Function name :showsmg
* Description : 數(shù)碼管顯示
* Parameter :
@selsmg 選擇數(shù)碼管第幾個
@num 顯示數(shù)值
*
* Return :None
**********************************************************/
void showsmg(uchar selsmg,uchar num){
//選擇顯示數(shù)碼管第幾個,拆解為38譯碼器對應編碼
smg0 = selsmg&0x01;
smg1 = (bit)((selsmg >>1)&0x01);
smg2 = (bit)((selsmg >>2)&0x01);
//將數(shù)碼管編碼(一維數(shù)組)賦值給P0口,顯示對用數(shù)字
P0 = table[num];
}
/*******************************************************
*
* Function name :main
* Description : 8數(shù)碼管,從高到低顯示7到0。
* Parameter :None
* Return :None
**********************************************************/
void main(){
uchar i;
while(1){
//循環(huán)選中,8個數(shù)碼管,顯示7~0
for(i=0;i< 8;i++)
{
showsmg(i,i);
delay(1);
}
}
}
-
收發(fā)器
+關注
關注
10文章
3559瀏覽量
107121 -
數(shù)碼管
+關注
關注
32文章
1888瀏覽量
92111 -
譯碼器
+關注
關注
4文章
312瀏覽量
50877 -
驅(qū)動電路
+關注
關注
155文章
1571瀏覽量
109453 -
引腳
+關注
關注
16文章
1495瀏覽量
52061
發(fā)布評論請先 登錄
數(shù)碼管驅(qū)動芯片的使用方法
數(shù)碼管驅(qū)動電路分享
大尺寸數(shù)碼管的動態(tài)驅(qū)動和保護電路設計

點亮數(shù)碼管電路

數(shù)碼管驅(qū)動電路的作用、分類及驅(qū)動電路設計

實現(xiàn)動態(tài)顯示效果,分析數(shù)碼管驅(qū)動電路的作用及分類

評論