動態數碼管——小白的單片機筆記
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);
}
}
動態數碼管——小白的單片機筆記