从共阴与共阳的数码管上看,对数码管的控制与控制LED一样,只需要控制数码管的两端高低电平(位选引脚与段选引脚的电平),数码管便可以被点亮。
静态显示与动态显示
静态显示:各数码管处于恒电压或者恒电流状态,硬件电路复杂成本高;
动态显示:各数码管被分时选通,利用人的视觉暂留特性显示,成本低,需要占用CPU运行时间。
驱动电路
虽然数码管的使用只需要设置控制位选与段选引脚,便可以使其工作。但数码管工作需要电流比较大,51单片机的P0双向I/O(没有高电平输出),而P1~P3为准双向I/O口(驱动电流很小)。这些端口不能直接驱动数码管,都需要外接上拉电阻提供电流给数码管。
下图的数码管控制电路,为P0口接上拉电阻,连接到段选引脚,位选引脚连接到P2口。
如果是八位数码管,位选占用8个I/O,而段选占也用8位 I/O,单片机的一半被占用了,I/O比较紧张。可以通过使用74HC138(38译码器),省下一些I/O口;可以通过74HC245(八路信号收发器)对数码管进行分时复用;也可以将两者结合进行使用(74HC138+74HC245)。
总结:
1)数码管显示有静态显示与动态显示;
2)单片机中需要有驱动电路才能使用数码管;
3)74HC138的使用可以省下I/O口;
4)74HC245的使用,将会更加合理利用I/O资源。
关键字:C51 编程 数码管
引用地址:
C51编程8-数码管(工作原理2)
推荐阅读最新更新时间:2024-11-11 11:21
DS1302读写一体化C51源程序
DS1302读写一体化C51源程序 (hotpower) /*---------------------------------------------- DS1302读写一体化C51源程序 HotPower@126.com ------------------------------------------------*/ //打开DS1302 void TimeSpiOpen(void) { TIMECLK = 0; TIMERST = 0;//禁止DS1302 TIMEIO = 1;//释放数据总线 TIMERST = 1;//使能DS1302 } //关闭DS1302 void TimeSpiClose(v
[单片机]
Keil C51总线外设操作问题的深入分析
阅读了《单片机与嵌入式系统应用》2005年第10期杂志《经验交流》栏目的一篇文章《Keil C5l对同一端口的连续读取方法》(原文)后,笔者认为该文并未就此问题进行深入准确的分析。文章中提到的两种解决方法并不直接和简单。笔者认为这并非是Keil C51中不能处理对一个端口进行连续读写的问题,而是对Keil C51的使用不够熟悉和设计不够细致的问题,因此特撰写本文。 本文中对原文提到的问题,提出了三种不同于原文的解决方法。每种方法都比原文中提到的方法更直接和简单,设计也更规范。(无意批评,请原文作者见谅) 1 问题回顾和分析原文位置 原文中提到:在实际工作中遇到对同一端口反复连续读取,Keil C5l编译并未达到预期的结果
[单片机]
PCF8591的软件编程
PCF8591的通信接口是I2C,那么编程肯定是符合这个协议的。单片机对PCF8591进行初始化,一共发送三个字节即可。第一个字节,和EEPROM类似,第一个字节是地址字节,其中7位代表地址,1位代表读写方向。地址高4位固定是1001,低三位是A2,A1,A0,这三位我们电路上都接了GND,因此也就是000,如图1所示。 图1 PCF8591地址字节 发送到PCF8591的第二个字节将被存储在控制寄存器,用于控制PCF8591的功能。其中第3位和第7位是固定的0,另外6位各自有各自的作用,如图2所示,我逐一介绍。 图2 PCF8591控制字节 控制字节的第6位是DA使能位,这一位置1表示DA输出引脚使能,
[单片机]
矩阵键盘+数码管动态显示
我把矩阵键盘和数码管动态显示综合起来写了个程序。这个代码的意思是在一开始8个数码管什么也不显示,因为p0的初始值是0x00,当我们按下矩阵按键里的按键时,8个数码管动态显示该按键的键值,直到按下了下一个按键,8个数码管显示的内容才可能改变。 #include reg52.h //目的是每按下一个按键,8个数码管就动态显示对应的键值 sbit lsa=P2^2; sbit lsb=P2^3; sbit lsc=P2^4; #define duanxuan P0 #define keyboard P1 int zxm ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
[单片机]
C51结构、联合和枚举的使用
前面的文章中介绍了 C 语言的基本数据类型,为了更有效的处理更复杂的数据,C 语 言引入了构造类型的数据类型。构造类型就是将一批各种类型的数据放在一起形成一种特殊 类型的数据。之前讨论过的数组也算是一种构造类型的数据,单片机c语言 中的构造类型还有结构、 枚举和联合。 结构 结构是一种数据的集合体,它能按需要将不一样类型的变量组合在一起,整个集合体用 一个结构变量名表示,组成这个集合体的各个变量称为结构成员。理解结构的概念,能用 班级和学生的关系去理解。班级名称就相当于结构变量名,它代表所有同学的集合,而每个 同学就是这个结构中的成员。使用结构变量时,要先定义结构类型。一般定义格式如下: struct 结构名 {结构元素表
[单片机]
40亿美元市场保持8年没变,可编程逻辑FPGA到底怎么了
FPGA 市场在2008年是40亿美元规模,到了2016年还是40亿美元。似乎显而易见,当 ASIC 越来越贵,可编程应该要增长才对。然而事实并非如此。下面就随嵌入式小编一起来了解一下相关内容吧。 在1996年 FPGA 市场容量为19亿美元,当年赛灵思预测到2001年市场能达到58亿美元。到了2001年,市场增长到20亿美元。 回到2008年,赛灵思的帅印由WimRoelandts交接给MosheGavrielov,该公司开始寻求在工业市场的新出路,这块市场一直被寄予厚望却从未实现预期的增长。 “过去四年里ASSP/ ASIC 的设计型初创公司减少了40%,”在2008年4月Gavrielov如是说,“为什么
[嵌入式]
STM8L在使用模拟IIC编程时遇到__iar_unhandled_exception的问题
最近,在使用STM8L051F3进行编程的时候,使用PC0和PC1进行模拟IIC编程,对于调试中出现的__iar_unhandled_exception的问题,对于该问题,自己的一些解决方法,并记录 对两种SDA配置方向的函数进行比较 方式1 DDR寄存器配置在CR1和CR2之前 方式2 DDR寄存器配置在CR1和CR2之后 在不开启中断的情况下,方式1 和方式2 在运行时,都没有发现问题。但是在开启中断后,方式1就会出现问题,在配置完DDR和CR1之后,函数就进入死循环,通过查看汇编可以看到如下代码 一直在这里面出不来,通过度娘的帮助,进入这里的原因是因为我们在使用寄存器编程时,大部分的中断函数没有编写,
[单片机]
93C46/93c06/93c46/93c56/93c66/93c86的驱动程序(C51)
简介:SPI总线驱动程序 包括的普通封装标准模式,特殊封装标准模式 。 —————————————————————*/ /*通用93c06-93c86系列使用说明 93c06=93c4693c56=93c6693c76=93c86 dipx 可以自行定义*/ #include reg51.h #include intrins.h /*----------------------------------------------------- SPI93cXX系列时序函数调用(普通封装) 调用方式:自行定义 函数说明:私有函数,封装各接口定义 ------------------------------------------
[单片机]