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);
}
}