自制单片机——数码管电路的制做与驱动

合集下载

数码管驱动电路的作用,数码管驱动电路设计原理图

数码管驱动电路的作用,数码管驱动电路设计原理图

数码管驱动电路的作用,数码管驱动电路设计原理图 数码管驱动电路的作用: 数码管驱动电路的作用主要是通过利用单片机控制LED数码管(发光二极管)电路,以实现数码管LED屏幕数字输出的动态显示效果。

数码管的分类: (1)按照数码管段数分类 数码管是一种半导体发光器件,其基本单元是发光二极管。

它按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(也就是多一个小数点显示); (2)按照数码管数字显示分类 按能显示多少个8可分为1位、2位、4位等等数码管; (3)按照数码管连接方式分类 按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。

共阳数码管与共阴数码管: 其中,共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。

共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。

当某一字段的阴极为高电平时,相应字段就不亮。

而共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。

共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。

当某一字段的阳极为低电平时,相应字段就不亮。

共阳数码管驱动电路示例: 并行LED数码管静态显示电路(共阳) 共阴数码管驱动电路示例: 串行LED数码管动态扫描显示电路(共阴) 更多共阳数码管与共阴数码管驱动电路,请点击如下链接浏览: elecfans/dianyuan/430166.html 下面提供一种数码管驱动电路设计,可以实现led数码管数字0~9控制输出。

工作原理: 如图1所示,电路由与非门74LS00、数码管驱动芯片74LS247组成。

10个按键组成输入电路,经过与非门电路编码后,输入数码管驱动芯片,驱动数码管显示相应的按键号。

设计按键编码电路时,先写出真值表,由真值表可写出下式: A={I1 -I3 -I5 -I7 - I9 }(大括号中,每个因子取反,一起共同取反) = I1+I3 +I5 +I7 +I9 B={I3 -I4 -I6 - I7}(大括号中,每个因子取反,然后一起共同取反) = I3+I4+I6+I7 C={I4 -I5 -I6 - I7}(大括号中,每个因子取反,然后一起共同取反) = I4 +I5 +I6+I7 D={I8 - I9 }(大括号中,每个因子取反,然后一起共同取反) = I8+I9 为了使电源电压不超过数码管承受电压范围,电源串联4个二极管后,加到数码管上,这样做,可以节省元件。

数码管驱动电路实训报告

数码管驱动电路实训报告

一、实训目的1. 理解数码管的基本工作原理和驱动方式。

2. 掌握数码管驱动电路的设计方法。

3. 提高动手能力和实际操作技能。

二、实训内容1. 数码管的结构及工作原理2. 数码管驱动电路的设计3. 数码管驱动电路的搭建与调试三、实训过程1. 数码管的结构及工作原理数码管是一种常用的显示器件,主要由七个笔画组成,分别为a、b、c、d、e、f、g,以及一个小数点dp。

数码管根据内部连接方式的不同,可分为共阴型和共阳型两种。

(1)共阴数码管:当对应笔画所在的阴极接地时,笔画会点亮;当阴极接高电平时,笔画熄灭。

(2)共阳数码管:当对应笔画所在的阳极接地时,笔画会点亮;当阳极接高电平时,笔画熄灭。

2. 数码管驱动电路的设计(1)共阴数码管驱动电路:以74HC595为例,介绍共阴数码管驱动电路的设计。

① 电路原理:74HC595是一款8位串行输入、并行输出的移位寄存器,其内部包含一个8位的移位寄存器和3个8位的锁存器。

通过将数据从串行输入端输入,经过移位寄存器传递,最后由并行输出端输出。

② 电路设计:将数码管的阴极与地相连,阳极分别与74HC595的8个并行输出端相连。

同时,将74HC595的串行输入端、时钟端、复位端与单片机相应端口相连。

(2)共阳数码管驱动电路:以CD4017为例,介绍共阳数码管驱动电路的设计。

① 电路原理:CD4017是一款10进制计数/分配器,具有10个输出端,可依次输出高电平。

当计数到10时,输出端重新从0开始计数。

② 电路设计:将数码管的阳极与地相连,阴极分别与CD4017的10个输出端相连。

同时,将CD4017的时钟端、复位端与单片机相应端口相连。

3. 数码管驱动电路的搭建与调试(1)搭建电路:按照设计好的电路图,将元器件连接到实验板上。

(2)调试电路:通过单片机编写程序,控制数码管显示相应的数字。

调试过程中,注意观察数码管显示效果,确保电路正常工作。

四、实训结果与分析1. 实训结果通过本次实训,成功搭建了共阴数码管和共阳数码管驱动电路,并实现了数字显示功能。

数码管电路的制作与驱动

数码管电路的制作与驱动

/txz01/blog怎样用单片机驱动LED数码管显示怎样用单片机驱动LED数码管显示片机驱动LED数码管有很多方法,按显示方式分,有静态显示和动态(扫描)显示,按译码方式可分硬件译码和软件译码之分。

静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据,显示数据稳定,占用很少的CPU时间。

动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。

这两种显示方式各有利弊;静态显示虽然数据稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多;动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节省线路板空间。

硬件译码就是显示的段码完全由硬件完成,CPU只要送出标准的BCD码即可,硬件接线有一定标准。

软件译码是用软件来完成硬件的功能,硬件简单,接线灵活,显示段码完全由软件来处理,是目前常用的显示驱动方式。

比较常用的显示驱动芯片有:74LS164 , CD4094+ULN2003(2803) ,74HC595+ULN2003(2803) , TPIC6B595,AMT9095B, AMT9595等许多。

另外,市场上还有一些专用的LED扫描驱动显示模块如MAX7219等,功能很强,价格稍高一些。

下面是一个用74LS164驱动显示的例子和一个用4094扫描驱动显示的例子:上例图中加了一个PNP型的三极管来控制数码管的电源,是因为164没有数据锁存端,数据在传送过程中,对输出端来说是透明的,这样,数据在传送过程中,数码管上有闪动现象,驱动的位数越多,闪动现象越明显。

为了消除这种现象,在数据传送过程中,关闭三极管使数码管没电不显示,数据传送完后立刻使三极管导通,这样就实现锁存功能。

这种办法可驱动十几个164显示而没有闪动现象。

这个例子是用4094做位选,用89C2051的P1口线做段驱动来扫描驱动9位数码管的显示。

由于4094只有8个输出口线,其中第九位是用CPU口线直接进行位选的。

数码管驱动电路的设计与制作实训目的

数码管驱动电路的设计与制作实训目的

数码管驱动电路的设计与制作实训目的数码管是一种常见的电子显示器件,广泛应用于各类电子设备中。

在本次实训中,我们将学习如何设计和制作一个数码管驱动电路,以掌握其工作原理和实际应用。

一、数码管基本原理数码管是一种由多个发光二极管组成的显示器件,可以显示数字、字母和符号等信息。

常见的数码管有共阳极和共阴极两种类型。

共阳极数码管的阳极连接在一起,共阴极数码管的阴极连接在一起。

数码管的显示原理是利用发光二极管的发光特性,通过控制阳极或阴极的通断来实现数字的显示。

例如,当需要显示数字“1”时,需要使数码管第二个发光二极管发光,此时共阳极数码管的第二个阳极接通,共阴极数码管的第二个阴极断开。

二、数码管驱动电路设计为了控制数码管的显示,需要设计一个驱动电路。

常用的数码管驱动电路有直接驱动电路和多路复用驱动电路两种。

1. 直接驱动电路直接驱动电路是将每个数码管的阳极或阴极分别接到芯片的GPIO 引脚上,通过控制引脚的高低电平来实现数码管的显示。

这种驱动电路简单易懂,但是需要占用较多的GPIO引脚,不适用于控制多个数码管的情况。

2. 多路复用驱动电路多路复用驱动电路是将多个数码管的阳极或阴极连接在一起,通过控制芯片的GPIO引脚和数码管的选择信号,来实现数码管的显示。

这种驱动电路可以控制多个数码管,但是需要进行复杂的信号处理,增加了设计难度。

三、数码管驱动电路制作在制作数码管驱动电路之前,需要准备好以下材料和工具:1. 数码管 x n个2. 74HC595芯片 x 1个3. 电阻220Ω x n个4. 电容0.1μF x 1个5. 面包板 x 1个6. 杜邦线若干7. 电路图设计软件制作步骤如下:1. 根据电路图设计软件,设计并绘制出数码管驱动电路的电路图。

2. 在面包板上按照电路图进行连线,连接数码管、74HC595芯片、电阻、电容等元件。

3. 将面包板连接到开发板上,通过程序控制GPIO引脚的高低电平,实现数码管的显示。

实验四--单片机驱动数码管显示

实验四--单片机驱动数码管显示

实验四单片机驱动数码管显示一实验目的1 学习单片机驱动数码管动态显示的电路设计和编程方法二实验原理1、单片机系统中常用的显示器有:发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等。

LED、LCD显示器有两种显示结构:段显示和点阵显示。

七段数码管显示为了显示数字或字符,必须对数字或字符进行编码。

七段数码管加上一个小数点,共计8段。

因此为LED显示器提供的编码正好是一个字节。

字母一般用米字型。

编码表:0x3f 0x06 0x5b 0x4f 0x66 0x6d0 1 2 3 4 50x7d 0x07 0x7f 0x6f 0x77 0x7c6 7 8 9 A B0x39 0x5e 0x79 0x71 0x00C D E F 无显示七段数码管对应八位由低到高:a,b,c,d,e,f,g,dp例:数码管显示2则要点亮a,b,g,e,d段,对应的八位是01011011数码管动态显示方式是将所有显示位的段选择线并联在一起,有统一的I/O资源来控制。

各个数码管公共端也有I/O资源来控制,分时的选通各个数码管进行动态显示。

每个瞬间只能选通一个数码管,人眼的暂留时间为,每个数码管的选通时间必须在以内,通常选择15ms~20ms。

电路图见实验附图。

三实验内容理解动态显示电路图,参考驱动程序,单片机P0口作段码输出控制,P1口作位码控制,使单片机驱动6个7段数码管输出实验当天年、月、日六位数字。

四、实验步骤(1)单片机最小应用系统1的P0口接段码口a~h,P1口接位码口S1~S6。

(2)在KEIL软件下编写程序并调试,完成实验内容要求。

(3)下载程序,通过实验箱验证设计电路和编写的程序是否达到实验要求。

下载程序,通过实验箱验证设计电路和编写的程序是否达到实验要求。

五参考程序与电路汇编语言参考程序:ORG 0000HLJMP STARTORG 0030HSTART: MOV R0,#30HMOV R1,#40HMOV 30H,#1MOV 31H,#2MOV 32H,#1MOV 33H,#1MOV 34H,#2MOV 35H,#0START1: MOV DPTR,#TABMOV R3,#6LOOP: MOV A,@R0MOVC A,@A+DPTRMOV @R1,AINC R0INC R1DJNZ R3,LOOPMOV R3,#6MOV R1,#40HMOV A,#20HLOOP1: MOV P1,@R1MOV P2,AACALL DELAYMOV P2,#00HRR AINC R1DJNZ R3,LOOP1LJMP START1TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,58H,5EH,7BH,71H,00H,40H DELAY: MOV R4,#100LOOP2: DJNZ R4,LOOP2RETENDC语言参考程序:#include <reg51.h>#include <intrins.h>unsigned char code table[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};unsigned char date[]={1,2,1,1,2,0};void delay(){unsigned char j;for(j=0;j<=100;j++);}void main(){unsigned char i,a;while(1){a=0x40;for(i=0;i<6;i++){P1=table[date[i]];a=_cror_(a,1);P2=a;delay();P2=0x00;}}}数码管动态显示电路图(位选信号为高电平,段选信号为高电平):。

数码管驱动与程序设计

数码管驱动与程序设计

数码管驱动与程序设计正文:一:引言数码管是一种常见的显示器件,广泛应用于各类电子设备中。

本文将介绍数码管驱动原理及程序设计方法。

二:数码管基础知识2.1 数码管结构和工作原理:包括共阳极与共阴极两种类型的接线方式以及其对应的工作原理。

2.2 数字编码格式:介绍BCD(Binary-Coded Decimal)和7段数字编码等常见数字表示形式。

三:数位扫描技术3.1 静态扫描法:详解静态扫描法实现多个数位同时显示,并给出相应示意图。

3.2 动态行列交替刷新法:讲解动态行列交替刷新法实现高亮度且节省IO口资源,并提供相关代码片段。

四:驱动芯片选择与使用指南4.1 常用驱动芯片推荐:4.1.a 具有集成锁存功能的74HC595;4.1.b 双向移位寄存器CD4099B;4.c 拓展型单通道LED控制IC MAX7219/722X系列。

五:程序设计方法论述5.1 C语言下直接操作I/O端口进行控制:通过C语言内嵌汇编或者直接操作寄存器的方式进行数码管驱动。

5.2使用Arduino库函数:介绍使用Arduino开发板及其相关库函数实现简单快捷的数码管控制。

六:案例分析6.1 数字时钟设计与实现: 详述数字时钟系统中涉及到的硬件电路和软件程序,并给出完整代码示例。

6.2 温度显示仪表盘设计与实现: 分析温度传感器数据采集以及相应显示方法,提供可参考代码片段。

七:附件:本文档所涉及内容包含以下附件:7.1 示意图:静态扫描法原理示意图;7.2 示例源代码:基于C语言编写的数位扫描程序;7.3 Arduino Library文件等。

注释:- BCD(Binary-Coded Decimal)二进制编码十进制表示形式,将每个十进制数字用4位二进制来表示。

- 共阳极(Common Anode)是指所有LED共享一个正级端口而各自独立地连接至负级或GND引脚;共阴极(Common Cathode)则反之。

数码管驱动程序实例

数码管驱动程序实例

数码管驱动程序实例介绍数码管是一种常见的显示设备,通常用于显示数字和部分字母。

为了控制数码管的显示内容,我们需要编写一段驱动程序来控制数码管的工作。

本文将介绍一个数码管驱动程序的实例,包括硬件连接、代码编写和运行效果展示。

通过学习这个实例,你将了解到如何使用Arduino来驱动数码管进行数字显示。

硬件连接首先,我们需要准备以下硬件组件:•Arduino开发板•数码管(常见的有共阳极和共阴极两种类型)接下来,按照以下步骤进行硬件连接:1.将Arduino开发板与电脑连接,并打开Arduino IDE。

2.将数码管的引脚与Arduino开发板上的数字引脚相连。

具体连接方式取决于你使用的数码管类型,请参考相关资料或数据手册。

3.使用面包板或杜邦线等工具完成引脚连接。

代码编写完成硬件连接后,我们可以开始编写代码了。

以下是一个简单的数码管驱动程序示例:// 引入库#include <SevSeg.h>// 创建一个SevSeg对象并指定引脚SevSeg sevseg;void setup() {// 初始化数码管sevseg.begin(COMMON_CATHODE, 4, 3, 2, 1, 0, 6, 7, 5, 8);}void loop() {// 显示数字0-9for (int i = 0; i < 10; i++) {sevseg.setNumber(i);sevseg.refreshDisplay();delay(1000);}}代码解析:1.首先,我们引入了一个名为SevSeg的库,该库提供了控制数码管的函数和方法。

2.在setup()函数中,我们初始化了一个SevSeg对象,并指定了数码管的引脚连接方式。

这里使用的是共阳极数码管,如果你使用的是共阴极数码管,则需要将COMMON_CATHODE改为COMMON_ANODE。

3.在loop()函数中,我们通过一个循环来显示数字0-9。

单片机控制的LED数码管动态驱动电路图

单片机控制的LED数码管动态驱动电路图

单片机控制的LED数码管动态驱动电路图
现在让我们用实验板上的两个数码管来做一个循环显示00~99数字的实验,先来完成必要的硬件部分,
数码管有共阴和共阳的区分,单片机都可以进行驱动,但是驱动的方法却不同,并且相应的0~9的显示代码也正好相反。

首先我们来介绍两位共阳数码管的单片机驱动方法,电路如下图:
网友可以看到:P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过IN4148二极管和驱动三极管给数码管相应的位供电,这时只要P0
口送出数字的显示代码,数码管就能正常显示数字。

因为要显示两位不同的数字,所以必须用动态扫描的方法来实现,就是先个位显示1毫秒,再十位显示1毫秒,不断循环,这样只要扫描时间小于1/50秒,就会因为人眼的视觉残留效应,看到两位不同的数字稳定显示。

下面我们再介绍一种共阴数码管的单片机驱动方法,电路如下图:
网友可以看到:+5V通过1K的排阻直接给数码管的8个段位供电,P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,相应的位可以吸入电流。

单片机的P0口输出的数据相当于将数码管不要显示的数字段对地短路,这样数码管就会显示需要的数字。

网友可以看到,共阴数码管的硬件更简单,所以在批量生产时,硬件开销小,节省PCB面积,减少焊接工作量,降低综合成本,所以采用共阴数码管更有利于批量生产,现在销售的试验板都是采用共阴数码管了。

单片机数码管程序编写 -回复

单片机数码管程序编写 -回复

单片机数码管程序编写-回复什么是单片机数码管?单片机数码管是一种显示设备,用于在单片机系统中显示数字、字符等信息。

它由多个发光二极管(LED)组成,每个发光二极管可以独立地发光。

常见的数码管有7段共阳数码管和8段共阴数码管两种。

7段共阳数码管是指有7个发光二极管组成每个数字可显示0-9。

而8段共阴数码管则多了一个额外的发光二极管,可以用于显示字母和特殊字符。

单片机数码管也可以按照位数进行分类,如4位数码管、8位数码管等。

不同位数的数码管用于显示不同范围的数字。

编写单片机数码管程序的基本步骤如下:1. 硬件准备:a. 连接数码管:将数码管与单片机进行连接。

具体连接方法取决于使用的数码管类型和单片机型号。

b. 设置数码管电源:确保数码管接收到足够的电源供应。

这可以通过连接适当的电源电压和接地线来完成。

2. 确定显示内容:a. 决定要在数码管上显示的内容,如数字、字母、特殊符号等。

b. 根据需要,确定要显示的位数。

3. 编写数码管驱动程序:a. 引入相关的头文件,包括单片机与数码管通信所需的寄存器定义和相关函数。

b. 定义变量,用于存储要显示的内容。

c. 编写初始化函数,用于初始化数码管的相关设置,如设置数码管为输出模式、选择数码管类型等。

d. 编写显示函数,用于在数码管上显示内容。

这包括将要显示的内容转换为对应的数码管码值,并通过设置相应的端口输出来控制数码管的亮灭。

e. 如果需要实现动态显示,可以使用定时器中断的方式来刷新显示内容。

4. 编写主程序:a. 调用初始化函数,初始化数码管的相关设置。

b. 在一个循环中,调用显示函数,以指定的时间间隔刷新显示内容。

5. 调试和测试:a. 将编写的程序下载到单片机上。

b. 检查连接是否正确,并观察数码管是否显示出预期的内容。

c. 根据实际需求进行调试和测试,修正可能存在的问题。

6. 优化和扩展:a. 对程序进行优化,尽量减少资源占用和提高性能。

b. 如果需要,可以扩展程序功能,增加显示内容的种类和方式。

单片机驱动数码管设计详解(用74HC595实现)

单片机驱动数码管设计详解(用74HC595实现)

单⽚机驱动数码管设计详解(⽤74HC595实现)简单设计了⼀个单⽚机驱动数码管的电路,该设计中只使⽤了4位数码管,占⽤了单⽚机3个IO⼝,如果驱动芯⽚全⽤满可以驱动8位数码管。

仅供初学者分享学习。

1. 数码管显⽰设计本设计使⽤了⼀个4位的数码管,为共阳型,为了节省单⽚机的IO⼝,使⽤了两⽚74HC595作为数码管的驱动芯⽚,共占⽤3个IO⼝。

74HC595部分电路图如下:与单⽚机相连接的三个脚分别为:HC_DAT,HC_RCK,HC_CLK。

两⽚595采⽤级联⽅式,即U2的第9脚接到U3的第14引脚。

2. 74HC595简介74HC595是8位的移位寄存器,串⼊并出,并具有锁存功能,被⼴泛的⽤于数码管、点阵的驱动电路中。

其管脚介绍如下:15:数据输出A-接数码管数据A段;1:数据输出B-接数码管数据B段;2:数据输出C-接数码管数据C段;3:数据输出D-接数码管数据D段;4:数据输出E-接数码管数据E段;5:数据输出F-接数码管数据F段;6:数据输出G-接数码管数据G段;7:数据输出H-接数码管数据H段;16:电源正脚-接电源正;8:电源负脚-接电源负;14:数据输⼊脚-接单⽚机管脚;12:数据锁存时钟-接单⽚机管脚;11:数据输⼊时钟-接单⽚机管脚;13:使能输出脚-低电平有效,接低电平;10:数据清零-不清零,接⾼电平;9:数据级联输出-接下⼀⽚595的数据输⼊脚;74HC595的真值表如下:知道了74HC595的引脚定义和真值表,那该如何编程呢?下⾯重点来了,通过时序图来编程。

看重点!!!3. 74HC595时序图我是重点!我是重点!我是重点!通过时序可以看出:1. SCK是上升沿的时候要把数据写⼊;2. RCK是上升沿的时候数据才能锁存显⽰;3. 有数据操作的过程中RESET必须是⾼电平;4. EN必须是低电平,595才能⼯作;知道了以上4点就可以写程序了。

其中3、4条是硬件连接上的事情(也可以⽤单⽚机的IO⼝来连接,这样的话可以随时控制74HC595的⼯作与否情况)。

单片机驱动LED数码管电路及编程

单片机驱动LED数码管电路及编程

单片机驱动LED数码管电路及编程单片机I/O的应用最典型的是通过I/O口与7段LED数码管构成显示电路,我们从常用的LED显示原理开始,详尽讲解利用单片机驱动LED数码管的电路及编程原理,目的在于通过这一编程范例,让初学者了解I/O口的编程原理,意在起举一反三,抛砖引玉的作用。

左图为实验电路图,我们使用80C51单片机,电容C1、C2和CRY1组成时钟振荡电路,这部分基本无需调试,只要元件可靠即会正常起振。

C3和R1为单片机的复位电路,80C51的并行口P1.0-P1.7直接与LED数码管的a-f引脚相连,中间接上限流电阻R3-R10。

值得一提的是,80C51并行口的输出驱动电流并非很大,为使LED有足够的亮度,LED数码管应选用高亮度的器件。

此外,图中的80C51还可选用C51系列的其它单片机,只要它们的指令系统兼容C51即可正常运行,程序可直接移植,例如选用低价Flash型的AT89C1051或2051(详细技术手册)等,它们的ROM可反复擦写,非常适合作实验用途。

程序清单:01 START: ORG 0100H ;程序起始地址02 MAIN: MOV R0,#00H ;从“0”开始显示03 MOV DPTR,#TABLE ;表格地址送数据指针04 DISP: MOV A,R0 ;送显示05 MOVC A,@A+ADPTR ;指向表格地址06 MOV P1,A ;数据送LED07 ACALL DELAY ;延时08 INC R0 ;指向下一个字符09 CJNE R0,#0AH,DISP ;未显示完,继续10 AJMP MAIN ;下一个循环11 DELAY: MOV R1,#0FFH ;延时子程序,延时时间赋值12 LOOP0: MOV R2,#0FFH13 LOOP1: DJNZ R2,LOOP114 DJNZ R1,LOOP015 RET ;子程序返回16 TABLE: DB 0C0H ;字型码表17 DB 0F9H18 DB 0A4H19 DB 0B0H20 DB 99H21 DB 92H22 DB 82H23 DB 0F8H24 DB 80H25 DB 90H26 END ;程序结束。

数码管驱动电路的设计与制作实训报告

数码管驱动电路的设计与制作实训报告

数码管驱动电路的设计与制作实训报告一、引言数码管广泛应用于显示和计数器等电子设备中,其驱动电路的设计和制作对于数字显示的稳定性和可靠性至关重要。

本实训旨在通过设计和制作数码管驱动电路,掌握相关电路设计技巧和实践能力。

二、实训目标理解数码管的基本原理和工作方式。

学习数码管驱动电路的设计要点和指标。

掌握数码管驱动电路的电路图设计和焊接制作技巧。

验证和调试数码管驱动电路的功能和性能。

三、实训过程理论学习:对数码管的工作原理、常见接口和驱动电路进行学习。

设计电路图:根据需求和规格要求,设计数码管驱动电路的电路图。

元件采购和准备:选择合适的元件并进行采购,准备焊接所需材料和工具。

电路焊接:按照设计电路图进行焊接制作,确保焊接质量和连接正确性。

电路调试:将电路连接供电并逐步调试,确保数码管正常显示和驱动电路稳定运行。

功能测试:测试电路的各项功能,包括正常计数、显示切换等。

总结与反思:总结实训过程中的经验和教训,思考改进的方法和方向。

四、实训结果成功设计和制作了数码管驱动电路,完成了所需的功能要求。

数码管显示稳定、清晰,驱动电路响应灵敏,工作可靠。

实训过程中遇到的问题及解决方案:(列举具体问题和解决方案)五、体会与收获通过本实训的设计和制作过程,我对数码管驱动电路有了更深入的了解,掌握了一些电路设计和焊接制作的技巧。

同时,我也对实际电路的调试和问题解决有了更多的经验和思考。

这次实训让我更加熟悉了数字电路的原理和实践操作,提高了我的动手能力和问题解决能力。

六、结论本次实训通过设计和制作数码管驱动电路,增强了我在数字电路方面的理论实践能力。

我深刻理解了数码管的原理和驱动电路的设计要点,并通过实际操作掌握了相关技能。

这将对我今后的电子设计和工程实践有着积极的影响。

七、感谢辅导老师和实训指导人员的悉心指导和帮助,为实训过程提供了重要的支持和指导。

单片机驱动LED数码管的方法

单片机驱动LED数码管的方法

系统装置技术与应用TECHNOLOGY & APPLICATION单片机静态输出驱动和动态输出静态驱动都可以分为单片机直接七段码输出驱动和单片机8421码输出七段译码驱动。

动态扫描驱动显示可以分为单片机七段码输出动态位选驱动、单片机8421码输出七段译码动态位选驱动、串行移位输出扫描驱动等,现分析这几种驱动方法的工作原理及优缺点。

工作原理及优缺点1. 单片机静态输出驱动LED七段数码管工作原理及优缺点单片机静态输出驱动LED七段数码管是指给每位数码管的笔段加驱动信号,以显示数据。

它分为单片机直接七段码输出驱动和单片机8421码输出七段译码驱动,工作原理及优缺点如下。

1) 单片机直接七段码输出驱动。

单片机将要显示的数据通过程序译成七段码,经单片机I/O口直接驱动LED数码管。

显示1位LED数码(含小数点)需要8位I/O口驱动,除显示十进制数、十六进制数外,还可以显示一部分特定的字符,如“H”、“J”、“L”、“n”、“o”、“P”、“q”及“U”等字符。

2) 单片机8421码输出七段译码驱动。

单片机将要显示的十进制数或十六进制数的8421码直接从I/O口输出,经过七段译码器驱动LED数码管。

显示1位LED数码(不含小数点)只需要4位I/O口驱动,但需要外部译码器支持,一般只能显示十进制数、十六进制数对应的数字、字符。

控制程序与直接七段码输出驱动相似,省去了“查找对应的七段码”过程。

2. 单片机动态输出静态驱动LED七段数码管工作原理及优缺点单片机动态输出静态驱动LED七段数码管也是单片机驱动LED数码管的方法文/福建省建阳市供电有限公司 蓝厚荣单片机应用于工业控制等方面时,经常要用LED七段数码管显示一些数据。

单片机驱动LED数码管的方法有很多种,可以分为静态输出驱动、动态输出静态驱动和动态扫描驱动等几种方法。

94 | 电气时代・2008年第4期www.eage.com.cn系统装置技术与应用TECHNOLOGY & APPLICATION2008年第4期・电气时代 | 95指给每位数码管加驱动信号,以显示数据。

单片机数码管的动态驱动

单片机数码管的动态驱动

实验三数码管的动态驱动一、实验目的:1、了解数码管LED的工作原理;2、掌握数码管的动态扫描驱动程序设计方法。

二、实验原理:数码管显示器内部由7段条形的LED和一个右下角圆形的用作小数点的LED组成,一共有8段,恰好是用于8位的并行系统。

通过控制点亮不同组合的字段,就可以显示不同的数字。

数码管显示器有共阴极和共阳极两种。

当共阴极显示的公共阴极接地时,在某段的阳极上电压为高电平时,该段被点亮。

EZMCU实验板上的6个数码管,均为共阴极接法。

三、实验内容:1、编写程序,使某位数码管闪烁而其余正常点亮控制小数点的点亮。

#include<reg52.h> //从左至右显示“8051AF”且使某位闪烁,某位小数点闪烁,其余正常#define uint unsigned int#define uchar unsigned charuchar code DispSeg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,};uchar code table[]={8,0,5,1,0xA,0xF};uchar count;void delayms(uint xms){uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void display(void){uchar num=0x80;uchar *num1=table;while(num!=0x02){if(count<50){P0=DispSeg[*num1];if(num&0x20)P0|=0x80;}else{if(num&0x80){P0=0;}else{P0=DispSeg[*num1];}}num1++;P1=num;num=num>>1;delayms(1);}}void main(void){while(1){display();count++;count%=80;}}2、使用查表方法在数码管上产生广告灯的效果#include<reg52.h> //数码管实现广告灯效果#define uint unsigned int#define uchar unsigned charuchar code DispSeg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x38,0x00 };uchar code table1[]={2,0,1,3,0x10,0x10};uchar code table2[]={0x11,0x11,0x11,0x11,0x11,0x11}; uchar count,count1;void delayms(uint xms){uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void display(void){uchar num=0x80,i=5;uchar *num1=table1,*num2=table2;while(num!=0x02){if(count<50){P0=DispSeg[*num1];if(num&0x80)P0|=0x80;}else{P0=DispSeg[*num2];}num1++;num2++;P1=num;num=num>>1;delayms(1);}}void main(void){while(1){display();count++;count%=80;}}四、实验小结:数码管的使用在生活中非常普遍。

单片机驱动数码管电路

单片机驱动数码管电路

单片机驱动数码管电路数码管是一种常见的电子显示器件,它可以显示数字、字母和其他特殊字符。

而单片机作为一种集成电路,能够通过编程来控制外部设备的工作,因此可以很方便地用来驱动数码管。

本文将介绍单片机驱动数码管电路的原理和实现方法。

一、数码管的工作原理数码管由若干个发光二极管(LED)组成,每个发光二极管都有两个引脚:一个是正极,用于接收电流;另一个是负极,用于接收控制信号。

数码管通常分为共阳极和共阴极两种类型。

共阳极数码管的正极连接在Vcc(正电源)上,负极通过控制信号接地。

当控制信号接地时,相应的发光二极管会亮起;当控制信号断开连接时,相应的发光二极管会熄灭。

通过控制不同的发光二极管,可以显示不同的数字或字符。

共阴极数码管与共阳极数码管相反,正极通过控制信号接地,负极连接在Vcc上。

二、单片机驱动数码管的原理单片机可以通过IO口输出高低电平来控制数码管的工作。

以共阳极数码管为例,当IO口输出高电平时,相应的数码管发光二极管亮起;当IO口输出低电平时,相应的数码管发光二极管熄灭。

为了实现多位数码管的显示,通常需要使用译码器。

译码器可以将单片机输出的数字信号转换为对应的控制信号,从而实现对数码管的驱动。

常用的译码器有BCD译码器和数码管驱动IC等。

三、单片机驱动数码管的实现方法1. 硬件连接将单片机的IO口与数码管的控制引脚连接。

通过接线将单片机的IO口与译码器的输入引脚相连,然后将译码器的输出引脚与数码管的控制引脚相连。

同时,将数码管的电源引脚与电源连接,确保正极连接在Vcc上,负极连接在GND上。

2. 编程控制在编程时,首先需要定义数码管显示的内容。

可以使用数组或变量来存储需要显示的数字或字符。

然后,将需要显示的内容转换为对应的译码器输入信号,通过单片机的IO口输出给译码器。

最后,通过循环控制,不断更新数码管的显示内容,实现动态显示效果。

四、总结通过单片机驱动数码管电路,可以实现对数码管的灵活控制。

4.自制单片机之四----数码管电路的制做与驱动

4.自制单片机之四----数码管电路的制做与驱动

4.自制单片机之四----数码管电路的制做与驱动2007-08-21 21:17数码管的使用方法与发光二极管没什么区别,只是把七或八只发光二极管组合在一个模件上组成了个8字和小数点,用以显示数字。

为了减少管脚,把各个发光管的其中同一个极接在一起作为共用点,因此就产生了共阳极和共阴极数码之说。

共阳管就是把各个发光管的正极接在一起,而共阴管就刚好相反。

见下图:一般来说大部分的逻辑IC的吸收电流要强于输出电流。

因此,大家都爱使用共阴极的数码管,因为可选的IC多些。

很可惜,我的这组数码管是共阳的,因此公共端我打算用三级管来驱动。

我的最小系统板:我用最常用的S9012,首先我得计划好电路方式,就采用最常用的动态扫描显示。

先搭建最简电路,调试出需采用元件的参数。

先不接上图的R2和74HC244,将数码管一个段直接接地。

调节R1,测得S9012基极电流为0.21mA时集电极也就是数码管上已有40mA,说明放大倍数足够了。

这时接上R2和74HC244,调节R2使数码管电流控制在15mA,这样当8个段一起点亮时三极管上得通过120mA的电流。

而基极上需要0.63mA,为了减小三极管的负荷应使三极管过饱和,,调节R1使基极电流为2mA,此时测得集电极和漏极之间的电压约0.1V。

好!此时R1为2K。

R2为240欧姆。

确定。

接下来就是确定电路。

电路的接口与AT89S51间有三组接口:段码、位码和电源。

为了让AT89S51独立出来这三级接口都采用插针做接口,用排线自由连接到AT89S51的P1-P3口,电源用短路帽连接,完成后的板子见下图反面:说明:然后就是写程序。

先写个查询方式的吧!//六位管码管在以0.3秒的间隔在闪烁,这是采用查询方式的,比较占CUP资源/******************************************************************** 定义管脚:P2_0-------上横 a P3_0-------个位P2_1-----右上竖 b P3_1-------十位P2_2-----右下竖 c P3_2-------百位P2_3----- 下横 d P3_3-------千位P2_4-----左下竖 e P3_4-------万位P2_5-----左上竖 f P3_5-------十万位 P2_6-----中间横 gP2_7-----小数点 H********************************************************************* /# include <AT89X51.h>typedef unsigned char uchar;uchar code bit_num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位码值表:0,1,2,3,4,5uchar code meg_val[]={0x03,0x9f,0x25,0x0d,0x99,0x49};//段码值表:0,1,2,3,4,5uchar code hello[]={0x03,0xe3,0xe3,0x61,0x91,0xff}; //HELLO uchar code beybey[]={0x89,0x61,0xc1,0x89,0x61,0xc1};//beybeyuchar code ab6789[]={0xc1,0x11,0x09,0x01,0x1f,0x41};//ab6789void delay(int n);void main(void){uchar i,m;P2=0xff; //先将段码关闭P3=0xff; //将位码关闭delay(20);//等待一会while(1){for (m=30;m>0;m--) //显示30次约0.3秒{for(i=0;i<=5;i++){P2=0xff;P3=bit_num[i]; //输出位码到P3口P2=ab6789[i]; //输出段码到P2口delay(5);}}P2=0xff; //关闭段码P3=0xff; //关闭位码delay(1000); //等待0.3秒}}void delay(int n) //子程序{int j;uchar k;for(j=0;j<n;j++){for(k=255;k>0;k--);}}======================================当我插把程序写入片子,插上电运行时,是乱码。

基于单片机控制的数码管驱动电路

基于单片机控制的数码管驱动电路

基于单片机控制的数码管驱动电路天津塘沽中等专业学校于德颖摘要:在单片机控制系统中,数码管作为显示器件得到了广泛的应用,本文介绍使用静态和动态两种方法控制多个数码管或数码管模块的驱动电路,利用人类的视觉暂留现象,快速扫描的驱动方式,使用一组驱动电路达到显示多个数码管的目的。

通过对驱动电路的分析,我们可以根据需要快速搭建硬件控制电路,实现数码管的显示需求。

关键词:数码管;静态显示;动态显示通常所说的数码管是由8个发光二极管组成。

如图1所示,其中a~g段用于显示数字、字符的笔画,dp显示小数点,而3、8引脚连接,作为公共端。

这种数码管价格低廉,配置灵活,与单片机接口简单,在作数字显示时是一种经济实用的方法。

根据com端连接电源极性的不同,可分为共阴极与共阳极两种LED数码管。

这里我们只分析com端连接到+Vcc的共阳极数码管。

由于LED数码管为电流型器件,其工作电流一般在5~20mA,为了获得良好的发光效果,我们控制工作电流在10~15mA较为合理。

使用时把共阳极8段LED的com脚接+Vcc,然后将每一只阴极引脚各接一个200~330欧电阻,电阻值越大,亮度越弱,电阻越小,电流越大,亮度也越大。

这里需要注意的是,不能只在com脚接一个限流电阻,否则显示不同数字时将会有不同的亮度。

图1 共阳极7段LED数码管图2 使用7447译码器的数码管驱动电路在单片机系统中,如要使LED正常显示数字与字符,不能直接将数字送到LED显示器,而是将要显示的数字译码。

译码分为硬件译码与软件译码两种,硬件译码就是将BCD码转换成7段LED数码管的显示字模并送到LED数码管的a~g,如图2所示。

而软件译码,通常采用查表法查到相应的显示字模再送到LED显示器显示。

下面我们分析软件译码的驱动电路。

若a连接8051输出端口的最低位(LSB),dp连接8051输出端口的最高位(MSB),且希望小数点不亮,则0至9的驱动信号如表1所示。

单片机驱动数码管电路

单片机驱动数码管电路

单片机驱动数码管电路数码管是一种常见的显示器件,广泛应用于各种电子设备中。

为了实现对数码管的驱动,可以使用单片机来完成。

单片机是一种集成电路,内部集成了处理器、存储器和各种输入输出接口,能够完成各种控制任务。

数码管电路主要由数码管、电流限制电阻和单片机组成。

数码管是一种七段显示器,能够显示0~9的数字。

电流限制电阻用于控制数码管的亮度,通常选择合适的电阻使得数码管的亮度适中。

单片机则负责控制数码管的显示。

单片机通过输出高低电平信号来控制数码管的显示。

七段显示器的每一段都对应一个引脚,通过控制引脚的电平状态,就可以实现对数码管的控制。

单片机通过改变引脚的电平状态来控制数码管的显示内容。

单片机驱动数码管的原理如下:首先,单片机通过输出引脚的高低电平来控制数码管的每一段,通过控制引脚的电平状态,可以使某一段亮起或者熄灭。

然后,通过改变每一段的亮灭状态,可以实现对数字的显示。

例如,要显示数字1,就只需要点亮第二段,其他段熄灭即可。

同理,要显示其他数字,只需要点亮相应的段,其他段熄灭即可。

为了实现对数码管的驱动,需要编写相应的程序。

在程序中,需要定义每一段对应的引脚,并通过控制引脚的电平状态来控制数码管的显示。

同时,还需要定义每个数字对应的亮灭状态,通过改变亮灭状态来实现数字的显示。

例如,要显示数字0,需要点亮除了第三段之外的其他段,其他段熄灭。

通过改变每一段的亮灭状态,可以实现对数字的显示。

同时,还可以通过改变每一段的亮度来控制数码管的亮度。

通过改变电流限制电阻的值,可以改变流过数码管的电流大小,从而改变数码管的亮度。

在实际应用中,单片机驱动数码管的电路可以通过外部电路连接数码管和单片机。

通过合理设计电路连接方式,可以实现对多个数码管的驱动。

例如,可以通过复用引脚的方式,将多个数码管连接在一起,并通过单片机的输出引脚来控制每个数码管的显示内容。

总结起来,单片机驱动数码管的电路可以实现对数码管的显示控制。

51单片机驱动8位数码管电路图+程序

51单片机驱动8位数码管电路图+程序

51单片机驱动8位数码管电路图+程序电路图:JP10排线连接J12 J21跳线跳12处测试程序#include<reg52.h>typedef unsigned char BYTE;typedef unsigned int WORD;sbit LS138A = P2^2; //定义138译码器的输入A脚由P2.2控制sbit LS138B = P2^3; //定义138译码器的输入脚B由P2.3控制sbit LS138C = P2^4; //定义138译码器的输入脚C由P2.4控制//此表为 LED 的字模, 共阴数码管 0-9 -BYTE code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};WORD LedOut[10];//数码管数组/************************************************************** **************** 延时程序 **************************************************************** *************/void Delay(WORD n){WORD x;while (n--){x = 250;while (x--);}}/************************************************************** **************** 显示函数 **************************************************************** *************/void display(WORD num){WORD i,LedNumVal ;LedNumVal=num;LedOut[0]=Disp_T ab[LedNumVal%100000/10000]; //万位LedOut[1]=Disp_T ab[LedNumVal%10000/1000]; //千位LedOut[2]=Disp_T ab[LedNumVal%1000/100]; //百位LedOut[3]=Disp_T ab[LedNumVal%100/10]; //十位LedOut[4]=Disp_T ab[LedNumVal%10]; //个位LedOut[5]=Disp_T ab[LedNumVal%1000/100]|0x80; //百位带小数点LedOut[6]=Disp_T ab[LedNumVal%100/10]; //十位LedOut[7]=Disp_T ab[LedNumVal%10]; //个位for( i=0; i<8; i++) //实现8位动态扫描循环{P0 = LedOut[i]; //将字模送到P0口显示switch(i) //使用switch 语句控制位选也可以是用查表的方式{case 0:LS138A=0; LS138B=0; LS138C=0; break; case 1:LS138A=1; LS138B=0; LS138C=0; break; case 2:LS138A=0; LS138B=1; LS138C=0; break;case 3:LS138A=1; LS138B=1; LS138C=0; break;case 4:LS138A=0; LS138B=0; LS138C=1; break;case 5:LS138A=1; LS138B=0; LS138C=1; break;case 6:LS138A=0; LS138B=1; LS138C=1; break;case 7:LS138A=1; LS138B=1; LS138C=1; break;}Delay(1);}}main(){while(1){display(12345);}}。

单片机温度报警器数码管驱动电路的设计与制作实训报告

单片机温度报警器数码管驱动电路的设计与制作实训报告

单片机温度报警器数码管驱动电路的设计与制作实训报告单片机温度报警器数码管驱动电路的设计与制作实训报告一、引言单片机温度报警器是一种用于监测环境温度并在温度超过设定阈值时发出警报的设备。

本实训报告旨在介绍单片机温度报警器数码管驱动电路的设计与制作过程。

二、设计原理1. 温度传感器为了能够准确测量环境温度,我们选择了一款数字式温度传感器DS18B20。

该传感器具有高精度、低功耗和数字输出等特点,适合用于单片机应用。

2. 单片机选择本实训采用STC89C52RC作为控制核心。

该单片机具有丰富的外设资源和强大的计算能力,适合用于本项目。

3. 数码管显示为了方便用户查看当前环境温度,我们采用4位共阳极数码管进行显示。

通过控制数码管的开关状态和亮灭时间来显示不同的数字。

4. 报警功能当环境温度超过设定阈值时,需要触发报警功能。

我们使用蜂鸣器作为报警装置,通过控制其开关状态和频率来发出不同的报警声音。

三、电路设计1. 温度传感器接口电路将DS18B20的VCC引脚连接到单片机的5V电源,GND引脚连接到单片机的GND,DQ引脚连接到单片机的一个IO口。

2. 数码管驱动电路将4位共阳极数码管的公共端依次连接到单片机的P0.0、P0.1、P0.2和P0.3口。

将数码管的a~g引脚分别连接到单片机的P2.0~P2.7口。

3. 报警装置电路将蜂鸣器连接到单片机的一个IO口,并通过一个三极管进行驱动。

将三极管的基极接入单片机IO口,发射极接地,集电极与蜂鸣器正极相连。

四、软件设计1. 温度采集与显示通过单片机读取DS18B20传感器输出的温度值,并将其转换为数码管可以显示的格式。

然后通过数码管驱动程序控制数码管显示当前温度值。

2. 温度比较与报警设置一个阈值温度,当当前温度超过该阈值时触发报警功能。

通过比较当前温度值和阈值来判断是否需要发出报警信号。

3. 报警控制当温度超过阈值时,通过单片机控制蜂鸣器的开关状态和频率来发出报警声音。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4.自制单片机之四----数码管电路的制做与驱动c51单片机 2007-08-21 21:17:56 阅读321 评论0 字号:大中小订阅数码管的使用方法与发光二极管没什么区别,只是把七或八只发光二极管组合在一个模件上组成了个8字和小数点,用以显示数字。

为了减少管脚,把各个发光管的其中同一个极接在一起作为共用点,因此就产生了共阳极和共阴极数码之说。

共阳管就是把各个发光管的正极接在一
起,而共阴管就刚好相反。

见下图:
一般来说大部分的逻辑IC的吸收电流要强于输出电流。

因此,大家都爱使用共阴极的数码管,因为可选的IC多些。

很可惜,我的这组数码管是共阳的,因此公共端我打算用三级管来驱动。

我的最小系统板:
我用最常用的S9012,首先我得计划好电路方式,就采用最常用的动态扫描显示。

先搭建最简电路,调试出需采用元件的参数。

先不接上图的R2和74HC244,将数码管一个段直接接地。

调节R1,测得S9012基极电流为0.21mA时集电极也就是数码管上已有40mA,说明放大倍数足够了。

这时接上R2和74HC244,调节R2使数码管电流控制在15mA,这样当8个段一起点亮时三极管上得通过120mA的电流。

而基极上需要0.63mA,为了减小三极管的负荷应使三极管过饱和,,调节R1使基极电流为2mA,此时测得集电极和漏极之间的电压约0.1V。

好!此时R1为2K。

R2为240欧姆。

确定。

接下来就是确定电路。

电路的接口与AT89S51间有三组接口:段码、位码和电源。

为了让AT89S51独立出来这三级接口都采用插针做接口,用排线自由连接到AT89S51的P1-P3口,电源用短路帽连接,完成后的板
子见下图
反面:
说明:
然后就是写程序。

先写个查询方式的吧!
//六位管码管在以0.3秒的间隔在闪烁,这是采用查询方式的,比较占
CUP资源
/********************************************************************定义管脚:P2_0-------上横 a P3_0-------个位
P2_1-----右上竖 b P3_1-------十位
P2_2-----右下竖 c P3_2-------百位
P2_3----- 下横 d P3_3-------千位
P2_4-----左下竖 e P3_4-------万位
P2_5-----左上竖 f P3_5-------十万位
P2_6-----中间横 g
P2_7-----小数点 H
*********************************************************************/
# include <AT89X51.h>
typedef unsigned char uchar;
uchar code bit_num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位码值
表:0,1,2,3,4,5
uchar code meg_val[]={0x03,0x9f,0x25,0x0d,0x99,0x49};//段码值
表:0,1,2,3,4,5
uchar code hello[]={0x03,0xe3,0xe3,0x61,0x91,0xff}; //HELLO uchar code beybey[]={0x89,0x61,0xc1,0x89,0x61,0xc1};//beybey uchar code ab6789[]={0xc1,0x11,0x09,0x01,0x1f,0x41};//ab6789
void delay(int n);
void main(void)
{
uchar i,m;
P2=0xff; //先将段码关闭
P3=0xff; //将位码关闭
delay(20);//等待一会
while(1)
{
for (m=30;m>0;m--) //显示30次约0.3秒
{
for(i=0;i<=5;i++)
{
P2=0xff;
P3=bit_num[i]; //输出位码到P3口
P2=ab6789[i]; //输出段码到P2口
delay(5);
}
}
P2=0xff; //关闭段码
P3=0xff; //关闭位码
delay(1000); //等待0.3秒
}
}
void delay(int n) //子程序
{
int j;
uchar k;
for(j=0;j<n;j++)
{
for(k=255;k>0;k--);
}
}
======================================
当我插把程序写入片子,插上电运行时,是乱码。

你猜怎么回事?原来那个P2口方向是反的,您注意过没有,在AT89S51管脚排列上,P0--P1和P3都是上方为PX_0。

而唯独P2口管脚排列是下方为P2_0。

方向则好是反的。

既然反了,我就把段码表重写一下。

再试,一切正
常。

在这里我说一下段码的排列,好多人问数码管段码是如何排列的,我也在网上查了,好像没有什么标准的排法,随自己的接法而定,这也是导致为什么在网上下载的一些数码管程序在自己的板子上不能正常显示的原因。

就普遍而言我最上面的那张图示的标法最多,在上面程序里原打算也是P2_0对应段码a(也就是上面的横)。

一直到P2_7对应段为h(就是小数点)。

结果哪知道P2口刚好是反的。

这样一来也就是倒过来了,P2_0对应段h(小数点了)。

例如我原先定义的数码管显示“2”段码为10100100B的,一接反了就不再是“2”了。

而要想再显示“2”那就把段码的高低位倒过来。

改为00100101B就OK了。

下面再写个用中断来显示的:
//这是采用中断方式的,也是带闪烁的。

/********************************************************************定义管脚:P2_0------小数点 P3_0------个位
P2_1------中横 P3_1------十位
P2_2------左上竖 P3_2------百位
P2_3------左下竖 P3_3------千位
P2_4------下横 P3_4------万位
P2_5------右下竖 P3_5------十万位
P2_6------右上竖
P2_7------上横
*********************************************************************/
# include <AT89X51.h>
typedef unsigned char uchar;
uchar code bit_num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位码:0,1,2,3,4,5 uchar code meg_val[]={0x49,0x99,0x0d,0x25,0x9f,0x03};//段
码:0,1,2,3,4,5
uchar i,aa; //定义全局变量
bit fg; //定义一个亮起和熄灭标志
void timer0(void) interrupt 1 using 1 //中断程序
{
if (fg) //当fg为1时点亮6位数码管
{ P2=0xff;
if (i>=6)
{
i=0;
}
else
{
P3=bit_num[i]; //输出位码到P3口
P2=meg_val[i]; //输出段码到P2口
i++;
}
}
else //当fg为0时熄灭数码管
{
if(aa==0)
{
P3=0xff;
P2=0xff;
}
}
aa++;
if (aa>=254) //当aa值累加至254时fg标志翻转。

{
fg=~fg;
aa=0;
}
TH0=0xf8; //重装定时器初值,2ms,值为65536-2000
TL0=0x30;
}
void main(void)
{
P2=0xff; //先将段码关闭
P3=0xff; //将位码关闭
TMOD=0x01;//设置T0为模式1
TH0=0xf8; //装入计数初值高位
TL0=0x30; //装入计数初值低位 EA=1; //总充许
ET0=1; //T0充许
fg=1; //将亮、灭标志设置为亮 TR0=1; //启动中断
while(1);
}
OK!。

相关文档
最新文档