51单片机上数码管的静态显示和动态显示

发布者:VelvetDreamer最新更新时间:2022-05-24 来源: eefocus关键字:51单片机  数码管  静态显示  动态显示 手机看文章 扫描二维码
随时随地手机看文章

一、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单片机上数码管的静态显示和动态显示

上一篇:51单片机的键盘检测原理
下一篇:51单片机实现流水灯操作

推荐阅读最新更新时间:2024-11-12 10:30

51单片机基础之DS1302
代码: main.c 文件 /* DS1302时钟 */ #include smg.h #include ds1302.h void main() { u8 time_buf ; //这个数组用来存储需要现实的内容 ds1302_init();//初始化DS1302 while(1) { ds1302_read_time(); //虽然不知道这个是干嘛的,但是知道怎么改。 time_buf =gsmg_code /16]; time_buf =gsmg_code &0x0f]; time_buf =0x40; //显示一杠 time_buf =gs
[单片机]
51单片机智能车超声波避障实验
51单片机平台-------超声波避障实验 实验准备 图1-1 51单片机主控板 图1-2 一体云台超声波模块 实验目的 单片机上电之后,启动超声波避障功能,当前方有障碍物时小车则相应的转向避障。 实验原理 SR04是利用超声波特性检测距离的传感器。其带有两个超声波探头,分别用作发射和接收超声波。其测量的范围是3-500cm。 图3-1 超声波发射和接收示意图 图3-2 SR04超声波模块引脚 该模块的工作原理: 先使用单片机的P3.7引脚向TRIG脚输入至少10us的高电平信号,触发模块的测距功能。如下图3-3所
[单片机]
<font color='red'>51单片机</font>智能车超声波避障实验
51单片机软件复位函数
51单片机无自带的看门狗,没有提供软件复位的函数和机制,要想实现软件复位,只能通过强制将PC指针指到0x0000位置, 通过以下函数将PC指针强制指到0x0000: void reset(void) { ((void (code *) (void)) 0x0000) (); } 可以使用下面的程序跳到0000H实现软复位,下面的程序实际上是一个函数指针,指针指向了0000H地址。 ((void (code *) (void)) 0x0000) (); 下面的例子将实现软件自复位 void reset (void) { ((void (code *) (void)) 0x0000) (); } v
[单片机]
51单片机之动态数码管的实现
1.为什么是动态的? 1.采用了发光管的余晖和人眼的视觉暂留效应,使人看到好像各位数码管都在同时显示 2.特点: 1.同样是利用了138译码器对高低电平进行操作 2. 动态显示将所有的数码管的段选线并联,采用循环的方式对每一位进行操作 3.关于138译码器 输出高低电频是有着一定规律的 如果是110(LSA,LSB,LSC),则为L3为低电平;(反向二进制) 同时,要注意看真值表(X为任意值,L为低电平,H为高电平) 4.关于怎样实现动态的具体操作 1.使用数组来时数码管实现输出数字 2.使用for循环来时函数进行循环操作 3.使用switch case函数实现不同字段的选择 4
[单片机]
<font color='red'>51单片机</font>之动态<font color='red'>数码管</font>的实现
51单片机超声波测距程序代码
51单片机超声波测距程序代码 /超声波模块ME007显示程序 //晶振=8M //MCU=STC10F04XE //P0.0-P0.6共阳数码管引脚 //Trig = P1^0 //Echo = P3^2 #include reg52.h //包括一个52标准内核的头文件 #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long //*********************************************** sfr CLK_DIV = 0x9
[单片机]
51单片机】点阵LED的显示实验
前言 今天女朋友生日,除了礼物之外,一时想不到能给她点什么不一样的,并且奈何自己不会写诗,没办法从这方面入手。所以就用我会的方式吧。 既然最近自己琢磨琢磨单片机,也准备玩儿点阵LED的显示实验,这时我灵机一动,不如用LED做一个吧。(????????????老理工男了,怎么有的女朋友?) 好,下面就来看看我是怎么做的吧。 一、环境 环境用的是Keil5编译,这是目前比较主流的单片机编译软件,支持汇编和C。其次,我用到了Proteus8软件仿真,没有自己买单片机,仿真软件的东西很全面。具体的软件操作在我的上一篇文章中有说了,这里就不再赘述。需要看软件操作的小伙伴可以参考我的 这篇文章 (点击阅读)。 二、硬件 这次用到的原件有
[单片机]
【<font color='red'>51单片机</font>】点阵LED的<font color='red'>显示</font>实验
基于51单片机的数字频率机设计
一.硬件方案 频率计由89S52单片机控制电路、信号处理电路、键盘电路以及测量数据的显示电路还有系统软件所构成的,在信号处理电路当中包含了待测信号放大、限幅、波形变换、波形整形以及分频电路。测量范围为0~100KHZ。 主要由51单片机+最小系统+分频模块+整形模块+lcd1602液晶显示+按键而成;如图: 二.设计功能 (1)频率的测量范围为1Hz—100kHz能测量各种周期信号,能测出正弦波、三角波或方波等波形的频率。 (2)通过LCD1602液晶显示屏显示检测到的即时频率数值(最多8位数,单位为Hz)。 (3)电路板上排针左边接信号输入,右边接地。 三.设计原理图 (1)原理图主要采用AD软件进行设计,如图:
[嵌入式]
基于<font color='red'>51单片机</font>的数字频率机设计
89c51单片机编程环境布置
第一步,使用Professional 的isis7连接模拟电路 第二步,根据电路引脚的使用情况,用keil uVision4编写调试源程序 第三步,代码调试无误,回到isis7中,将代码下载到模拟硬件中。运行查看。 具体做法:右击单片机AT89c51,选择最底下的Add/Remove source files,出现下图: 其中Code Generation Tool从下拉列表选择ASEM51,source code filename调整目录选择自己的源码,点击ok即可完成软件下载到硬件。 第四步:运行,查看效果。单击左下角三角图标:
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved