2数码管动态显示程序设计

2数码管动态显示程序设计
2数码管动态显示程序设计

实验2 数码管动态显示程序设计

实验目的

1、理解数码管动态显示原理

2、理解数码管动态显示电路的设计方法

3、掌握数码管动态显示程序的设计方法

实验仪器

单片机开发试验仪、稳压电源、计算机

实验原理

1、数码管的驱动

数码管的显示是靠点亮内部的发光二极管来发光。数码管内部电路如下图所示,显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端。公共端又可分为共阳极和共阴极,中间图为共阴极内部原理图,右图为共阳极内部原理图。

上图展出了常用的两种数码管的引脚排列和内部结构。众所周知,点亮发光二极管就是要给予它足够大的正向压降。所以点亮数码管其实也就是给它内部相应的发光二极管正向压降。

对共阴极数码来说,其8个发光二极管的阴极在数码管内部全部连接在一起,所以称“共阴”,而它们的阳极是独立的,通常在设计电路时一般把阴极接地。当我们给数码管的任意一个阳极加一个高电平时,对应的这个发光二极管就点亮了。

共阳极数码管其内部8个发光二极管的所有阳极全部连接在一起,电路连接时,公共端接高电平,因此我们要点亮的那个发光管二极管就需要给阴极送低电平,此时显示数字的编

码与共阳极编码是相反的关系。

2、动态数码管驱动原理

首先我们来看一下开发板上的电路原理图:

本开发板上使用的是,通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有输出。

实验板连接图:

实验内容:数码管动态显示0~7

/****************************************************************************** * 实验名 : 动态数码管显示试验

* 实验说明 : 8位数码管显示0~7

* 连接方式 : 见连接图

******************************************************************************* #include

#define GPIO_DIG P0

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

//定义全局变量//

unsigned char code DIG_CODE[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

unsigned char DisplayData[8]; //用来存放要显示的8位数的值

//--声明全局函数--//

void DigDisplay(); //动态显示函数

/****************************************************************************** * 函数名 : main

* 函数功能 : 主函数

* 输入 : 无

* 输出 : 无

*****************************************************************************/ void main()

{

unsigned char i;

for(i=0;i<8;i++)

{

DisplayData[i]=DIG_CODE[i];

}

while(1)

{

DigDisplay();

}

}

/****************************************************************************** * 函数名 : DigDisplay

* 函数功能 : 使用数码管显示

* 输入 : 无

* 输出 : 无

**************************************************************************/ void DigDisplay()

{

unsigned char i;

unsigned int j;

for(i=0;i<8;i++)

{

switch(i) //位选,选择点亮的数码管,

{

case(0):

LSA=0;LSB=0;LSC=0; break;//显示第0位

case(1):

LSA=1;LSB=0;LSC=0; break;//显示第1位

case(2):

LSA=0;LSB=1;LSC=0; break;//显示第2位

case(3):

LSA=1;LSB=1;LSC=0; break;//显示第3位

case(4):

LSA=0;LSB=0;LSC=1; break;//显示第4位

case(5):

LSA=1;LSB=0;LSC=1; break;//显示第5位

case(6):

LSA=0;LSB=1;LSC=1; break;//显示第6位

case(7):

LSA=1;LSB=1;LSC=1; break;//显示第7位

}

GPIO_DIG=DisplayData[i];//发送段码

j=10; //扫描间隔时间设定

while(j--);

GPIO_DIG=0x00;//消隐

}

}

思考题:

1、根据程序画出流程图

2、如果不进行消隐处理会出现什么现象

相关文档
最新文档