51单片机直接驱动共阴极数码管
- 格式:docx
- 大小:10.62 KB
- 文档页数:4
51单片机数码管时钟电路的设计设计一个51单片机数码管时钟电路,让我们开始吧。
一、设计思路该数码管时钟电路的设计主要包括以下几个方面:1.使用DS1302时钟芯片获取真实时间;2.使用I2C总线方式将DS1302时钟芯片与51单片机连接;3.使用74HC595芯片驱动数码管显示;4.使用按键控制时钟的设置和调节;5.使用蜂鸣器发出报警声;6.使用LED指示灯显示时钟状态。
二、硬件设计部分数码管显示部分:1.使用4位共阳数码管作为时分显示器,使用1位共阳数码管作为秒显示器;2.使用8片74HC595芯片级联起来,将时分秒数据传输到数码管显示;3.设置共阳数码管的通阳管为P0口,设置74HC595的DS(串行数据输入)、SH(上升沿锁存)、STCP(74HC595的8位锁存输出)引脚接到P1.2、P1.3、P1.4端口;4.设置8个控制引脚接到P1.5~P1.12端口。
实时时钟部分:1.使用DS1302时钟芯片连接到P2.0、P2.1、P2.2、P2.3、P2.4、P2.5、P2.6、P2.7端口;2.设置时钟复位引脚接到P0.1端口,时钟传输使能引脚接到P0.2端口。
按键输入部分:1.设置按键S1接到P3.2端口,按键S2接到P3.3端口;2.设置按键的上拉电阻,使其处于高电平状态;3.设置按键的下降沿触发外部中断,以便检测按键的按下事件。
其他部分:1.设置蜂鸣器接到P0.0端口,并使用普通电阻限流;2.设置LED指示灯接到P0.7端口。
三、软件设计部分1.初始化函数:初始化P0、P1、P2、P3口的状态;2.DS1302驱动函数:包括初始化DS1302芯片和读写DS1302寄存器的函数;3.74HC595驱动函数:包括初始化74HC595芯片,以及向74HC595芯片发送8位数据的函数;4.数码管显示函数:将时分秒数据按位转换为对应的数字和状态,并调用74HC595驱动函数显示;5.按键检测函数:检测按键的按下事件,并根据按键事件的不同触发不同的操作;6.报警函数:当设定时间到达时,将触发报警声,并控制LED灯闪烁;7.主函数:循环读取DS1302时间,并更新数码管显示,检测按键事件,触发报警。
51单片机实验手册吉林大学2018-6-3目 录1. 51单片机实验板介绍 (3)1.1各个模块介绍 (4)2. Keil工程建立 (5)3.实验板的配置与程序烧写 (10)3.1实验板的配置 (10)3.2烧写软件驱动的安装 (12)3.2烧写软件程序 (14)4.实验一8个led流水灯 (17)5.实验二数码管动态显示实验 (20)1.51单片机实验板介绍USB数据线接口九针串口接口PS2接口温度传感器接口独立按键图1-1 模块功能示意图1图1-2 模块功能示意图2 1.1各个模块介绍1:单片机芯片2:复位模块3:单片机晶振4:MAX232串口转换芯片5:9针串口6:USB接口7:电源插座8:下载芯片ch3409:电源开关10:MAX485芯片11:继电器模块12:蜂鸣器模块13:L6219步进电机驱动芯片14:74HC595驱动芯片15:五线四相步进电机驱动芯片16:点阵模块18:138译码器19:2*4位共阴数码管20:EEPROM 芯片,AT24C0221:74HC165扩展芯片22:74HC595数据输出接口:23:74HC595驱动芯片24:74HC595驱动芯片25:NE555模块26:DS1302时钟模块27:4*4矩阵按键模块28:8个独立按键29:交通灯模块30:AD/DA模块31:温度传感器接口32:红外传感器接口33:PS2接口32:AT下载接口2.Keil工程建立第一步:打开Keil编译器:创建项目:Project------New uVision Project第二步:创建一个文件夹来放工程相关的文件,给工程项目命名,点击保存:第三步:选择芯片类型,我们虽然使用的是STC90C516RD 或 STC89C52RC的单片机,但这里我们选择ATMEL------AT89C52这个芯片就行。
因为都是51的内核,STC和 ATMEL没有什么区别,只是厂商不同罢了。
选择完对应的芯片之后,点击OK。
三极管驱动共阴数码管1. 引言共阴数码管是一种常见的数字显示装置,广泛应用于电子产品、仪器仪表等领域。
为了实现对共阴数码管的驱动,我们可以使用三极管来控制其亮灭状态。
本文将介绍三极管的原理及其在驱动共阴数码管中的应用。
2. 三极管的基本原理2.1 NPN型和PNP型三极管三极管是一种半导体器件,由三个掺杂不同类型的半导体材料组成。
根据掺杂类型的不同,可分为NPN型和PNP型两种。
NPN型三极管由两个P型半导体夹着一个N型半导体构成,而PNP型三极管则相反,由两个N型半导体夹着一个P型半导体构成。
2.2 三极管的引脚及符号表示无论是NPN型还是PNP型三极管,它们都有三个引脚:发射极(Emitter)、基极(Base)和集电极(Collector)。
在电路图中,NPN型三极管用如下符号表示:E|||B/ \/ \| |C ||PNP型三极管则用类似的符号表示,只是箭头的方向相反。
2.3 三极管的工作原理三极管的工作原理基于PN结和NPN结的特性。
当正向偏置(即正电压施加在PN结上)时,PN结会导致电子从N区域流向P区域,同时空穴从P区域流向N区域。
这种流动形成了电流。
在三极管中,基极-发射极之间的电压为正时,会使得发射极-集电极之间形成一个导通通道,从而允许电流通过。
而当基极-发射极之间的电压为负时,导通通道关闭,电流无法通过。
3. 三极管驱动共阴数码管3.1 共阴数码管简介共阴数码管是一种常见的七段显示器件,在其内部有七个LED发光二极管组成。
每个LED代表一个数字或字符段。
共阴数码管具有共阴接法,意味着它们的负级端都连接在一起,并与地(GND)相连。
当某个LED被激活时,通电会使其亮起。
3.2 三极管驱动共阴数码管的原理通过控制三极管的导通与截止状态,我们可以实现对共阴数码管的驱动。
在一个共阴数码管中,每个LED段都与一个三极管的集电极相连。
当三极管导通时,相应的LED段也会被激活,从而显示数字或字符。
三极管驱动共阴数码管任务背景数码管是一种常见的数字显示器件,广泛应用于各种计数和显示场合。
其中,共阴数码管是一种常见的类型,它由多个LED组成,每个LED都可以独立控制。
为了实现对共阴数码管的驱动,我们可以利用三极管来控制LED的亮灭。
三极管简介三极管(Transistor)是一种半导体器件,由三个区域组成:发射区(Emitter)、基区(Base)和集电区(Collector)。
根据不同的接法和控制方式,三极管可以用作放大器、开关、振荡器等。
在本任务中,我们将使用NPN型晶体管作为驱动电路中的三极管。
NPN型晶体管具有以下特点:•发射区与基区之间的电流增益较高•集电区与基区之间存在一个正向偏置电压•当基极接收到足够大的电流时,集电结就会打开共阴数码管原理共阴数码管由多个LED组成,在正常情况下,它们的阳极均连接在一起,并通过外部电源提供正向电压。
当LED的阳极接收到足够大的电流时,LED就会亮起。
为了控制共阴数码管的亮灭,我们需要将其连接到驱动电路中。
驱动电路由三极管、电阻和输入信号组成。
当输入信号为高电平时,三极管导通,将正向电压传递给共阴数码管,使其亮起。
当输入信号为低电平时,三极管截断,中断正向电压传递至共阴数码管,使其熄灭。
三极管驱动共阴数码管原理图驱动电路设计器件清单•NPN型晶体管•共阴数码管•适当大小的电阻•输入信号源(如Arduino)步骤1.根据共阴数码管的规格书确定所需的正向电压和工作电流。
2.选择合适的NPN型晶体管,并查找其规格书以了解最大可承受的集电区电流。
3.根据所需工作电流和晶体管规格计算所需限流电阻的值。
4.连接驱动电路:将晶体管的发射区连接到公共地(GND),将基区连接到限流电阻,再将限流电阻的另一端连接到输入信号源。
将集电区连接到共阴数码管的阳极。
5.将共阴数码管的所有LED的阴极分别连接到适当的电流限制电阻,并将电流限制电阻与公共地相连。
驱动示例假设我们要使用Arduino来驱动一个共阴数码管,其中涉及到4个数字显示。
单片机共阳极和共阴极
单片机共阳极和共阴极是指在使用LED等显示元件时,它们的阳极或阴极被连接到单片机的输出引脚上,以控制LED等元件的亮度和闪烁。
具体来说,共阳极指LED的阳极被连接到单片机的输出引脚上,当输出高电平时,LED亮起;共阴极则是LED的阴极被连接到单片机的输出引脚上,当输出低电平时,LED 亮起。
在使用共阳极和共阴极时,需要根据实际情况选择合适的驱动方式。
例如,在共阳极中,当单片机输出高电平时,需要使用NPN晶体管等开关器件将阳极接地,以使LED亮起;而在共阴极中,则需要使用PNP晶体管等开关器件将阴极连接到VCC电源上,以使LED亮起。
总之,共阳极和共阴极是单片机与LED等显示元件之间的连接方式,不同的连接方式需要使用不同的驱动方式,以实现LED的控制和显示效果。
三极管驱动共阴数码管摘要:1.三极管驱动共阴数码管的原理2.三极管驱动共阴数码管的接法3.驱动共阴数码管的注意事项4.实际应用案例正文:三极管驱动共阴数码管是一种常见的电子显示技术,被广泛应用于各种数字显示设备中。
它的核心元件是三极管,通过控制三极管的导通与截止,可以实现对共阴数码管的精确控制。
一、三极管驱动共阴数码管的原理共阴数码管是一种电子显示器件,它的工作原理是在一定的电压下,通过点亮或熄灭相应的发光二极管来显示数字。
而三极管则可以作为开关器件,通过控制其基极的电流,可以实现对共阴数码管的驱动。
当三极管的基极电流流过时,三极管会被激活,从而导通,使得其集电极和发射极之间的电阻减小,电流增大。
这样,共阴数码管就可以被点亮。
反之,当三极管的基极电流消失时,三极管就会截止,使得其集电极和发射极之间的电阻增大,电流减小,共阴数码管就会熄灭。
二、三极管驱动共阴数码管的接法在实际应用中,三极管驱动共阴数码管的接法一般为每路LED 后面接三极管的集电极,发射极接地。
基集接控制信号。
也就是说基集有信号时,三极管饱和导通,也就是说集电极和发射极相当于一个闭合的开关,这时数码管中的LED 就形成一个回路,LED 发光。
三、驱动共阴数码管的注意事项在驱动共阴数码管时,需要注意以下几点:首先,需要选择合适的三极管型号,以保证其电流放大倍数足够大,能够驱动共阴数码管。
其次,需要根据共阴数码管的规格,选择合适的分压电阻,以保证三极管的基极电压稳定。
最后,需要注意控制三极管的导通时间,以避免过度点亮共阴数码管,造成其损坏。
四、实际应用案例在实际应用中,三极管驱动共阴数码管的例子非常多。
比如,在电子钟表、计数器、电子秤等设备中,都可以看到三极管驱动共阴数码管的应用。
此外,在一些高级的数字显示设备中,也可以看到三极管驱动共阴数码管的应用,如液晶显示屏、LED 显示屏等。
目录一、设计题目和要求: (2)二、设计目的: (2)三、设计内容: (3)四、课程设计心得体会 (25)五、参考文献 (26)六、课程设计指导教师评审标准及成绩评定 (27)附件1:秒表原理图(实际接线图) (28)附件2:仿真图1 (30)附件3:仿真图2 (31)一、设计题目和要求:题目三:秒表应用AT89C51的定时器设计一个2位的LED数码显示作为“秒表”:显示时间为00~99s,每秒自动加1,设计一个“开始”键,按下“开始”键秒表开始计时。
设计一个“复位”键,按下“复位”键后,秒表从0开始计时。
任务安排:李座负责绘制电路原理图;梁宗林负责收集资料及电子版整理;付忠林负责程序和仿真。
二、设计目的:1.进一步掌握AT89C51单片机的结构和工作原理;2.掌握单片机的接口技术及外围芯片的工作原理及控制方法;3.进一步掌握单片机程序编写及程序调试过程,掌握模块化程序设计方法;4.掌握PROTEUS仿真软件的使用方法;5.掌握LED数码管原理及使用方法。
6.掌握定时器、外部中断的设置和编程原理。
7.通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。
8.该课程设计通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零、复位功能,并同时可以用数码管显示。
三、设计内容:了解8051芯片的的工作原理和工作方式,使用该芯片对LED数码管进行显示控制,实现用单片机的端口控制数码管,显示分、秒,并能用按钮实现秒表起动、停止、清零功能,精确到1秒。
AT89C51单片机的主要工作特性:·内含4KB的FLASH存储器,擦写次数1000次;·内含28字节的RAM;·具有32根可编程I/O线;·具有2个16位可编程定时器;·具有6个中断源、5个中断矢量、2级优先权的中断结构;·具有1个全双工的可编程串行通信接口;·具有一个数据指针DPTR;·两种低功耗工作模式,即空闲模式和掉电模式;·具有可编程的3级程序锁定定位;AT89C51的工作电源电压为5(1±0.2)V且典型值为5V,最高工作频率为24MHz.AT89C51各部分的组成及功能:振荡器和时钟电路数据存储器128字节程序存储器14KBCPU 两个16位定时器计数器中断控制总线扩展控制器并行可编程I/O口可编程串行口内部总线外部中断扩展控制P0 P1 P2 P3 RXD TXD1.单片机的中央处理器(CPU )是单片机的核心,完成运算和操作控制,主要包括运算器和控制器两部分。
单片机答案第1章思考题及习题1参考答案一、填空1. 除了单片机这一名称之外,单片机还可称为或。
答:微控制器,嵌入式控制器.2.单片机与普通微型计算机的不同之处在于其将、、和三部分,通过内部连接在一起,集成于一块芯片上。
答:CPU、存储器、I/O口、总线3. AT89S51单片机工作频率上限为 MHz。
答:24MHz。
4. 专用单片机已使系统结构最简化、软硬件资源利用最优化,从而大大降低和提高。
答:成本,可靠性。
二、单选1. 单片机内部数据之所以用二进制形式表示,主要是A.为了编程方便B.受器件的物理性能限制C.为了通用性D.为了提高运算速度答:B2. 在家用电器中使用单片机应属于微计算机的。
A.辅助设计应用B.测量、控制应用C.数值计算应用D.数据处理应用答: B3. 下面的哪一项应用,不属于单片机的应用范围。
A.工业控制 B.家用电器的控制 C.数据库管理 D.汽车电子设备答:C三、判断对错1. STC系列单片机是8051内核的单片机。
对2. AT89S52与AT89S51相比,片内多出了4KB的Flash程序存储器、128B的RAM、11个中断源、1个定时器(且具有捕捉功能)。
对3. 单片机是一种CPU。
错4. AT89S52单片机是微处理器。
错5. AT89S51片内的Flash程序存储器可在线写入(ISP),而AT89C52则不能。
对6. 为AT89C51单片机设计的应用系统板,可将芯片AT89C51直接用芯片AT89S51替换。
对7. 为AT89S51单片机设计的应用系统板,可将芯片AT89S51直接用芯片AT89S52替换。
对8. 单片机的功能侧重于测量和控制,而复杂的数字信号处理运算及高速的测控功能则是DSP的长处。
对第2章思考题及习题2参考答案一、填空1. 在AT89S51单片机中,如果采用6MHz晶振,一个机器周期为。
答:2µs2. AT89S51单片机的机器周期等于个时钟振荡周期。
一、实训目的通过本次实训,使学生了解数码管的工作原理,掌握数码管驱动电路的设计方法,学会使用单片机或PLC等微控制器实现对数码管的控制,提高学生的实际动手能力和电子技术综合应用能力。
二、实训内容1. 数码管的结构与工作原理数码管是一种用来显示数字和字母的电子显示器件,通常由多个LED灯组成。
根据LED灯的连接方式,数码管分为共阴极和共阳极两种类型。
(1)共阴极数码管:LED灯的阴极相连,阳极分别独立引出,当给阳极加上高电平时,相应的LED灯点亮。
(2)共阳极数码管:LED灯的阳极相连,阴极分别独立引出,当给阴极加上低电平时,相应的LED灯点亮。
2. 数码管驱动电路设计(1)共阴极数码管驱动电路:使用译码器、驱动器和位选信号进行驱动。
(2)共阳极数码管驱动电路:使用译码器、驱动器和位选信号进行驱动。
3. 单片机控制数码管显示(1)51单片机控制数码管显示:编写程序,通过P1口输出位选信号,通过P2口输出段选信号,实现数码管显示数字0-9。
(2)PLC控制数码管显示:编写梯形图程序,通过输入/输出模块控制数码管显示。
三、实训步骤1. 准备实验器材:数码管、单片机或PLC、电源、导线等。
2. 设计数码管驱动电路,连接电路。
3. 编写单片机或PLC程序,实现数码管显示数字0-9。
4. 调试程序,观察数码管显示效果。
5. 改进程序,实现更多功能,如显示字母、动态扫描等。
四、实训结果与分析1. 数码管驱动电路设计成功,数码管显示正常。
2. 使用51单片机控制数码管显示数字0-9,程序运行正常。
3. 使用PLC控制数码管显示数字0-9,程序运行正常。
4. 通过实训,掌握了数码管的工作原理、驱动电路设计方法以及单片机或PLC控制数码管显示的基本技能。
五、实训心得1. 在本次实训中,我对数码管的结构和工作原理有了更深入的了解,掌握了数码管驱动电路的设计方法。
2. 通过编写单片机或PLC程序,实现了数码管显示数字0-9,提高了自己的编程能力。
目录摘要 (I)ABSTRACT (II)1 绪论 (1)1.1选题的背景 (1)1.2课题研究的目的和意义 (1)1.3本文的结构 (1)2 系统总体方案设计 (1)2.1总体方案设计 (2)2.2部分模块方案选择 (3)2.2.1单片机的选择 (3)2.2.2温度检测方式的选择 (3)2.2.3显示部分的选择 (4)2.2.4电源模块的选择 (4)3 硬件电路的设计 (4)3.1 硬件电路设计软件 (4)3.2系统整体原理图 (5)3.3单片机最小系统电路 (6)3.4单片机的选型 (7)3.5温度测量模块 (8)3.5.1 DS18B20概述 (8)3.5.2 DS18B20测温工作原理 (11)3.5.3 DS18B20温度传感器与单片机的接口电路 (12)3.6 显示模块 (13)3.7 按键以及无线遥控模块 (15)3.7.1按键的相关知识 (15)3.7.2 5伏带解码四路无线接收板模块 (16)3.8 报警及指示灯模块 (18)3.9 电源模块 (19)4 系统软件设计及仿真部分 (20)4.1软件设计的工具 (20)4.1.1程序编写软件 (20)4.1.2仿真软件 (21)4.2各模块对应的软件设计 (22)4.2.1显示模块的程序 (22)4.2.2温度测量的程序 (26)4.2.3报警系统程序 (32)4.2.4按键程序 (33)4.2.5总体程序 (35)5 实物制作 (37)5.1电源部分 (37)5.2单片机最小系统部分 (37)5.3 总体实物 (37)6 总结 (38)7 致谢 (39)参考文献 (40)附录一 (41)附录二 (49)基于单片机的温度测量系统摘要随着测温系统的极速的发展,国外的测量系统已经很成熟,产品也比较多。
近几年来,国内也有许多高精度温度测量系统的产品,但是对于用户来说价格较高。
随着市场的竞争越来越激烈,现在企业发展的趋势是如何在降低成本的前提下,有效的提高生产能力。
51单片机:数码管c代码集合/*点亮第一个数码管,因为板子是自已做的,到电子城买数码管时说好要共阴的,拿来测时才发现是共阳的。
*///------------------------------------------------------------/*#include ;#define uchar unsigned charsbit duan=P2^5 ; //注意,有分号sbit wei=P2^6; //注意,有分号+P是大写的,若你写成小写的则会提示说找不到const unsigned chartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //共阳极数码管数组,请注意,我使用的共阳极的数码管,如果你是用买的现成板,一般是使用共阴极的void main(){duan=1;P0=table[1];duan=0;wei=1;P0=0x01;wei=0;while(1);}*///-----------------------------------------------------------------/*//静态显示,第一个数码管显示1#include ;sbit duan=P2^5;sbit wei=P2^6;void main(){duan=1;P0=0xF9; //共阳极数码管显示1的编码值是F9,如果你是买的开发板(共阴的数码管)则为0x06;duan=0;wei=1;P0=0x01; //选中第1个数码管wei=0;while(1); //一直显示,以便我们观察}*///-----------------------------------------------------------------/*//静态显示,全为1#include ;sbit duan=P2^5;sbit wei=P2^6;void main(){duan=1;P0=0xF9; //共阳极数码管显示1的编码值是F9,如果你是买的开发板(共阴的数码管)则为0x06;duan=0;wei=1;P0=0xff; //选中所有的数码管wei=0;while(1); //一直显示,以便我们观察}*///-----------------------------------------------------------------//静态显示:从0到F (所有的数码管)#include ;#define uchar unsigned charsbit duan=P2^5 ; //注意,有分号+P是大写的,若你写成小写的则会提示说找不到sbit wei=P2^6;const unsigned chartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //数码管数组void delay(int x){int a,b;for(a=x;a>;0;a--)for(b=110;b>;0;b--);}void main(){while(1){uchar n=0;for(n=0;n;#include ; //LED灯用到移动关键字crol,调用此关键字#define uchar unsigned charconst unsigned chartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //数码管数组sbit wei=P2^6;sbit duan=P2^5;void delay(uchar x){uchar a,b;for(a=x;a>;0;a--)for(b=110;b>;0;b--);}void LED(){uchar a,temp;temp=0xfe;for (a=8;a>;0;a--) //循环8次,即流水灯8个循环8次即可点亮8个{P1=temp;temp=_crol_(temp,1); //移动delay(200);}delay(5);temp=0x7f;for (a=8;a>;0;a--) //循环8次,即流水灯8个循环8次即可点亮8个{P1=temp;temp=_crol_(temp,-1); //移动delay(170);}}void scan(){uchar n=0;for(n=0;n。
三极管驱动共阴数码管三极管驱动共阴数码管是一种常见的电子电路设计,适用于显示数字的应用场景。
在这篇文章中,我将详细介绍三极管驱动共阴数码管的原理、电路设计和使用注意事项。
三极管是一种重要的电子器件,由发射极、基极和集电极组成。
它可以根据基极电流的大小来控制集电极电流的变化。
三极管有不同的工作模式,包括共发射、共基和共集模式。
在三极管驱动共阴数码管电路中,我们通常使用共集模式。
共阴数码管是一种常用的数字显示设备,它由多个发光二极管组成,可以显示数字0-9。
共阴数码管的最大特点是共用一个阴极,各个发光二极管的阳极分别相连。
通过控制各个发光二极管的阴极电流大小,可以实现数字的显示。
三极管驱动共阴数码管的原理很简单,通过三极管的共集模式,可以实现对各个发光二极管的阴极电流的控制。
当某个三极管的基极接通时,该三极管的集电极与该发光二极管的阴极相连,电流可以通过三极管流入阴极,使该发光二极管点亮。
当某个三极管的基极断开时,该三极管的集电极与该发光二极管的阴极断开,电流无法流入阴极,该发光二极管熄灭。
为了驱动多个共阴数码管,我们可以设计一个简单的电路。
首先,我们需要一个数字信号源,用来控制哪个数码管点亮。
我们可以使用微控制器或数字逻辑电路来生成数字信号。
其次,我们需要使用三极管来驱动各个数码管的阴极。
对于每个数码管,我们使用一个三极管来控制它的阴极电流。
最后,我们需要一个外部电源来为三极管和数码管提供电源。
当数字信号源生成一个高电平信号时,对应的三极管的基极接通,该数码管点亮;当数字信号源生成一个低电平信号时,对应的三极管的基极断开,该数码管熄灭。
通过改变数字信号源的高低电平,我们可以控制哪些数码管点亮,实现数字的显示。
但是,在实际应用中,我们需要注意以下几点。
首先,三极管的工作电流需要控制在适当的范围,过大的电流可能导致三极管损坏。
其次,数码管的电流限制器(电流限制电阻)需要根据数码管的工作电流来选取,以避免过大的电流流过数码管导致烧毁。
51单⽚机:独⽴按键与矩阵按键控制数码管⼀,独⽴按键注意⼀下⼏点>按下的时候,电压被拉低,所以IO⼝要传低电平( 0x0 )>按下的时候要消除抖动 ( 延时10ms ),在判断,是否还是低电平,再做业务处理下⾯这段程序,就是通过⼀个独⽴按键连接到p1⼝,控制静态数码管的⼀段进⾏亮和灭的切换。
#include <reg52.h>sbit key_control = P1^0;sbit led = P0^0;typedef unsigned char u8;typedef unsigned int u16;void delay( u16 i ){while( i-- );}void key_press(){if( key_control == 0x0 ) {delay( 1110 );if( key_control == 0x0 ){led = ~led;}while( !key_control );}}void main (){/*while( 1 ){if( key_control == 0x0 ) {delay( 1110 ); //⼤概10msif ( key_control == 0x0 ) {led = 1;}}else if( key_control == 0x1 ) {delay( 1110 );if ( key_control == 0x1 ) {led = 0;}}}*/led = 0;while( 1 ) {key_press();}}⼆,当按键⽐较多的时候,⽤矩阵按钮,因为如果不⽤矩阵按钮,⼀个独⽴按键需要⼀个IO⼝,浪费资源。
如: 16个独⽴按键需要16个io⼝,⽽16个矩阵按键(4x4,⼀共8个管脚)需要8个IO⼝下⾯的程序,通过16个矩阵按钮,控制静态数码管,显⽰0~F#include <reg52.h>#define GPIO_DIG P0 //段选数码管#define GPIO_KEY P1 //矩阵按键typedef unsigned char u8;typedef unsigned int u16;void delay( u16 i ){while( i-- );}u8 key_value;//静态数码管段码u8 character [16] = { 0xC0, 0xF9 , 0xA4 , 0xB0 , 0x99 , 0x92,0x82 , 0xF8 , 0x80 , 0x90 , 0x88 , 0x83,0xC6 , 0xA1 , 0x86 , 0x8E};void key_down(){u8 count = 0;//⾏列扫描判断哪个键被按下GPIO_KEY = 0x0F; //⾼四位全部输出低电平,低四位输出⾼电平-->判断被按下的按钮所在的列if( GPIO_KEY != 0x0F ) { //有按键按下delay( 1110 ); //消除抖动if( GPIO_KEY != 0x0F ){switch( GPIO_KEY ){case0x07:key_value = 0; //矩阵第1列的按钮被按下break;case0x0B:key_value = 1; //矩阵第2列的按钮被按下break;case0x0D:key_value = 2; //矩阵第3列的按钮被按下break;case0x0E:key_value = 3; //矩阵第4列的按钮被按下break;}GPIO_KEY = 0xF0; //⾼四位输出⾼电平,低四位输出低电平-->判断被按下的按钮所在的⾏switch( GPIO_KEY ){case0x70:key_value = key_value; //矩阵第1⾏的按钮被按下break;case0xB0:key_value = key_value + 4; //矩阵第2⾏的按钮被按下break;case0xD0:key_value = key_value + 8; //矩阵第3⾏的按钮被按下break;case0xE0:key_value = key_value + 12; //矩阵第4⾏的按钮被按下break;}GPIO_DIG = character[key_value];//如果⼀直按下按键,等待500ms,强制退出while( ( count < 50 ) && ( GPIO_KEY != 0xF0 ) ) {count++;}}}}void main (){while( 1 ) {key_down();}}。