数码管的基本介绍
数码管共有 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)
- ;
- }
复制代码 按此方法依次得出数码管的真值表:
数码管真值表1字符01234567数值0xC00xF90xA40xB00x990x920x820xF8数码管真值表2字符89AbCdEF数值0x800x900x880x830xC60xA10x860x8E数码管的静态显示
数码管的静态显示: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,重复显示
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |