找回密码
 立即注册
首页 业界区 安全 定时器与数码管之数码管

定时器与数码管之数码管

晁红叶 昨天 19:14
数码管的基本介绍

1.png

数码管共有 a、b、c、d、e、f、g、dp 八段,每一段都是一个LED灯,所以一个数码管是由8个LED灯组成的
2.png

数码管分为共阳极和共阴极两种。
共阴极就是8个LED灯的阴极连接在一起,阴极是公共端,由阳极来控制单个小灯的亮灭
共阳极就是8个LED灯的阳极连接在一起,阳极是公共端,由阴极来控制单个小灯的亮灭
3.png

以上是板子的数码管电路图
板子上的数码管都是共阳极数码管,数码管的阳极都接在了com端上
数码管的真值表

以DS6数码管为例分析:
控制DS6的是三极管Q7,需要LEDS5为低电平,三极管Q7才可以道通
4.png

ENLED为低电平,ADDR3为高电平,74HC138才能使能
ADDR2为高电平,ADDR1为低电平,ADDR0为高电平时,LEDS5为低电平,此时Q7导通
 
b、c段LED亮灯时,数码管将显示1,即P0 = 0xF9时,数码管显示1
  1. #include<reg52.h>
  2. sbit ADDR0 = P1 ^ 0;
  3. sbit ADDR1 = P1 ^ 1;
  4. sbit ADDR2 = P1 ^ 2;
  5. sbit ADDR3 = P1 ^ 3;
  6. sbit ENLED = P1 ^ 4;
  7. void main(void)
  8. {
  9.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0xF9;//数码管b、c段亮,即显示1
  17.         while(1)
  18.                 ;
  19. }
复制代码
按此方法依次得出数码管的真值表:
数码管真值表1字符01234567数值0xC00xF90xA40xB00x990x920x820xF8数码管真值表2字符89AbCdEF数值0x800x900x880x830xC60xA10x860x8E数码管的静态显示

数码管的静态显示:74HC138同一时刻只能让一个输出口为低电平,也就是说在一个时刻内,只能使能一个数码管,并根据给出的P0的值来改变这个数码管的显示字符
数码管的静态显示是对应动态显示而言的,静态显示对于一两个数码管还行,对于多个数码管,静态显示就没有意义了
code:51单片机的关键字

unsigned char 定义的变量放在单片机的ARM中,在程序中可以随意改变这些变量的值
在程序中要使用,却不会改变值,定义这种数据时可以加上一个code关键字修饰一下,这个数据就会存储到程序空间Flash中,这样子就可以大大减少单片机的RAM的使用量
 
  1. #include<reg52.h>
  2. sbit ADDR0 = P1 ^ 0;
  3. sbit ADDR1 = P1 ^ 1;
  4. sbit ADDR2 = P1 ^ 2;
  5. sbit ADDR3 = P1 ^ 3;
  6. sbit ENLED = P1 ^ 4;
  7. unsigned char code LedChar[16] =
  8. { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
  9.   0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
  10. };
  11. void main(void)
  12. {
  13.         unsigned cnt;//溢出次数
  14.         int i;
  15.         //74HC138使能
  16.         ENLED = 0;
  17.         ADDR0 = 1;
  18.         //Q7导通
  19.         ADDR2 = 1;
  20.         ADDR1 = 0;
  21.         ADDR0 = 1;
  22.         TMOD = 1;//To设置为模式0
  23.         //设置T0初始值
  24.         TH0 = 0xB4;
  25.         TL0 = 0x00;
  26.         TR0 = 1;//启动T0
  27.     cnt = 0;
  28.         i = 0;
  29.         while(1)
  30.         {
  31.                 if (1 == TF0)//溢出
  32.                 {
  33.                         //设置T0初始值
  34.                         TF0 = 0;
  35.                         TH0 = 0xB4;
  36.                         TL0 = 0x00;
  37.                         cnt++;
  38.                         //溢出1s
  39.                         if (cnt >= 20)
  40.                         {
  41.                                 cnt = 0;
  42.                                 if (16 == i)
  43.                                         i = 0;
  44.                                 P0 = LedChar[i];
  45.                                 i++;
  46.                         }
  47.                 }
  48.         }
  49. }
复制代码
数码管将从0显示到F,间隔1s,重复显示

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册