数码管动态显示程序设计 1、数码管的驱动 数码管的显示是靠点亮内部的发光二极管来发光。数码管内部电路如下图所示,显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端。公共端又可分为共阳极和共阴极,中间图为共阴极内部原理图,右图为共阳极内部原理图。 上图展出了常用的两种数码管的引脚排列和内部结构。众所周知,点亮发光二极管就是要给予它足够大的正向压降。所以点亮数码管其实也就是给它内部相应的发光二极管正向压降。 对共阴极数码来说,其8个发光二极管的阴极在数码管内部全部连接在一起,所以称“共阴”,而它们的阳极是独立的,通常在设计电路时一般把阴极接地。当我们给数码管的任意一个阳极加一个高电平时,对应的这个发光二极管就点亮了。 共阳极数码管其内部8个发光二极管的所有阳极全部连接在一起,电路连接时,公共端接高电平,因此我们要点亮的那个发光管二极管就需要给阴极送低电平,此时显示数字的编码与共阳极编码是相反的关系。 2、动态数码管驱动原理 首先我们来看一下开发板上的电路原理图: 本开发板上使用的是,通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有输出。 实验板连接图:
实验内容:数码管动态显示0~7 /****************************************************************************** * 实 验 名 : 动态数码管显示试验 * 实验说明 : 8位数码管显示0~7 * 连接方式 : 见连接图 ******************************************************************************* - <font color="rgb(0, 0, 0)"><font face="Calibri"><font style="font-size: 14px">#include<reg52.h>
- #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;//消隐
- }
- }</font></font></font>
复制代码
完整的Word格式文档51黑下载地址:
2数码管动态显示程序设计.docx
(459.79 KB, 下载次数: 65)
|