找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 46282|回复: 0
收起左侧

单片机数码管动态显示程序设计实验

[复制链接]
ID:180782 发表于 2018-5-28 19:22 | 显示全部楼层 |阅读模式

数码管动态显示程序设计

1、数码管的驱动

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

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

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

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

2、动态数码管驱动原理

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

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

实验板连接图:



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

/******************************************************************************

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

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

* 连接方式       : 见连接图

*******************************************************************************

  1. <font color="rgb(0, 0, 0)"><font face="Calibri"><font style="font-size: 14px">#include<reg52.h>

  2. #define GPIO_DIG P0

  3. sbit LSA=P2^2;

  4. sbit LSB=P2^3;

  5. sbit LSC=P2^4;



  6. //定义全局变量//

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

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

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

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



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

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

  13. /******************************************************************************* 函 数 名         : main

  14. * 函数功能                               : 主函数

  15. * 输    入         : 无

  16. * 输    出         : 无

  17. *****************************************************************************/

  18. void main()

  19. {

  20.               unsigned char i;

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

  22.               {

  23.                             DisplayData[i]=DIG_CODE[i];            

  24.               }

  25.               while(1)

  26.               {

  27.                             DigDisplay();

  28.               }                                                      

  29. }

  30. /******************************************************************************* 函 数 名         : DigDisplay

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

  32. * 输    入         : 无

  33. * 输    出         : 无

  34. **************************************************************************/

  35. void DigDisplay()

  36. {

  37.               unsigned char i;

  38.               unsigned int j;

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

  40.               {

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

  42.                             {

  43.                                           case(0):

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

  45.                                           case(1):

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

  47.                                           case(2):

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

  49.                                           case(3):

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

  51.                                           case(4):

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

  53.                                           case(5):

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

  55.                                           case(6):

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

  57.                                           case(7):

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

  59.                             }

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

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

  62.                             while(j--);            

  63.                             GPIO_DIG=0x00;//消隐

  64.               }

  65. }</font></font></font>
复制代码


完整的Word格式文档51黑下载地址:

2数码管动态显示程序设计.docx (459.79 KB, 下载次数: 65)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表