数码管动态显示

静态与动态显示

动态显示
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

数组的定义与引用

数组是一组有序数据的集合,数组中每一个数据都是同一数据类型。数组中的元素可以用数组名和下标来唯一确定。

数组的一般格式定义如下:

数据类型 数组名[常量表达式] = {元素表};

例如:
unsigned char tabel[3] = [0x3F, 0x06, 0x5B,];
P0 = tabel[0]; // P0此时的值为0x3F

数码管动态显示数字 123

#include <reg52.h>
#include <intrins.h>#define uint unsigned int
#define uchar unsigned charsbit DU = P2^6;//数码管段选
sbit WE = P2^7;//数码管段选// 毫秒级延时函数定义
void delay(uint z){ // 毫秒级延时函数定义uint x, y;for (x = z; x > 0; x--){for (y = 114; y > 0; y--){}}
}void main(){ // main函数自身会循环while(1){/*第一位显示 数字 1*/P0 = 0XFF; // 清除断码    如果没有为P0 初始化赋值 0XFF,那么 P0的值会是上一个打开段选锁存器过程中赋予的值,执行到这里 会把段选值赋给锁存器中P0,导致数码管显示错误。WE = 1; // 打开位选锁存器P0 = 0XFE;   // 1111 1110  选通第一位数码管//    P0 = 0X00;  // 0000 0000  表示选通所有位数码管WE = 0; // 锁存位选数据DU = 1;  // 打开段选锁存器P0 = 0X06;  // 0000 0110  显示“1”DU = 0;   // 锁存段选数据delay(5);    // 对每次数码管的切换进行 5毫秒延时操作/*第二位显示 数字 2*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0XFD;   // 1111 1101  选通第二位数码管//    P0 = 0X00;  // 0000 0000  表示选通所有位数码管WE = 0; // 锁存位选数据DU = 1;  // 打开段选锁存器P0 = 0X5B;  // 0101 1011  显示“2”DU = 0;   // 锁存段选数据delay(5);/*第三位显示 数字 3*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0XFB;   // 1111 1011  选通第三位数码管//  P0 = 0X00;  // 0000 0000  表示选通所有位数码管WE = 0; // 锁存位选数据DU = 1;  // 打开段选锁存器P0 = 0X4F;  // 0100 1111  显示“3”DU = 0;   // 锁存段选数据delay(5);}
}

数码管动态显示数字 123 (代码优化)

#include <reg52.h>//包含51头文件
#include <intrins.h>//包含移位标准库函数头文件#define uint unsigned int
#define uchar unsigned charsbit DU = P2^6;//数码管段选
sbit WE = P2^7;//数码管段选//共阴数码管段选表0-9
uchar  code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};/*====================================
函数  : delay(uint z)
参数  :z 延时毫秒设定,取值范围0-65535
返回值 :无
描述  :12T/Fosc11.0592M毫秒级延时
====================================*/
void delay(uint z)
{uint x,y;for(x = z; x > 0; x--)for(y = 114; y > 0 ; y--);
} /*====================================
函数  :display(uchar i)
参数  :i 显示数值,取值范围0-255
返回值 :无
描述  :三位共阴数码管动态显示
====================================*/
void display(uchar i)
{uchar bai, shi, ge;bai = i / 100; //236 / 100  = 2shi = i % 100 / 10;   //236 % 100 / 10 = 3ge  = i % 10;//236 % 10 =6//第一位数码管       P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFE; //1111 1110WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[bai];//DU = 0;//锁存段选数据delay(5);//第二位数码管P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFD; //1111 1101WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[shi];//DU = 0;//锁存段选数据delay(5);//第三位数码管P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFB; //1111 1011WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[ge];//DU = 0;//锁存段选数据delay(5);
}void main()//main函数自身会循环
{   while(1){display(123); //数码管显示函数}
}

数码管动态显示数字 12345678 (代码优化)

#include <reg52.h>//包含51头文件
#include <intrins.h>//包含移位标准库函数头文件#define uint unsigned int
#define uchar unsigned charsbit DU = P2^6;//数码管段选
sbit WE = P2^7;//数码管段选//共阴数码管段选表0-9
uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};/*====================================
函数  : delay(uint z)
参数  :z 延时毫秒设定,取值范围0-65535
返回值 :无
描述  :12T/Fosc11.0592M毫秒级延时
====================================*/
void delay(uint z)
{uint x,y;for(x = z; x > 0; x--)for(y = 114; y > 0 ; y--);
} /*====================================
描述  :八位共阴数码管动态显示
====================================*/
void display(uchar num1, uchar num2, uchar num3, uchar num4, uchar num5, uchar num6, uchar num7, uchar num8)
{/*第一位显示*/      P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFE; //1111 1110WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[num1];//DU = 0;//锁存段选数据delay(1);/*第二位显示*/P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFD; //1111 1101WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[num2];//DU = 0;//锁存段选数据delay(1);/*第三位显示*/P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFB; //1111 1011WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[num3];//DU = 0;//锁存段选数据delay(1);/*第四位显示*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0XF7;   // 1111 0111  选通第四位数码管WE = 0; // 锁存位选数据DU = 1;  // 打开段选锁存器P0 = tabel[num4];//DU = 0;   // 锁存段选数据delay(1);/*第五位显示*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0XEF;   // 1110 1111  选通第五位数码管WE = 0; // 锁存位选数据DU = 1;  // 打开段选锁存器P0 = tabel[num5];//DU = 0;   // 锁存段选数据delay(1);/*第六位显示*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0XDF;   // 1101 1111  选通第六位数码管WE = 0; // 锁存位选数据DU = 1;  // 打开段选锁存器P0 = tabel[num6];//DU = 0;   // 锁存段选数据delay(1);/*第七位显示*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0XBF;   // 1011 1111  选通第七位数码管WE = 0; // 锁存位选数据DU = 1;  // 打开段选锁存器P0 = tabel[num7];//DU = 0;   // 锁存段选数据delay(1);/*第八位显示*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0X7F;   // 0111 1111  选通第八位数码管WE = 0; // 锁存位选数据DU = 1;  // 打开段选锁存器P0 = tabel[num8];DU = 0;   // 锁存段选数据delay(1);
}void main()//main函数自身会循环
{   while(1){           display(1, 2, 3, 4, 5, 6, 7, 8); //数码管显示函数}
}

STC89C52单片机 数码管动态显示相关推荐

  1. 蓝桥杯单片机数码管动态显示_单片机静态动态数码管

    单片机系统中常用的显示器有: 发光二极管LED(Light Emitting Diode)显示器.液晶LCD(Liquid Crystal Display)显示器.TFT液晶显示器等.LED显示器有两 ...

  2. c语言数码管流动显示一个数,51单片机数码管动态显示 - 数码管动态扫描显示01234567程序(三种方案)...

    数码管动态扫描显示01234567程序二--51单片机动态显示共阳数码管01234567 原理图 c语言程序 程序如下: #include #define uint unsigned int #def ...

  3. C51单片机数码管动态显示

    数码管作为最廉价的输出设备,在各种自动化设备中有很大的应用,最简单普通的显示方式为动态刷新显示,称为假动态显示,即通过分时扫描每一位,利于人眼的视觉停留现象,造成一种静态显示的效果,如下图所示: C5 ...

  4. STC89C52单片机 数码管静态显示

    数码管显示原理 数码管根据内部连接不同分为共阴极和共阳极.八段数码管内部有8颗LED组成,如果想要显示特定字形只需控制相应的LED亮起,其他LED熄灭即可. 静态与动态显示 静态显示: LED显示器工 ...

  5. STC89C52单片机数码管介绍以及代码示例

    目录 一,数码管介绍 二,数码管引脚定义 我们首先对单个引脚进行说明: 其次,我们对多个引脚管进行说明: 最后我们来详细说说如何进行位选还有段选 接着是段选 三,数码管段码表 四,数码管驱动方式 五, ...

  6. 单片机——数码管动态显示

    1.头文件和定义,代码还使用了 sbit 定义来声明了两个变量 duan 和 wei,它们实际上是 P2.6 和 P2.7 端口的别名,用于控制数码管的段选和位选信号.这种方法可以使代码更具可读性,并 ...

  7. 蓝桥杯单片机数码管动态显示_关于蓝桥杯训练小程序 中断控制数码管显示数字的左右移动...

    /******************************************************************************************** 利用数码管在 ...

  8. 基于51单片机实现4位数码管动态显示

    单片机入门学习记录(一) 硬件配置: 主控:STC89C52单片机 显示器件:四位一体数码管 操作器件:点动式独立按键SB1.SB2.SB3.SB4 *选配器件:蜂鸣器 功能要求: 1)开机自检:四位 ...

  9. STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字

    手动显示 #include <reg52.h>//包含51头文件 #include <intrins.h>//包含移位标准库函数头文件#define uint unsigned ...

最新文章

  1. (AI、Artificial Intelligence)人工智能概述及分类
  2. linux清除邮件队列
  3. React Native开发学习笔记——WebStorm运行项目
  4. 如何打印CloudFoundry上应用运行时的环境变量
  5. 1.5w字的Rmarkdown入门教程汇总
  6. opencv +opencv_contrib+CMake+VS2015
  7. JSONArray.fromObject(str)
  8. 记一次勒索病毒攻击事件的处理过程
  9. 因果推断笔记——DML :Double Machine Learning案例学习(十六)
  10. UI——day15.H5和小程序的设计
  11. mui架构app-终章(我是怎样决定放弃mui)
  12. android毕业论文结论,毕业论文经典结束语
  13. 一文排除R语言热力图所有的坑
  14. net stop mysql 服务名无效
  15. 奥塔在线:架构实践基础之一图胜千言
  16. 各个历史jdk版本下载
  17. python爬虫-正则表达式识别jpg和JPG
  18. Linux源码解读作业之文件篇
  19. 基于Qt5GUI框架+SQLite的音乐播放器
  20. python 栈的基本操作

热门文章

  1. 《C++编程风格(修订版)》——1.1 抽象
  2. 【POI xls】解析xls遇到的问题
  3. Linux 模拟 鼠标 键盘 事件
  4. BinaryReader 、BinaryWriter是方便用二进制方式读写int,double,string之类的数据
  5. 用Play 1.x 实现简单云计算多租户设计(Use Play 1.x To Achieve Multi-Tenancy Design)
  6. debian6 xen4.0安装 guest半虚拟化--tar安装
  7. 从JAVA转学习Go——Go在eclipse的环境搭建
  8. 计算机组成原理:总线
  9. socket()函数详解!
  10. 深入理解strncpy这个函数