一、TX1C数码管介绍
共阴极和共阳极数码管,实验板上是共阴极数码管,6位一体的数码管。
连接原理图如下面两图:连在一起的段线(段选线即abcdefgh)控制数码管亮什么数字,独立的公共端(位选线即共阴极或共阳极)控制哪一位数码管亮。因为段线是连接在一起的,所以显示的数字是一样的,共阴极一端是独立的公共端,所以低六位分别控制哪位数码管亮。用两个锁存器可以控制任意数码管显示任意数字。
一、数码管的静态显示
静态显示就是位选打开的数码管上显示的数字都相同,因为段选是连接在一起的。
1、数码管的前三位显示666
#include sbit wela=P2^7; sbit dula=P2^6; void main() { wela=1;//位选打开,即锁存端置高,锁存器的输出随输入变化 P0=0xf8;//1111 1000,前三位点亮 wela=0;//位选关闭,即锁存端置低,锁存器保持之前的状态,就是让前三个数码管亮 dula=1; P0=0x7d;//将数码管显示6数字,0111 1101 dula=0; while(1) { } } 2、6位数码管间隔500毫秒同时显示996ICU #include sbit dula=P2^6; sbit wela=P2^7; unsigned char code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x3e};//0到F的编码,最后一个是U,0011 1110 void delayms(unsigned int xms) { unsigned int i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void main() { wela=1; P0=0xc0;//1100 0000,六个数码管亮 wela=0; while(1) { dula=1; P0=table[9];//数组是从0开始的,显示9 dula=0; delayms(500); dula=1; P0=0; dula=0; delayms(300);//由于连续两个9,中间熄灭300毫秒 dula=1; P0=table[9]; dula=0; delayms(500); dula=1; P0=table[6];//显示6 dula=0; delayms(500); dula=1; P0=table[1];//由于显示不了I,所以用1代替一下 dula=0; delayms(500); dula=1; P0=table[12];//显示C dula=0; delayms(500); dula=1; P0=table[16];//显示U dula=0; delayms(300); } } 由于中间两个9,显示效果不太好。 二、数码管的动态显示 所谓的动态显示就是从第一个数码管到最后一个数码管依次显示数字,把显示数字进行延时,就成了每个数码管依次显示了,然后把时间缩得很短很短,数码管在轮流高速显示,人眼看不出来了,给人的感觉就是同时显示了。 下段代码就是显示996ICU字样 #include #define uint unsigned int//宏定义,给unsigned int 重新命名为uint,方便使用 sbit dula=P2^6; sbit wela=P2^7; unsigned char code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x3e};//0到F的编码,最后一个是U,0011 1110 void delayms(uint xms); void main() { dula=0; wela=0;/*关闭位选,不然下面刚打开段选时,9也就是ox6f点亮的数码管都会显示9,只不过很快,眼睛看不见 ,如果加一个延时语句就能看见了,可以在下面第一个dula=0语句后加while(1)测试一下*/ while(1) { dula=1; P0=table[9];//第一个数码管显示9 dula=0; P0=0xff;//消影。如果不加,后面打开第一个数码管之前先把9也就是0x6f给打开位选的P0,程 wela=1;//序跑的很快看不见,如果慢点就能看到数码管出现混乱现象 P0=0xfe;//打开第一个数码管 wela=0; delayms(1); wela=1;//如果不加这三个语句就会看到数码管没有亮的部分会有微弱亮度 P0=0xff;//原因是往下执行时,位选的fe先给下面段选,第一个数码管快速显示fe wela=0;/*然后下面的table[9]就显示给了第一个数码管,因为这两个数都是9,换个数字 就明显了,所以在没有延时高速显示下会有微弱亮度,如果慢点可能会出现混乱现象,所有显示的数字 亮很多是因为有延时,所以直接关闭第一个数码管就解决问题了,由于高速显示也就看不到第一个数码管灭了*/ dula=1; P0=table[9]; dula=0; P0=0xff; wela=1; P0=0xfd;//打开第二个数码管 wela=0; delayms(1); wela=1; P0=0xff; wela=0; dula=1; P0=table[6];//显示6 dula=0; P0=0xff; wela=1; P0=0xfb;//打开第三个数码管 wela=0; delayms(1); wela=1; P0=0xff; wela=0; dula=1; P0=table[1];//显示I,用1代替 dula=0; P0=0xff; wela=1; P0=0xf7;//打开第四个数码管 wela=0; delayms(1); wela=1; P0=0xff; wela=0; dula=1; P0=table[12];//显示C dula=0; P0=0xff; wela=1; P0=0xef;//打开第五个数码管 wela=0; delayms(1); wela=1; P0=0xff; wela=0; dula=1; P0=table[16];//显示U dula=0; P0=0xff; wela=1; P0=0xdf;//打开第六个数码管 wela=0; delayms(1); wela=1; P0=0xff; wela=0; } } void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } 刚开始delayms函数的时间放长一点,delayms(500),让它以0.5秒的速度依次显示,慢慢减小时间到delayms(1)1毫秒就体会的深一点了。 三、总结 1、编码方法 本实验板上共阴极数码管编码如下:unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};此编码是0到F,即0为0011 1111,1为0000 0110.不同的电路编码可能不同,知道数码管显示的原理就可以编码。在数组类型后面多了一个code关键字。注意:在单片机中定义数组是占用内存空间的,而定义编码时是直接分配到程序空间,编译后,编码占用的是程序存储空间,而不是内存空间。 2、消影很重要,不然数码管会混乱或者数字之外的部分会有余辉。在第二段代码中,关闭的位选人眼是看不见的,给人同时显示的原因就是高速显示和二极管点亮之后的余辉作用。
上一篇:51单片机的键盘检测原理
下一篇:51单片机实现流水灯操作
推荐阅读最新更新时间:2024-11-12 10:30
设计资源 培训 开发板 精华推荐
- EVAL-ADG5412BFEBZ,ADG5412BF 双向过压保护四通道 SPST 评估板
- Remote
- ADR430A 2.048 Vout 超低噪声 XFET 电压基准的典型应用,具有灌电流和拉电流能力
- 用于超级电容器后备电源的 LT8705MPFE 同步降压-升压型 DC/DC 控制器的典型应用电路
- LT3973EDD 1.21V 降压转换器的典型应用
- eLQFP64封装的SPC570Sx的插槽式微型模块
- AM2G-2405SZ 5V 2 瓦 DC/DC 转换器的典型应用
- 使用 MaxLinear, Inc 的 SPX29150 的参考设计
- PI352x-0x-EVAL1,基于 PI3525 的 Cool-Power ZVS 开关稳压器 60 Vin Buck 客户评估板
- AXP202【DIY设备电源管理迈入新时代】