單片機(jī)STC89C52學(xué)習(xí)——11 動(dòng)態(tài)數(shù)碼管
匯總:00 單片機(jī)STC89C52學(xué)習(xí)
參考教程:普中科技
1 工作原理
1.1 數(shù)碼管動(dòng)態(tài)顯示原理
動(dòng)態(tài)顯示的特點(diǎn)是將所有數(shù)碼管的段選線并聯(lián)在一起,由位選線控制哪一位數(shù)碼管有效。選亮數(shù)碼管采用動(dòng)態(tài)掃描顯示。所謂動(dòng)態(tài)掃描顯示即輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數(shù)碼管同時(shí)都在顯示。動(dòng)態(tài)顯示的亮度比靜態(tài)顯示要差一些,所以在選擇限流電阻時(shí)應(yīng)略小于靜態(tài)顯示電路中的。
1.2 74HC138芯片
三通道輸入、八通道輸出譯碼器

原理圖

管腳說明
2 程序:動(dòng)態(tài)數(shù)碼管——依次顯示76543210
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
u8 code LEDSeg[] = {0x3f , 0x06 , 0x5b , 0x4f ,
0x66 , 0x6d , 0x7d , 0x07 ,
0x7f , 0x6f , 0x77 , 0x7c ,
0x39 , 0x5e , 0x79 , 0x71};
void delay(u16 j)
{
while(j --);
}
void DigiDisplay()
{
u8 i;
for (i = 0; i < 8; i ++)
{
switch(i)
{
case 0:
LSA = 0; LSB = 0; LSC = 0;
break;
case 1:
LSA = 0; LSB = 0; LSC = 1;
break;
case 2:
LSA = 0; LSB = 1; LSC = 0;
break;
case 3:
LSA = 0; LSB = 1; LSC = 1;
break;
case 4:
LSA = 1; LSB = 0; LSC = 0;
break;
case 5:
LSA = 1; LSB = 0; LSC = 1;
break;
case 6:
LSA = 1; LSB = 1; LSC = 0;
break;
case 7:
LSA = 1; LSB = 1; LSC = 1;
break;
}
P0 = LEDSeg[i];
delay(100);// 約1ms
P0 = 0x00;// 消隱,防止重影
}
}
void main()
{
while (1)
{
DigiDisplay();
}
}
效果:同上一次,經(jīng)測試位選沒問題,段選總是顯示"8."即0xff,暫未找到原因。這次表現(xiàn)出全是“8.”。結(jié)果第二天同樣的程序成功了,但是不穩(wěn)定...