1. 程式人生 > >動態數碼管——小白的單片機筆記

動態數碼管——小白的單片機筆記

存儲 value *** 通訊 mqc com har sign logs

138譯碼器控制LED數碼管使能 138譯碼器的ABC接口接線:

A=P2^2;
B=P2^3;
C=P2^4;

74H245與P0口通訊控制數碼管顯示內容。

技術分享

*******************************************************************

教程視頻的控制內容:

是數碼管自右向左依次顯示01234567

程序如下:

#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;

sbit YMQA=P2^2;
sbit YMQB=P2^3;
sbit YMQC=P2^4;   //定義138譯碼器接口與單片機接口
u8 code smgd[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71}; //利用數組來存儲數碼管碼表

//延時函數

void delay(u16 i)
{
while(i--);

}

//循環掃描顯示函數
void digDisplay()
{
u8 i;
  for(i=0;i<8;i++)
{
  switch(i)
    {case(0): YMQA=0;YMQB=0;YMQC=0;break;
    case(1): YMQA=1;YMQB=0;YMQC=0;break;
    case(2): YMQA=0;YMQB=1;YMQC=0;break;
    case(3): YMQA=1;YMQB=1;YMQC=0;break;
    case(4): YMQA=0;YMQB=0;YMQC=1;break;
    case(5): YMQA=1;YMQB=0;YMQC=1;break;
    case(6): YMQA=0;YMQB=1;YMQC=1;break;
    case(7): YMQA=1;YMQB=1;YMQC=1;break;
    }
    P0=smgd[i];
  delay(200);//此處必須加延時,保證人眼能識別亮度同時延時不能太長,產生段落感(此程序意在快速循環掃描,讓人產生八個數碼管同時顯示的錯覺)
  P0=0x00;
}

}


void main()
{

while(1)
{

digDisplay();


}
}

***************************************

以下為個人改變可以控制某個數碼管循環顯示0——F

#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
u8 code smgd[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00
} ;
sbit ymqA=P2^2;
sbit ymqB=P2^3;
sbit ymqC=P2^4;
void delay(u16 i)
{
while(i--);

}

void display(u8 value,u8 No) //顯示函數控制第No個數碼管,顯示value。
{
switch(No)
{
case 1:ymqA=0;ymqB=0;ymqC=0;break;
case 2:ymqA=1;ymqB=0;ymqC=0;break;
case 3:ymqA=0;ymqB=1;ymqC=0;break;
case 4:ymqA=1;ymqB=1;ymqC=0;break;
case 5:ymqA=0;ymqB=0;ymqC=1;break;
case 6:ymqA=1;ymqB=0;ymqC=1;break;
case 7:ymqA=0;ymqB=1;ymqC=1;break;
case 8:ymqA=1;ymqB=1;ymqC=1;break;
}
P0=smgd[value];
delay(100);//加入延時
}

void main()
{
u8 i=0;
for(i=0;i<16;i++)
{
display(i,5);
delay(50000);
}

}

動態數碼管——小白的單片機筆記