目录
概要
学习静态数码管的显示原理,以及如何让数码管选择数字
数码管显示方式
- 共阴显示 /* 低电平输出点亮----动态数码管使用*/
- 共阳显示 /* 高电平输出点亮----静态数码管使用*/
显示原理:
a到dp 可以通过设置16进制的八位数值来使对应字母点亮从而形成各种参数,
例如:显示数字零 ~0x3f(静态数码管显示,低电平位点亮)
DP | H | G | F | E | D | C | B | A | 段码 | |
共阳 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0xC0 |
共阴 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0x3f |
dp为右下角的点。 a~dp 由低位到高位
数码管码表
- 共阴数码管码表
0x3f | 0x06 | 0x5b | 0x4f | 0x66 | 0x6d |
0 | 1 | 2 | 3 | 4 | 5 |
0x7d | 0x07 | 0x7f | 0x6f | 0x77 | 0x7c |
6 | 7 | 8 | 9 | A | B |
0x39 | 0x5e | 0x79 | 0x71 | 0x00 | |
C | D | E | F | 无显示 |
- 共阳数码管码表
0xc0 | 0xf9 | 0xa4 | 0xb0 | 0x99 | 0x92 |
0 | 1 | 2 | 3 | 4 | 5 |
0x82 | 0xf8 | 0x80 | 0x90 | 0x88 | 0x83 |
6 | 7 | 8 | 9 | A | B |
0xc6 | 0xa1 | 0x86 | 0x8e | 0xff | |
C | D | E | F | 无显示 |
基础练习
实现在静态数码管显示一个数字‘0’
代码实现:
#include "reg52.h"
#define led P0
typedef unsigned char u8;
/*共阴极数码管显示数字
code定义编码时,直接分配到程序空间中*/
u8 code c[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void main()
{
led = ~c[0]; //静态数码管显示字符0,因为静态数码管是低电平亮,g和点亮,所以要取反让其他位置亮,则出现数字零
while(1)
{
};
}
进阶练习
使用静态数码管,显示数字‘0-9’循环,间隔1s
代码实现:
#include "reg52.h"
#define led P0
typedef unsigned char u8;
typedef unsigned int u16;
/*共阴极数码管显示数字
code定义编码时,直接分配到程序空间中*/
u8 code c[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/* 延时函数*/
void Delay_10us(u16 ten_us)
{
while(ten_us--);
}
/* 循环显示数字*/
void show_()
{
u16 i;
for(i=0;i<10;i++)
{
led = ~c[i]; //共阴极取反显示数字
Delay_10us(100000);
}
}
void main()
{
while(1)
{
show_();
}
}