单片机实例之数码管

合集下载

单片机静态数码管实验报告

单片机静态数码管实验报告

单片机静态数码管实验报告一、引言静态数码管是一种常用的显示器件,广泛应用于各种仪器仪表、计时器、计数器等场合。

本实验旨在通过单片机控制静态数码管,实现数字的显示功能。

二、实验原理静态数码管由若干个发光二极管组成,每个发光二极管代表一个数字。

通过控制每个发光二极管的亮灭,可以显示不同的数字。

单片机通过控制数码管的共阳极或共阴极,以及发光二极管的亮灭,实现数字的显示。

三、实验器材1. 单片机开发板2. 静态数码管3. 连接线四、实验步骤1. 连接电路:将静态数码管的共阳极或共阴极与单片机开发板相应的IO口连接。

2. 编写程序:使用C语言编写程序,通过控制IO口的高低电平控制数码管的亮灭,实现数字的显示。

3. 烧录程序:将编写好的程序烧录到单片机开发板中。

4. 调试程序:通过调试程序,观察数码管是否能正常显示数字。

5. 结果分析:根据实验结果,分析程序的正确性及数码管显示的准确性。

6. 实验总结:总结实验过程中的问题及解决方法,并对实验结果进行分析和评价。

五、实验结果经过实验,我们成功地通过单片机控制静态数码管,实现了数字的显示。

数码管能够根据程序的控制,显示出不同的数字,显示效果良好,准确度高。

六、实验分析通过本实验,我们掌握了单片机控制静态数码管的方法和技巧。

在实验过程中,我们发现控制数码管显示数字的关键在于正确地控制IO口的高低电平。

同时,我们还发现静态数码管显示数字的亮度和清晰度与电源电压和电流的稳定性有关,需要合理选择电源参数。

七、实验应用静态数码管广泛应用于各种仪器仪表、计时器、计数器等场合。

通过单片机控制静态数码管,可以实现各种数字的显示功能,满足不同场合的需求。

八、实验总结通过本实验,我们深入了解了单片机控制静态数码管的原理和方法。

通过编写程序和调试程序,我们成功地实现了数字的显示功能。

实验过程中,我们遇到了一些问题,但通过不断的调试和尝试,最终解决了问题。

通过本次实验,我们不仅加深了对单片机原理的理解,还提升了实际操作和问题解决的能力。

51单片机数码管显示数字原理

51单片机数码管显示数字原理

主题:51单片机数码管显示数字原理内容:1. 介绍51单片机在现代的电子产品中,单片机被广泛应用于各个领域,它是一种集成了微处理器、存储器和输入/输出端口的集成电路芯片。

其中,51单片机即指的是基于Intel 8051架构的单片机,它具有低功耗、高性能和丰富的外设接口,因此被广泛应用于嵌入式系统设计中。

2. 数码管的基本原理数码管是一种能够显示数字和部分字母的显示器件,它由多个发光二极管组成,可以显示0-9的数字。

数码管按照结构可以分为共阳数码管和共阳数码管两种类型。

共阳数码管的显示原理是通过控制各个发光二极管的通断状态来显示不同的数字,而共阴数码管则是通过控制对应的极性来实现数字的显示。

3. 51单片机连接数码管的原理通过51单片机控制数码管显示数字,需要用到引脚的输出功能。

在连接共阳数码管时,需要通过51单片机的输出引脚控制各个发光二极管的状态;而在连接共阴数码管时,则是通过控制对应的极性来实现数字的显示。

4. 51单片机连接数码管的实现步骤由于51单片机有多个通用IO口,因此可以连接多个数码管。

连接数码管的步骤如下:1)确定数码管的类型,共阴还是共阳2)连接数码管的正极和负极到单片机的对应IO口3)编写程序控制51单片机的IO口输出状态,以显示所需的数字5. 51单片机连接数码管的程序设计下面是一个简单的示例程序,演示了如何使用51单片机连接数码管,并控制其显示数字的过程:```C#include <reg51.h>sbit DIG1 = P0^0; // 数码管第一位sbit DIG2 = P0^1; // 数码管第二位sbit DIG3 = P0^2; // 数码管第三位sbit DIG4 = P0^3; // 数码管第四位void m本人n(){unsigned char DisplayData[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0-9的显示码unsigned char i;while(1){for(i=0; i<10; i++){DIG1=0; // 打开第一位数码管P2=DisplayData[i]; // 发送段码delay(100); // 延时DIG1=1; // 关闭第一位数码管// 同样的方法依次打开其他位数码管并发送段码// 这里省略其他三个数码管的控制}}}通过以上程序设计,我们可以实现用51单片机控制数码管显示0-9的数字。

单片机数码管静态显示实验

单片机数码管静态显示实验

实验五串行口静态显示一.实验目的1.学习用单片机的串行口扩展74LS164 实现静态显示方法。

2.学习用单片机I/O 口模拟串口工作实现静态显示的编程方法。

3.掌握静态显示的编程方法和数码管显示技术。

二.实验任务1.根据共阳数码管的功能结构,自编一组0~F 的笔形码,并按顺序存放建立程序数据表格。

2.利用单片机串行口扩展74LS164,完成串--并转换输出,实现静态显示:要求循环显示0~F这数字,即输出数字“0”时,四位同时显示0,显示1 秒后再输出数字“1”,即四位同时显示1,依次类推,相当于数字自检循环显示。

3.利用单片机串行口(RXD、TXD)编写静态显示程序,在数码显示器上30H、31H 单元的内容,30H、31H 单元为任意的十六进制数。

4.用P1.6、P1.7 分别替代RXD、TXD 做模拟串口完成任务3 的静态显示程序。

三.实验电路静态显示实验电路连线方法:静态显示只要连接2 根线:单片机的RXD 与DAT 节点连接,TXD 与CLK 接点连接,要把电源短路片插上。

PW11 是电源端。

四.实验原理说明1.静态显示实际上动态的过程,静态的显示,单片机串行口输出的数据通过74LS164 串并转换输出,每输出一个数据,把原先的的数据推挤到下一个显示位上显示。

实验时,单片机串行口应工作在方式0,RXD(P3.0)输出串行数据,TXD(P3.1)输出移位时钟,在移位时钟的作用下,串行口发送缓冲器的数据一位一位地从RXD 移入到74LS164 中,并把后面送入的数据推挤原先的数据到下一个级联的74LS164 中输出,每输出一个数据可以延时1ms。

实验时,通过改变延时时间,可以更清楚地观察到数据推挤的过程。

2.串行口工作在方式0 时,串行传输数据为8 位,只能从RXD 端输入输出。

TXD 端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12,由软件置位串行控制寄存器SCON 的REN位才能启动串行接收。

数码管原理及显示单片机C编程

数码管原理及显示单片机C编程

数码管显示程序编写
数码管显示原理:通过单片机控制数码管的亮灭状态,实现数字或字符的显示。
数码管显示编程语言:C语言,常用的开发环境有Keil、IAR等。
数码管显示程序的基本结构:包括初始化、显示数据的编码与解码、数码管显示驱动函 数等部分。
数码管显示程序的实现步骤:编写代码、编译链接、下载调试等。
七段数码管
十四段数码管
八段数码管 十六段数码管
数码管的驱动方式
静态驱动:每个数码管需要一个独 立的位选信号,通过位选信号来控 制哪个数码管亮
动态扫描速度:数码管显示的速度 取决于扫描速度,速度越快,人眼 看起来就越连续
添加标题
添加标题
添加标题
添加标题
动态驱动:多个数码管共用一个位 选信号,通过扫描方式逐个点亮数 码管,实显示单片机 C编程实例
数码管静态显示程序
数码管静态显示原理 单片机C编程实例代码 数码管静态显示程序流程图 数码管静态显示程序实现步骤
数码管动态显示程序
数码管动态显示原理 单片机C编程实例 数码管动态显示程序流程 数码管动态显示程序代码
数码管多位显示程序
数码管显示原理
单片机C编程技巧:使用PWM(脉冲宽度调制)技术,通过调节占空比来控制数码管亮 度。
硬件电路设计:需要设计一个适当的硬件电路,以支持数码管亮度控制。
软件编程实现:在单片机C编程中,需要编写相应的程序来实现数码管亮度的控制。
数码管显示速度调节
数码管显示速度调 节的原理
数码管显示速度调 节的方法
数码管显示速度调 节的优缺点
数码管显示速度调 节的实例代码
数码管显示效果优化技巧
数码管显示亮度调整:通过调整单片机的PWM输出,控制数码管的亮度,使其在合适的光线 下更加清晰可见。

单片机实验3 数码管控制实验-动态显示

单片机实验3  数码管控制实验-动态显示
/**********实验二数码管控制实验-动态显示**************/
;实验名称:数码管动态显示
;功能:4位数码管循环显示“0123”“4567”“89AB”“CDEF”,间隔0.5S。
;编写人:陈建泽
;编写时间:2010年11月2日
/**********************程序代码************************/
D1MS: MOV R2,#250 ;250*(1+1+2)=1000us=1ms
L1:NOP
NOP
DJNZ R2,L1
RET
/*****************中断服务子程序*****************/
T0_INT:MOV TH0,#(65536-50000)/256
MOV TL0,#(65536-50000)MOD 256
MOV A,R4
CJNE A,#16,L3
AJMP MAIN
L3:MOV R5,A
AJMP L1
DIS:MOV P2,R6;用A作为中间寄存器,因后面要循环显示
MOV A,R5
ACALL SQR ;查表
MOV P0,A
ACALL D1MS ;1ms
INC R5
MOV A,R6
RL A;指向下一位
MOV R6,A
RET;子程序返回
TAB: DB 0C0H,0F9H,0A4H,0B0H ;共阳极字型码表0、1、2、3
DB 99H, 92H, 82H, 0F8H;共阳极字型码表4、5、6、7
DB 80H, 90H, 88H, 83H;共阳极字型码表8、9、A、B
DB 0C6H,0A1H,86H, 8EH;共阳极字型码表C、D、E、F

51单片机第四节数码管

51单片机第四节数码管

51单⽚机第四节数码管本笔记默认学习者已拥有:1.Keil5和stc 烧写⼯具 等各种软件、驱动、环境;2.有⼀个属于⾃⼰的 51单⽚机开发板及相关零件 ;3.认识C 语⾔的语法;本⼈使⽤的51开发板为 郭天祥C51 TX-1C 增强版开发板 ;本笔记根据B 站up 主:江科⼤⾃化协的教学视频 整理得到ヾ(•ω•)4-1 静态数码管显⽰上图为TX-1C 的 数码管及LED 模块 原理图138译码器和74HC245 都是⽤来控制 数码管显⽰ 的;单数码管1.上图为 ⼀位数码管,数码管有两种连接⽅式(对应 右边上下两幅图);2.右上图的原理图,8个LED的阴极都连在⼀个引脚上,称为共阴极连接;3.右下图的原理图,8个LED的阳极都连在⼀个引脚上,称为共阳极连接;TX-1C 开发板的连接⽅式是 共阴极连接;4.左下⾓的 左边图⽚ ,定义了8个LED的名称;5.左下⾓的 右边图⽚ ,定义了引脚的名称,与右图的引脚名称⼀⼀对应假设数码管连接⽅式为 共阳极连接,观察可以发现,数码管中的 LED 的引脚引出,使⽤的是就近原则;假设数码管连接⽅式为 共阴极连接,如果上数码管显⽰ 数字6 ?1.要让数码管显⽰ 数字6,让要 LED-A、C、D、E、F、G亮起;2.共阴极的公共端 要接地(给数据‘0’,或者是低电平);3.阳极(称为位选端)根据LED的亮灭需求给 数据0或1(1亮、0灭) ,称为 段码(阳码) (1011 1110 即为段码);如果 共阳极连接,共阳极端 要接到 VCC (⾼电平),阴极给 数据0或1 (1灭,0亮),称为 段码(阴码),和共阴极正好是相反关系;共阳极连接→共阳极端接VCC 并选中→阴极(位选端)传递(阴码)段码(1亮、0灭)→数码管显⽰共阴极连接→共阴极端接GND 并选中→阳极(位选端)传递(阳码)段码(1灭、0亮)→数码管显⽰四位⼀体数码管开发板上即为 四位⼀体的数码管,且有两个,正好组成了 ⼋位数码管;⽽TX-1C 上 包含的是六位数码管,⽽⾮⼋位;1.四位数码管 也有 两种连接⽅式,即 共阴极连接 和 共阳极连接 ;{Processing math: 100%2.四位数码管,(每位的公共端 单独引出来,位选端全部连在⼀起(所有A段连在⼀起、所有B段连在⼀起……),总共有12个引脚;假设数码管连接⽅式为共阴极连接,如何在第三位显⽰数字1 ?1.给第三位的公共端 赋值 0(低电平),给其他位的公共端 赋值 1(⾼电平);这样等同于 其他位的公共端(负极)接到了正极上,⽆论如何都亮不了;只有第三位能亮;2.这样给 LED-B、C 的位选端 赋值 1,其他 位选端 赋值0共阳极连接即为公共端赋值 1(⾼电平)亮,其他以此类推;3.发现这样⼀个现象,数码管⽆法在同⼀时间显⽰多个数字,其在同⼀时刻下只能有⼀个显⽰,只有⼀个数码管能被点亮,即使有多个被选中的数码管,显⽰的数字也是相同的;这种共⽤引脚的现象,是为了减少控制数码管IO⼝;(四位数码管有32个LED,如果都采⽤共阴极连接的⽅式,也要32+1(公共端)=33个引脚;)(采⽤这种链接,就只需要12个引脚即可控制四位数码管;)如何让数码管多位显⽰不同数字(动态数码管显⽰)?1.利⽤ ⼈眼视觉的暂留 和 数码管显⽰的余辉 的原理先让第⼀位数码管显⽰1,然后很快地让第⼆位数码管显⽰2,再很快地让第三位数码管显⽰3,让它不断地扫描,重复显⽰1、2、3的过程,这样三个数字就“同时”显⽰了;原理分析138译码器1.观察到 原理图右图 与数码管有关的,有138译码器(74LS138)和74HC245两枚芯⽚;TX-1C的原理图为左图,也有两个74HC573芯⽚与数码管有关;芯⽚名称与功耗、电压、说明符号有关,具体内容不做分析;2.如图,数码管连接⽅式为 共阴极连接,这样传输数据,就能让第三位显⽰ 数字1 了;3.⽽上⾯的 LED1 ~ 8,其实接在了138译码器的输出端,138译码器正好可以实现让LED1 ~ 8输出 0或1;LED1 ~ 8 对应了 TX-1C 六位数码管的SEG DS 1 ~ 6;4.138译码器可将LED 1 ~ 8的⼋个端⼝ 转化为 由 3个端⼝ (P22、P23、P24)控制,⽽G1、G2A、G2B端⼝ 被 称为 使能端;使能端相当于⼀种开关,如果电平有效,它就可以⼯作;如果电平⽆效,它就不⼯作;观察原理图发现,使能端是已经接好 VCC 和 GND 的,也就是说,其上电其实就会⼯作TX-1C的74HC573也是同理,但其并未压缩控制端⼝的数量;5.138译码器也叫“38线译码器”,是由3个线到8个线,其中C是⾼位、A是低位,CBA组成的数符合8进制,控制着Y0 ~ Y7 这8个端⼝;6.所以,138译码器的作⽤就是⽤来选中某⼀位数码管的74HC2451.74HC245是⼀种 双向数据缓冲器,VDD、GND都可视为电源,OE为使能(其 接地 就⼯作);2.DIR(direction),是⽅向的意思,它接到了VCC(⾼电平)上,将数据从左边输出到右边,从右边将数据读取回左边;DIR若接到低电平上,会将数据从右边输出到左边,从左边将数据读取回右边;3.单⽚机的⾼电平 驱动能⼒有限,其输出的最⼤电流不能太⼤;其低电平 驱动能⼒强;因此,LED模块才采⽤了低电平点亮的模式;4.如果⽤⾼电平 直接点亮 数码管,电流会很⼩,灯会很暗;所以其加⼀个缓冲器,缓冲器可以提⾼ 其驱动能⼒,如果直接将 数据 输出 给 数码管,数据就会被视为 驱动数据;现在增加了缓冲器,数据 就变成了 控制信号,控制信号 只需要很微弱,缓冲器 就可以接收到,缓冲器再通过⾃⼰接到的电源,输出 数据 到引脚上,这样控制的电流只需要⾮常⼩,就能驱动数码管 以⽐较亮的形式显⽰;2电容 是⽤来 稳定电源的,叫电源滤波;6.图右有 ⼀ 排阻,阻值为100R(即为100Ω),作⽤为 限流电阻 ,防⽌数码管的电流过⼤;TX-1C既没有电容,也没有排阻;原理总结1.⽤ 138译码器 使 数码管 的某⼀位 被选中;2.再给P0⼝⼀个 段码数据;TX-1C虽然⽤P0⼝控制段码输⼊,但也⽤P0⼝控制位选;需要先⽤ P2.6⼝和P2.7⼝控制输⼊数据是段码还是位选;P2.6⼝控制段码的输⼊;P2.7⼝控制位选的输⼊;例,给P2.6 数据1 (⾼电压)、给P2.7 数据 0 (低电压),就可以确定现在给数据是段码;1.由TX-1C的原理图可知,数码管内 LED灯 与 P0端⼝ 的顺序关系:(1)LED的名称定义是通⽤⽆疑的;(2)数码管本⾝的引脚名称不重要,重要的是 LED与哪个 P0 的 引脚 相连;2.由TX-1C的原理图可知, P0.0引脚 控制 数码管的最左位,P0.5引脚控制 数码管的最右位,剩余引脚是没有控制 数码管 位选 的作⽤的,哪个P0 的 引脚 控制 六位数码管的 哪位 很重要;代码实现静态数码管显⽰(让数码管第三位显⽰3).c#include<reg51.h>sbit D=P2^6; //段码⼝sbit W=P2^7; //位选⼝void main(){D=0;W=1;P0=0xFB;//1111 1011W=0;D=1;P0=0x4F;//0100 1111while(1);}下⾯写出了⼀个通⽤函数,可以让数码管在 第⼏个位置 显⽰ 哪个数#include<reg51.h>#define uchar unsigned charsbit D=P2^6;sbit W=P2^7;void NixieTube(uchar wei,uchar duan){ //NixieTube是数码管的英⽂uchar WEI,DUAN; //(Nixie是⼥⽔妖的意思)D=0;W=1;switch(wei){ //位选部分case 1:WEI=0xFE; break;case 2:WEI=0xFD; break;case 3:WEI=0xFB; break;case 4:WEI=0xF7; break;case 5:WEI=0xEF; break;case 6:WEI=0xDF; break;}P0=WEI;W=0;D=1;switch(duan){ //段码部分case 0:DUAN=0x3F; break;case 1:DUAN=0x06; break;case 2:DUAN=0x5B; break;case 3:DUAN=0x4F; break;case 4:DUAN=0x66; break;case 5:DUAN=0x6D; break;case 6:DUAN=0x7D; break;case 7:DUAN=0x07; break;case 8:DUAN=0x7F; break;case 9:DUAN=0x6F; break;case 10:DUAN=0x77; break; //Acase 11:DUAN=0x7F; break; //Bcase 12:DUAN=0x39; break; //Ccase 13:DUAN=0x3F; break; //Dcase 14:DUAN=0x79; break; //Ecase 15:DUAN=0x71; break; //Fcase 16:DUAN=0x80; break; //.}P0=DUAN;}void main(){NixieTube(3,3);while(1);}运⾏结果如下:4-2 动态数码管显⽰1.如果只是单纯让其显⽰完⼀个再显⽰⼀个,代码如下:#include<reg51.h>#define uchar unsigned charsbit D=P2^6;sbit W=P2^7;uchar Nixiewei[]={0,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};uchar Nixiecode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7F,0x39,0x3F,0x79,0x71,0x80};//将两个switch改进为数组void NixieTube(uchar wei,uchar duan){D=0;W=1;P0=Nixiewei[wei];W=0;D=1;P0=Nixiecode[duan];}void main(){while(1){NixieTube(1,1);NixieTube(2,2);NixieTube(3,3);}}运⾏结果如下:2.这是⼀个数码管的常见问题,称为 数码管的消影 ;位选-->段选-->位选-->段选-->位选-->......在这⼀位的段选(输⼊段码)结束,进⾏下⼀位的位选时,很短的时间内,上⼀位的数据会串到下⼀位数据⾥⾯去;所以我们在段选和位选之间,增加⼀个 P0 清零的操作;动态数码管显⽰(数码管同时显⽰123).c#include<reg51.h>#define uchar unsigned charsbit D=P2^6;sbit W=P2^7;uchar Nixiewei[]={0,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};uchar Nixiecode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7F,0x39,0x3F,0x79,0x71,0x80};void Delayms(unsigned int x){unsigned int j;for(;x>0;x--) for(j=110;j>0;j--);}void NixieTube(uchar wei,uchar duan){D=0;W=1;P0=Nixiewei[wei];W=0;D=1;P0=Nixiecode[duan];Delayms(1); //让数码管稳定显⽰,⽴刻清零会让数码管显⽰较暗P0=0; //清零操作}void main(){while(1){NixieTube(1,1);NixieTube(2,2);NixieTube(3,3);}}运⾏结果如下:相关知识1.在运⾏某些代码时,TX-1C的LED点阵模块会乱闪2.将左下⾓ DOT-OE旁的跳线帽 拔下来即可 断开LED点阵模块,3.拔下来的跳线帽不要乱丢,可以 只插⼀个脚放在原处,也可以妥善保管在其他地⽅上图即为拔下来的跳线帽1.此元件为电容;2.104的数量规则与 第⼆节 所讲的电容是相同的,其单位是pF1000pF=1nF, 1000nF=1uF, 1000uF=1000mF, 1000mF=1FF 是⼀个很⼤的单位,正常电容都是uF、nF级别的;超级电容能达到1 ~ 2 F,其⼀般作为备⽤电池;3.TX-1C的原理图上,电容的量都是直接⽤单位标记好的。

51单片机-数码管显示

51单片机-数码管显示
P2=0x00; P0=0x03; delay(400); P0=0x9f; delay(400); P0=0x25; delay(400);
} void delay(int x) {
int i,j; for(i=0;i<x;i++)
for(j=1;j<120;j++); }
LED字型显示代码表
段符号
十六进制代码
显示 dp
g
f
e
d
c
b
a 共阴极 共阳极
0
0
1
0
2
0
3
0
4
0
5
0
6
0
7
0
8
0
9
0
A0
b
0
C0
d
0
E0
F
0
H0
P0
0
1
1
1
1
1
1
3FH
C0H
0
0
0
0
1
1
0
06H
F9H
1
0
1
1
0
1
1
5BH
A4H
1
0
0
1
1
1
1
4FH
B0H
1
1
0
0
1
Hale Waihona Puke 1066H
99H
1
1
0
1
1
0
1
6DH 92H
1
1
1
1
1
0
1
7DH
1. 静态显示的特点
静态显示就是单片机将所要显示的数据送出去后,数码管始终显示 该数据(不变),到下一次显示时,再传送一次新的显示数据。

单片机指令编程实例数码管显示程序设计

单片机指令编程实例数码管显示程序设计

单片机指令编程实例数码管显示程序设计在单片机的开发中,数码管是一种常见的输出设备。

通过编程控制数码管的显示,我们可以实现各种功能,如计时、计数、温度显示等。

本文将介绍一个简单的单片机指令编程实例,用于设计一个数码管显示程序。

一、概述数码管是一种由七段LED组成的显示器件,每个数码管可以显示0-9的数字。

通过合理的控制,可以将多个数码管连接起来并显示多位数值。

在这个实例中,我们将使用AT89C51单片机和共阳数码管进行程序设计。

二、硬件连接将数码管的七段LED引脚依次连接到单片机的GPIO引脚,并将共阳极引脚连接到单片机的VCC。

为了方便控制,可以利用74HC595芯片实现数码管的级联连接,这样只需要使用三个IO口即可控制多个数码管。

三、程序设计程序设计的主要逻辑是通过编写一系列的指令来控制数码管的显示。

以下是一个简单的实例程序:```#include <reg51.h>sbit SDA = P1^0; // 74HC595芯片的串行数据引脚sbit SCK = P1^1; // 74HC595芯片的时钟引脚sbit RCK = P1^2; // 74HC595芯片的输出使能引脚unsigned char code num[10] = {0xC0, // 数字0的显示码0xF9, // 数字1的显示码0xA4, // 数字2的显示码0xB0, // 数字3的显示码0x99, // 数字4的显示码0x92, // 数字5的显示码0x82, // 数字6的显示码0xF8, // 数字7的显示码0x80, // 数字8的显示码0x90 // 数字9的显示码};void delay(unsigned int t) {unsigned int i;while (t--) {for (i = 0; i < 1000; i++);}}void writeByte(unsigned char dat) {unsigned char i;for (i = 0; i < 8; i++) {SDA = (dat & 0x80) ? 1 : 0;dat <<= 1;SCK = 0;SCK = 1;}}void display(unsigned char n) {unsigned char i;for (i = 0; i < 8; i++) {writeByte(num[n]);RCK = 1;RCK = 0;delay(1); // 延时一段时间,使数码管显示出来}}void main() {unsigned char i;while (1) {for (i = 0; i < 10; i++) {display(i);delay(500); // 每个数字显示的时间间隔为500ms}}}```以上程序通过将各个数字的显示码存储在一个数组中,然后通过控制74HC595芯片的串行数据引脚、时钟引脚和输出使能引脚,来实现数码管的动态显示。

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

void delay02s() { unsigned char i,j,k; for(i=10;i>0;i--) for(j=200;j>0;j--) for(k=248;k>0;k--); }
void main(void) { while(1) { for(dispcount=0;dispcount<10;dispcount++) { P1=table[dispcount]; delay02s(); } } }
二、LED数码管的结构和工作原理。
图4-3 数码管结构图
数码管段码
表4-1 共阴数码管显示数字的段码表
段名称 dp G F E D C B A 对应段码
对应引脚
数字0 数字1 数字2 数字3 数字4 数字5 数字6 数字7 数字8
P1.7
0 0 0 0 0 0 0 0 0
P1.6
0 0 1 1 1 1 1 0 1
1、C语言程序: #include <reg51.h> #define uchar unsigned char unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char dispc 1 0 1 1 1
0 1 0 0 1 0
0 0 1 0 0 0
0 0 0 0 0 1
0 1 0 0 1 0
C0H F9H A4H B0H 99H 92H 82H F8H
1
1
0
1
0
1
0
1
0
1
0
0
1
0
0
0
数字8
数字9
1
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
80H
90H
四、程序设计
要实现0~9的显示,设 计方法与前面彩灯花样显示 类似,首先写出0~9的显示 数据(表4-1中的字型码数 据,注意电路中选用的是共 阴或共阳数码管一致),这 些数据在程序中作数组元素。 程序中将数组元素依次读出 送到端口,使数码管显示出 对应的数字。程序的设计框 图4-5 图见图4-5。
P1.5
1 0 0 0 1 1 1 0 1
P1.4
1 0 1 0 0 0 1 0 1
P1.3
1 0 1 1 0 1 1 0 1
P1.2
1 1 0 1 1 1 1 1 1
P1.1
1 1 1 1 1 0 0 1 1
P1.0
1 0 1 1 0 1 1 1 1 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH
图4-6 数码管原理图
三、74LS138译码器:
74LS138 为3 线-8 线译码器,其工作原理如下: 当一个选通端(G1)为高电平,另两个选通 端(/(G2A)和/(G2B))为低电平时,可将地址端 (A、B、C)的二进制编码在一个对应的输出端 以低电平译出。
图4-4 74LS138引脚图

任务一
LED数码管的静态显示
本任务就是将单片机与数码管接成图 4-2所示静态显示方式,编程实现数码管 每隔0.2s的0-9数字显示。
图4-2
数码管显示电路图
一、任务分析
所谓静态显示,就是当单片机某一端口输出 一组显示数据之后,该端口一直保持该数据输出, 维持数码管的显示数字,直到端口数据改变,又 保持显示下一数据的显示方式。 在具体电路连接上,将单片机一个端口的八 个端子接在一只数码管的八个引脚上(h端为小数 点),控制数码管的七段LED的亮或熄,显示器 出数字,这种显示控制方式就是静态显示。静态 显示电路连接特点是单片机端口的每一位与数码 管的一个端相连接,相当于单片机的一个引脚外 接一只发光二极管。
void main(void) { while(1) { for(dispcount=0;dispcount<10;dispcount++) { a=0; b=0; c=0; P1=table[dispcount]; delay02s(); } } }
真值表:
表4-2 74LS138功能表
图4-6 数码管原理图
1、C语言程序: #include <reg51.h> #define uchar unsigned char sbit a=P0^5; sbit b=P0^6; sbit c=P0^7; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; uchar dispcount; void delay02s(void) { unsigned char i,j,k; for(i=10;i>0;i--) for(j=200;j>0;j--) for(k=248;k>0;k--); }
课题三(实例) 之数码管显示
任务一 单个LED数码管的静态控制显示方式 任务二 多个LED数码管的动态控制显示方式 任务三 0~99999999加法计数器


课题目标 本课题的任务是用单片机实现简易数字 显示,演示效果如图4-1所示。通过编程, 学会在单片机上实现一位数字和多位数字 的静态和动态显示控制方法,以及不同进 制计数的程序编写方法。
任务二 LED数码管的动态显示
本任务就是当单片机与数码管接成动态 显示方式,编程实现数码管的0-7数字显示。
一、电路原理
动态显示的电路有很多,本课题中所选用的 电路如图4-6所示。图中用的是两只四位数码管。 每只已将所有数码管的a~h分别连接在一起,再 将两只四位数码管的a~h连接在一起,即将八只 数码管八段显示的段码控制线连接在一起,作为 整个数码管的段码控制。单片机端口驱动能力不 足,在段码上使用74LS373提高数码管亮度。对 每只数码管的公共端进行控制,使每只数码管可 以单独显示。电路中,将每个数码管的COM端接 位选信号dig,该引脚为低电平即接通显示,实现 数码管的位控制。
数字9
0
1
1
0
1
1
1
1
6FH
数码管段码
表4-2 共阳数码管显示数字的段码表
段名称 dp G F E D C B A 对应段码
对应引脚
数字0 数字1 数字2 数字3 数字4 数字5 数字6 数字7
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
1 1 1 1 1 1
1 1 0 0 0 0
相关文档
最新文档