电子说
数码管静态显示其实在实际应用中很少,除非项目中就只用到了一位数码管显示,否则的话静态显示非常占用IO口。但是,静态显示又是动态显示的基础,所以,在这里我打算跟大家分享一下,数码管静态显示的工作原理和编程方法。
一、电路原理图
备注:这是一个6位数码管的电路,在本项目中我们只用到其中的一个,电路中74LS04电路在这里主要是用作驱动芯片,用于提高单片机IO口的驱动能力。
二、相关知识
1、数码管的结构
数码管内部结构其实就是由8颗LED按照8自形排列组成,而根据结构的不同,数码管可分为共阳极数码管和共阴极数码管,其中把所有LED的阴极连接到一起做引出端的成为共阴极数码管,其中把所有LED的阳极连接到一起做引出端的成为共阳极数码管。
2、取码方式
数码管的使用过程中,我们通过点亮数码管的不同笔段组合,来达到显示不同数字的效果,这就是取码,段码一般按照16进制书写。而共阴极数码管和共阳极数码管的的段码也不一样。
(1)共阴极数码管的取码方式
“0”的段码:取码时a为对应地位,h对应高位
“1”的段码:取码时a为对应地位,h对应高位
根据这种方式我们可以总结得出,共阴极数码管的段码表
0x3f | 0x06 | 0x5b | 0x4f | 0x66 | 0x6d | 0x7d | 0x07 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0x7f | 0x6f | 0x77 | 0x7c | 0x39 | 0x5e | 0x79 | 0x71 |
8 | 9 | A | B | C | D | E | F |
如果将段码表使用c语言数组的方式书写则为:
unsigned char table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0~f
(2)共阳极数码管的取码方式
“0”的段码:取码时a为对应地位,h对应高位
“1”的段码:取码时a为对应地位,h对应高位
根据这种方式我们可以总结得出,共阳极数码管的段码表
0xc0 | 0xf9 | 0xa4 | 0xb0 | 0x99 | 0x92 | 0x82 | 0xf8 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0x80 | 0x90 | 0x88 | 0x83 | 0xc6 | 0xa1 | 0x86 | 0x8e |
8 | 9 | A | B | C | D | E | F |
如果将段码表使用c语言数组的方式书写则为:
unsigned char table[]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0~f
3、数显方式
如果我们想要在数码管上显示数字,只需要把相应的段码送到IO口,即可让数码管显示。
三、例程
#include< reg52.h > #define uint unsigned int #define uchar unsigned char sbit LED1=P2^0; uchar table_K[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴极数码管段码表 /*-------微秒延时--------*/ void delay_us(uint z) { uint x; for(x=z;x >0;x--); } /*--------毫秒延时--------*/ void delay_ms(uint z) { uint x,y; for(x=z;x >0;x--) for(y=110;y >0;y--); } /*----------主函数-----------*/ void main() { uchar i=1; P0=0x00;P1=0xff;P2=0x00;P3=0x00; //IO口状态初始化 while(1) { LED1=1; for(i=0;i< 16;i++) //循环16次 i从0~15 { P0=table_K[i]; //把0~f的段码一次送到P0口 delay_ms(1000);//等待1秒 } } }
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !