c语言控制数码管显示时间,单片机 控制 数码管显示
常见LED数码管
LED数码管(LED Segment Displays)简介
数码管也称LED数码管,是由多个发光二极管封装在一起的“8”字型的器件。
按发光二极管单元连接方式可分为`共阳极数码管`和`共阴极数码管`。
内部连接原理图
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到高电平,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
led数码管广泛应用于仪表、时钟、车站、家电等场合。常用段数一般为7段,有的另加一个小数点,当然也可以完全定制。选用时应注意产品尺寸颜色、功耗、亮度、波长等。
驱动电路
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
静态显示驱动
静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
动态显示驱动
数码管动态显示是单片机中应用最为广泛的显示方式之一.
动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
Arduino控制数码管显示示例
今天实验中要用的数码管型号为:5161AS,是一款0.56英寸的红色共数码管 。
电路原理图
实物引脚
首先需要说明的是:数码管和发光二极管一样,需要添加限流电阻。
限流电阻的具体阻值与数码管击穿电压有关。
加限流电阻的两种方法:
限流电阻接发
当然,各有利弊:
串联在公共端可以节省元件。但数码管显示不同数字时发光亮度不一致(此时电阻分压),显示小数点Dp时最亮,显示8.时最暗。
在笔划"a,b,c,d,e,f,g,dp"对应引脚上分别串联限流电阻,虽元件消耗较多,但可以保证显示亮度相同。
本次实验选择330Ω限流电阻,和5.0V供电。电路如下:
驱动一个数码管
依据发烟测试原则,咱们通过Arduino从最简单的程序入手,实现显示功能:
/* Main.ino file generated by New Project wizard
* Designer: 禾灮
* Created: 周六 7月 7 2018
* Processor: Arduino Uno
* Compiler: Arduino AVR (Proteus)
*/
// Define Function Prototypes that use User Types below here or use a .h file
//
//设置数码管A接口
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
//设置调整变量
unsigned long ChangeTime;
int n;
// Define Functions below here
//
void ClearLEDs(){ //定义ClearLEDs(),其作用是清屏
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void PickNumber(int x){ //定义PickNumber(x),其作用是显示数字x
switch(x){
default:
zero();
break;
case 1:
one();
break;
case 2:
two();
break;
case 3:
three();
break;
case 4:
four();
break;
case 5:
five();
break;
case 6:
six();
break;
case 7:
seven();
break;
case 8:
eight();
break;
case 9:
nine();
break;
}
}
void zero(){ //定义数字0
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
}
void one(){ //定义数字1
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void two(){ //定义数字2
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void three(){ //定义数字3
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void four(){ //定义数字4
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void five(){ //定义数字5
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void six(){ //定义数字6
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void seven(){ //定义数字7
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void eight(){ //定义数字8
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void nine(){ //定义数字9
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void ShowLED(int x){ //定义ShowLED(x),其作用是显示数字0~x,每个数字显示时间300ms
n = x;
while(n >= 0){
ClearLEDs();
ChangeTime = millis();
while((millis() - ChangeTime) < 300){
PickNumber(n);
}
n--;
}
delay(1000);
}
void setup(){ // put your setup code here, to run once:
//数码管
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
ClearLEDs();
}
void loop(){ // put your main code here, to run repeatedly:
ShowLED(9); //所有数码管同时显示数字0~9,每个数字显示时间300ms
}
//——————————————————————————————————————————————————————————————————————————
上面的代码可以让数码管依次显示数字0-9
显示数字8
显示数字6
AVR单片机控制数码管显示示例
为方便起见,下面的实验依旧是基于Arduino开发板
与上文直接通过Arduino IDE编程控制开发板稍有不同的是,在下面实验开始前,需要先看几张图:
ATmega328引脚定义及其对应关系
ATmega328p内部结构
ATmega328p内部结构
ATmega328p引脚
ATmega328p引脚
下面直接贴电路与源码,有注释:
电路连接示意
实验电路原理图
AVR C语言源码:
源码下载地址:
算了,还是不发了吧!自己懂原理了,自己写去!
看都看了,关注一下吧!
关注都关注了,分享一下吧!
感谢一直关注着禾灮成长进步的朋友们。你们的信任、支持和鼓励,鞭策着我们一路走到了今天。
感谢所有的合作伙伴,我们相互促进,共同见证了彼此的成长。
感谢所有曾经在禾灮彼此倚靠、相互鼓励、携手同心、砥砺同行的兄弟姐妹。这里承载了我们的青春与热血。
禾灮,感谢有你。
未来,我们将一如既往,砥砺前行。
禾灮·小楊
2018.07.07
c语言控制数码管显示时间,单片机 控制 数码管显示相关推荐
- 微信小程序showToast在真机中显示时间不可控制,显示时间短
现象: 使用uniapp开发微信小程序,使用showToast,设置duration来控制提示展现时长,发现在微信开发者工具正常,在真机中显示时间比较短,并且设置duration不生效. 原因: 排查 ...
- python如何显示时间_如何让python显示当前时间(东部)
如果您需要大量时区,则应使用pytz包,并且需要正确处理夏令时的重复小时(即从午夜到凌晨1点发生的情况). 对于简单的事情,创建自己的时区类很容易: import datetime class EST ...
- 51c语言数码管编程,51单片机的数码管循环显示编程实例
要求在数码管上循环显示数字 1-5. 范例分析: 1.1硬件分析 数码管采用共阳极结构. 1.2软件设计 设计中要求循环显示1-5,很显然应采用循环的方法来实现,最简单的方法是将1-5的段码依次由p0 ...
- 单片机c语言pwm整流的程序,基于 单片机控制PWM整流电源的设计.doc
PAGE \* MERGEFORMAT II 摘??? 要 本文介绍了用PWM实现直流电机调整的基本方法.本文在给出直流电机调整和PWM实现方法的基础上,提供一种用单片机软件实现PWM调速的方法,以及 ...
- Extjs显示时间兼容性问题——firefox正常显示,IE不正常出现NaN-NaN-NaN的解决方式...
1.格式化时间导致的问题 firfox.IE都 正常显示: { header: "入住时间", dataIndex: "LiveTim ...
- php代码时间控制,PHP 网页过期时间的控制代码
当然,前提要先打开CDN中一个功能reload_into_ims on.这样用户发送过来no-cache也不怕了.因为这样会给给no-cache转成If-Modified-Since .所以我们写程序 ...
- 怎样在html中显示时间,如何在网页上显示当前时间
最近做的页面中有需要在页面直接显示当前时间的功能,一开始不知道怎么实现,后来经过查找资料来实现了该功能.虽然用过该功能的人会觉得很简单,但是在这里还是想总结出来,可以供不熟悉的人参考一下. 具体实现代 ...
- sublime运行python只显示时间_sublime3-python 编译运行不显示内容
sublime链接:https://pan.baidu.com/s/162fVnVIwwl6UkAkzIHUwDQ 提取码:6g57 运行sublime_text.exe,在执行编译python时, ...
- 单片机的停车场计数系统c51_基于51单片机控制的自动停车收费管理系统
4.1硬件设置 本控制中心采用89C51单片机系统.因为系统所需存储容量不大,所以只使用89C51的内部RAM即可,不需要外扩RAM.该单片机采用上电与按钮复位电路,内部时钟频率为12MHz,通过软件 ...
最新文章
- BC:带你温习并解读《中国区块链技术和应用发展白皮书》—国内外区块链发展现状
- wxWidgets:wxArchiveIterator类用法
- Sino Global Capital CEO:Robinhood暂停GME股票交易凸显了DeFi的重要性
- The type 'System.Object' is defined in an assembly that is not referenced
- 「THUSC 2016」成绩单 方块消除 (区间dp)
- 最简单例子图解JVM内存分配和回收(转)
- 过拟合和欠拟合_TensorFlow教程-过拟合和欠拟合
- Microsoft SQL Server 2005安装
- HeadFirst 设计模式
- 如何编译python源代码
- 明解C语言(入门篇)第十一章
- 大数据新闻推送你怎么看_如何看待大数据精准推送,使人的视界越来越窄?
- 变点理论CUSUM在择时交易中的应用
- Linux系统配置及服务管理_02章_文件和用户管理
- 远场(far-field)语音识别的主流技术有哪些
- 离散数学-3 命题逻辑的推理理论
- 多任务多目标 CTR 预估技术
- 文章《Deep Image Homography Estimation》
- 今日踩坑Maven:omitted for duplicate
- vue面试题(自用)
热门文章
- 知识图谱从入门到应用——知识图谱的技术结构
- Git命令: rebase 和 squash命令
- 最近调试HEVC中码率控制, 发现HM里面一个重大bug
- 几何原本译林pdf下载_《几何原本》欧几里得_文字版_pdf电子书下载
- 关于 JS 中,实现在异步代码执行完毕再执行后续代码
- 解决佳能MG3080、MG2980打印机报错5B00无法打印的问题
- 掌门1对1《啊呜!卡通人》引强烈共鸣 智能科技赋能高效教学收获点赞
- 2018.07.12【2018提高组】模拟B组 【NOIP2015模拟10.27】魔法阵
- android入门实例!一线互联网移动架构师NDK模块开发!看这一篇就够了!
- IP地址(简单模拟)