定时器与数码管之数码管
数码管的基本介绍
数码管共有 a、b、c、d、e、f、g、dp 八段,每一段都是一个LED灯,所以一个数码管是由8个LED灯组成的
数码管分为共阳极和共阴极两种。
共阴极就是8个LED灯的阴极连接在一起,阴极是公共端,由阳极来控制单个小灯的亮灭
共阳极就是8个LED灯的阳极连接在一起,阳极是公共端,由阴极来控制单个小灯的亮灭
以上是板子的数码管电路图
板子上的数码管都是共阳极数码管,数码管的阳极都接在了com端上
数码管的真值表
以DS6数码管为例分析:
控制DS6的是三极管Q7,需要LEDS5为低电平,三极管Q7才可以道通
ENLED为低电平,ADDR3为高电平,74HC138才能使能
ADDR2为高电平,ADDR1为低电平,ADDR0为高电平时,LEDS5为低电平,此时Q7导通
b、c段LED亮灯时,数码管将显示1,即P0 = 0xF9时,数码管显示1
#include<reg52.h>
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;
void main(void)
{
//74HC138使能
ENLED = 0;
ADDR0 = 1;
//Q7导通
ADDR2 = 1;
ADDR1 = 0;
ADDR0 = 1;
P0 = 0xF9;//数码管b、c段亮,即显示1
while(1)
;
}
按此方法依次得出数码管的真值表:
字符 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
数值 | 0xC0 | 0xF9 | 0xA4 | 0xB0 | 0x99 | 0x92 | 0x82 | 0xF8 |
字符 | 8 | 9 | A | b | C | d | E | F |
数值 | 0x80 | 0x90 | 0x88 | 0x83 | 0xC6 | 0xA1 | 0x86 | 0x8E |
数码管的静态显示
数码管的静态显示:74HC138同一时刻只能让一个输出口为低电平,也就是说在一个时刻内,只能使能一个数码管,并根据给出的P0的值来改变这个数码管的显示字符
数码管的静态显示是对应动态显示而言的,静态显示对于一两个数码管还行,对于多个数码管,静态显示就没有意义了
code:51单片机的关键字
unsigned char 定义的变量放在单片机的ARM中,在程序中可以随意改变这些变量的值
在程序中要使用,却不会改变值,定义这种数据时可以加上一个code关键字修饰一下,这个数据就会存储到程序空间Flash中,这样子就可以大大减少单片机的RAM的使用量
#include<reg52.h>
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;
unsigned char code LedChar[16] =
{ 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
void main(void)
{
unsigned cnt;//溢出次数
int i;
//74HC138使能
ENLED = 0;
ADDR0 = 1;
//Q7导通
ADDR2 = 1;
ADDR1 = 0;
ADDR0 = 1;
TMOD = 1;//To设置为模式0
//设置T0初始值
TH0 = 0xB4;
TL0 = 0x00;
TR0 = 1;//启动T0
cnt = 0;
i = 0;
while(1)
{
if (1 == TF0)//溢出
{
//设置T0初始值
TF0 = 0;
TH0 = 0xB4;
TL0 = 0x00;
cnt++;
//溢出1s
if (cnt >= 20)
{
cnt = 0;
if (16 == i)
i = 0;
P0 = LedChar[i];
i++;
}
}
}
}
数码管将从0显示到F,间隔1s,重复显示
本文来自博客园,作者:EricsT,转载请注明原文链接:https://www.cnblogs.com/EricsT/p/18460817