首页 > 代码库 > 动态数码管——小白的单片机笔记

动态数码管——小白的单片机笔记

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

}

 

动态数码管——小白的单片机笔记