51单片机学习教程第4章 数码管

合集下载

单片机-4章C51语言-数码管按键-11-4

单片机-4章C51语言-数码管按键-11-4

#include <reg51.h> sbit LS138A = P2^2; //定义138译码器的输入A脚由P2.2控制 sbit LS138B = P2^3; //定义138译码器的输入脚B由P2.3控制 sbit LS138C = P2^4; //定义138译码器的输入脚C由P2.4控制 void delay(unsigned int i); //函数声名 //此表为 LED 的字模, 共阴数码管 0-9 unsigned char code Disp_Tab[ ] = {0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f,0x40};
#include<reg52.h> #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2; //定义锁存使能端口 段锁存 sbit LATCH2=P2^3; //定义锁存使能端口 位锁存
unsigned char code dofly_DuanMa[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07 ,0x7f,0x6f}; // 共阴极,显示段码值01234567 unsigned char code dofly_WeiMa[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分
/************主函数**********************/ main() { unsigned int i; while(1) //进入循环状态 { for( i=0; i<8; i++) //实现8位动态扫描循环 { 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; } P0=Disp_Tab[i]; delay(20); } } }

51单片机-数码管

51单片机-数码管

51单片机-数码管共阴极是指所有发光二极管阴极连接在一起,这个共阴极可以用来做片选。

如图,这里有8个发光二极管,到底哪个亮需要进行片选。

段选:8 段数码管每一段的控制段叫段选位选:就是进行哪个8 段数码管亮的选择TX-1C 使用两片锁存器74HC573 实现位选和段选这里的D0”7是连在单片机的I/O 口上,当为高电平时,Q 与D 中的数据一致,遇到负跳变沿时Q 中的数据保持住,D 中的数据即使变化也不会影响Q。

MCUVersion2 使用的是74HC245 和38 译码器74HC13874HC245 有一个缓冲和驱动的作用,这样可以使led 显示的更加稳定,数码管显示分动态显示和静态显示,每个数码管的状态都是被不断更新的,利用的人的视觉暂留,使看上去数值保持在一个固定的位置上,人的视觉是有延续性的,当一个东西不断变化时,变化的时间小于人眼的视觉暂留时间的话,人的眼睛会以为这个东西是连续的。

静态显示是一幅画面放在那看上去是不动的而它确实是不动的。

动态扫描显示即轮流向各位数码管送出字型码和相应位选,利用发光管的余晖和视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

静态显示:数码管从左向右依次点亮: #include <reg52.h>void delay(){int i,j; for(i = 0; i <0xff; i++) for(j = 0; j <0xff; j++) ;} unsigned int code duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07};unsigned int code wei[]={ 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff};void main(){ while(1){ int i; P2 = 0x39; for(i = 0; i <8; i++){ P2 = duan[ i]; P1 = wei[ i]; delay(); } } } 想让哪个数码管亮多少就亮多少:tips:感谢大家的阅读,本文由我司收集整编。

51单片机中4个数码管的显示实验

51单片机中4个数码管的显示实验

51单片机中4个数码管的显示实验一、实验目的:1、看懂电路原理图,明白4个共阳数码管的编程方式。

2、看懂参考程序,学会使用扫描法来对4个数码管进行扫描显示。

学会使用定时器。

二、实验设备:51通用实验板一个,51仿真器一个,40针仿真头一个,12V电源一个,串口线一条。

三、实验电路原理图:四、实验内容:4个数码管一次显示4个数字,下一次加4进行显示,数字最大为9,到9再从0重新进行显示。

中间有一定的时间延时。

改变数据用定时器进行设置。

五、实验步骤:安实物图的形式把实验设备连接在一起。

六、参考程序:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4个数码管的显示实验;使用70H,71H,72H,73H进行数码管显示数据存储。

75H进行定时器定时时间设置,发光二极管L1进行亮灭显示改变数据标志。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SETTIM EQU 75H;定时时间长短设定ORG 0000HLJMP MAINORG 000BHLJMP TIM0;定时器0中断ORG 0030HMAIN: ;主程序MOV SP,#07HMOV SETTIM ,#00HLCALL INIT;初始化数据MOV TMOD,#01H;设值定时器0MOV TH0,#00H;定时初值MOV TL0,#00HSETB EA;开总中断SETB ET0;开中断SETB TR0;开始定时器STAR:LCALL DISPLJMP STAR;****************************************;显示子程序DISP: MOV R0,#0FEHMOV R1,#70HDISP1:MOV A,R0MOV P2,AMOV A,@R1MOV DPTR,#TABMOVC A,@A+DPTRMOV P0,ALCALL DLYSINC R1MOV A,R0RL AMOV R0,AJB ACC.4,DISP1RET;***************************************;定时器0中断程序TIM0:CLR TR0CLR EAMOV A,SETTIMINC ACJNE A,#9,TM1LCALL CHGMOV A,#00HCPL P1.0;定时器运行标志,使L1灯不断闪动TM1: MOV SETTIM,AMOV TH0,#00HMOV TL0,#00HSETB EASETB TR0RETI;****************************改变要显示的值CHG:MOV R0,#70HMOV R3,#04HCH1:MOV A,@R0INC ACJNE A,#0AH,CH2MOV A,#00HCH2:MOV @R0,AINC R0DJNZ R3,CH1RET;********************************************;初始化程序INIT: ;初始化70H---73H中的数据,使用R0,R1,R3MOV R0,#00H;数据初值MOV R3,#04HMOV R1,#70H;4个数码管数据存储地址IN0:MOV A,R0MOV @R1,AINC R0INC R1DJNZ R3,IN0RET;*****************************************;延时程序DLYS: MOV R6,#5DLYS0:MOV R5,#150DJNZ R5,$DJNZ R6,DLYS0RET;*****************************************;数据表TAB:DB 0C0H,0F9H,0A4H,0B0H; 0,1,2,3DB 99H,92H,82H,0F8H;?,5,6,7DB 80H,90H,88H,83H;?,9,A,BDB 0C6H,0A1H,86H,8EH;C,D,E,FDB 8CH,89H,07fh,0bFH;P,H,.,-11001011END七、思考:修改一下程序,使用定时器2进行定时改变数据进显示。

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的数字。

51单片机综合学习系统之数码管使用学习篇

51单片机综合学习系统之数码管使用学习篇
图3 图3中的 A,B,C,D,E,F,G,DP 分别与单片机的 P0.0--0.7口相连,用来控制显示数字的形状。8个控制数
码管三极管的基极分别接在单片机的 P2.0--P2.7口上。通过控制这些三极管基极电平来打开或关闭数码管 的显示,即起到“使能”作用。
理论讲了一大堆,现在我们就来一起动手实践一下,这样才有感性的认识。从包装盒中取出 51单片机
图7
51单片机综合学习系统资源丰富,可做实验有:8位 LED 数码管、32路 LED、4x4矩阵键盘、4个直控键 盘、蜂鸣器喇叭、继电器试验、I2C 总线接口、SPI 总线接口、160X 液晶、128X64液晶、红外接收头接口、 支持 PS/2接口的104键标准键盘、步进电机驱动接口、ADC0832模/数转换接口、PC817光电耦合器、串行时 钟芯片 DS1302、温度传感器 DS18B20接口、RS232串口通讯、外扩展接口以便外接更多的实验资源。
显示数字 0
p0.7 p0.6 p0.5
1
1
0
p0.4 0
p0.3 0
p0.2 0
p0.1 0
p0.0 0
16进制代码 C0H
1
1
1
1
1
1
0
0
1FLeabharlann H2101
0
0
1
0
0
A4H
3
1
0
1
1
0
0
0
0
B0H
4
1
0
0
1
1
0
0
1
99H
5
1
0
0
1
0
0
1
0
92H
6

51单片机(四位数码管的显示)程序

51单片机(四位数码管的显示)程序

51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。

最佳答案下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#include<at89x52.h>unsigned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang数码管0-F 代码unsigned char k; //设置全局变量k 为键盘的键值/************************************键盘延时函数****************************/void key_delay(void) //延时函数{int t;for(t=0;t<500;t++);}/************************************键盘扫描函数******************************/void keyscan(void) //键盘扫描函数{unsigned char a;P2 = 0xf0; //键盘初始化if(P2!=0xf0) //有键按下?{key_delay(); //延时if(P2!=0xf0) //确认真的有键按下?{P2 = 0xfe; //使行线P2.4为低电平,其余行为高电平key_delay();a = P2; //a作为缓存switch (a) //开始执行行列扫描{case 0xee:k=15;break;case 0xde:k=11;break;case 0xbe:k=7;break;case 0x7e:k=3;break;default:P2 = 0xfd; //使行线P2.5为低电平,其余行为高电平a = P2;switch (a){case 0xed:k=14;break;case 0xdd:k=10;break;case 0xbd:k=6;break;case 0x7d:k=2;break;default:P2 = 0xfb; //使行线P2.6为低电平,其余行为高电平a = P2;switch (a){case 0xeb:k=13;break;case 0xdb:k=9;break;case 0xbb:k=5;break;case 0x7b:k=1;break;default:P2 = 0xf7; //使行线P2.7为低电平,其余行为高电平a = P2;switch (a){case 0xe7:k=12;break;case 0xd7:k=8;break;case 0xb7:k=4;break;case 0x77:k=0;break;default:break;}}}break;}}}}/****************************** ***主函数*************************************/ void main(void){while(1){keyscan(); //调用键盘扫描函数switch(k) //查找按键对应的数码管显示代码{case 0:P0=Dig[0];break;case 1:P0=Dig[1];break;case 2:P0=Dig[2];break;case 3:P0=Dig[3];break;case 4:P0=Dig[4];break;case 5:P0=Dig[5];break;case 6:P0=Dig[6];break;case 7:P0=Dig[7];break;case 8:P0=Dig[8];break;case 9:P0=Dig[9];break;case 10:P0=Dig[10];break;case 11:P0=Dig[11];break;case 12:P0=Dig[12];break;case 13:P0=Dig[13];break;case 14:P0=Dig[14];break;case 15:P0=Dig[15];break;default:break; //退出}}}/**********************************end***************************************/。

单片机C51程序设计 数码管显示ppt课件

#define WR573(dat)\ {\
P0 = d);\ LE573 = 0;\ }
中断源的符号、称号及产生的条件
INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。 INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。 T0:定时器/计数器0中断,由T0计满回零引起。 T1:定时器/计数器l中断,由T1计满回零引起。 TI/RI:串行I/O中断,串行端口完成一帧字符发送/接纳后引起。
定时/计数器编程运用
初始化程序应完成如下任务: 1.对TMOD赋值,以确定T0和T1的任务方式。 2.计算初值,并将其写入TH0、TL0或TH1、TL1。 3.中断方式时,那么对IE赋值,开放中断。 4.使TR0或TR1置位,启动定时/计数器定时或计数。
TR1:定时器1控制位,置位时定时器1任务 TR0:定时器0控制位,置位时定时器0任务
定时器初值 计算
设单片机晶振频率为6MHZ,求方式1时的定时器初 值.
定时时间=(2X-初值)×机器周期 X由定时器任务方式决议,分别为13、16、8. 机器周期=12/单片机晶振频率 fosc。 由以上公式可知:定时lms所需的机器周期为2us.个数 为500D,即0lF4H,任务方式为1(16位方式)时定时初 值是01F4H.
动态显示
动态显示的特点是将一切位数码管的段选线 并联在一同,由位选线控制是哪一位数码管有 效。选亮数码管采用动态扫描显示。所谓动态 扫描显示即轮番向各位数码管送出字形码和相 应的位选,利用发光管的余辉和人眼视觉暂留 作用,使人的觉得好似各位数码管同时都在显 示。动态显示的亮度比静态显示要差一些,所 以在选择限流电阻时应略小于静态显示电路中 的。
JBCflag ? C002 DECval C002: RET

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单片机控制数码管

while(1)
{
for(j=0;j<len;j++)//循环向后查表
{
while(times<30)
{
times++;
for(i=0;i<8;i++)
{
P0=duan[i+j+k];
latchduan=1;
latchduan=0;
P0=wei[i];
latchwei=1;
latchwei=0;
delay(4);
51单片机控制数码管控制数码管控制51单片机控制数码管数码管单片机控制51数码管数码管字体共阴数码管
硬件电路为两个8位锁存器驱动8个数码管
P0为数据输出
P2.2和P2.3为锁存控制
程序实现123456789abcdef从右到左字幕般显示。两次显示之间间隔两个数码管。第一次显示要求8个数码管依次点亮,无数据的应熄灭
}
}
times=0;
}
k=6; //跳跃过前面六个空
len=18;
}
}
*/
void delay(int x)
{
int i;
while(x--)
for(i=0;i<50;i++);
}
void display(unsigned char FirstBit,unsigned char Num)
{
unsigned char i;
for(i=0;i<Num;i++)
{
P0=0; //清空数据,防止有交替重影
//循环赋值法
unsigned char duan[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00,0x00};

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. 静态显示的特点
静态显示就是单片机将所要显示的数据送出去后,数码管始终显示 该数据(不变),到下一次显示时,再传送一次新的显示数据。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
dp 共阳极 共阴极 1 0 g 0 1 f 1 0 e 0 1 d 0 1 c 1 0 b 0 1 a 0 1
字形“ 编码示例 编码示例: 字形“2”编码示例: 共阳极: 共阳极:0xA4、共阴极:0x5B 、共阴极:
2011年3月16日 9
4.3 数码管的字形码 直接输入字形码
P0=0xC0; P0=ledcc[3]; 共阳码“ 共阳码“0”
2011年3月16日
6
4.2.1 数码管的分类 1. 尺寸
0.3~0.8寸 5V供电 寸 供电 1.0~2.3寸 12V供电 寸 供电 3.0寸以上 更高电压 寸以上
2. 内部连接方式
共阳极(Common Anode) 共阳极 共阴极(Common Cathode) 共阴极
2011年3月16日 7
数码管的驱动 数码管的驱动
2
4.1 单片机的信息显示设备 单片机系统需要显示信息时, 单片机系统需要显示信息时,必须 设计一定的信息显示方式, 设计一定的信息显示方式,常用的显示 方式有: 方式有:
LED管 管 数码管 LED点阵 点阵 LCD液晶 液晶
2011年3月16日
3
4.1 单片机的信息显示设备 LED管:输出开关量、简单图示 管 输出开关量、
2011年3月16日
20
4.7 设计实例 3. 显示数字的技巧
X&0x0F (X&0xF0)>>4 基本思想: 基本思想:将数字拆分成字符串显示
正整数的显示方法
十六进制显示 十进制显示
负整数的显示方法 X%10
转换为原码显示 转换为原码显示 X/10
2011年3月16日
21
4.7 设计实例
浮点数的显示方法 浮点数的显示方法
2011年3月16日 8
共阳极(CA) 共阳极
com端接高电平 端接高电平 输入低电平亮
4.3 数码管的字形码
数码管显示原理:要显示某字形, 数码管显示原理:要显示某字形,需将 此字形对应的字段点亮, 此字形对应的字段点亮,因而要送不同的电 平组合数据至数码管引脚, 平组合数据至数码管引脚,该数据称为字形 码或段码。 码或段码。
数码管 LED Display
2011年3月16日 1
第四章 单片机对数码管的控制
4.1 4.2 4.3 4.4 4.5 4.6
2011年3月16日
单片机显示设备简介 单片机显示设备简介 显示设备 数码管显示器结构 数码管显示器结构 显示器 数码管的字形码 数码管的字形码 数码管的连接方式 数码管的连接方式 数码管的显示方式 数码管的显示方式
2011年3月16日
13
4.5 数码管的显示方式 2. 动态显示
单片机不断扫描数码管,分时送出数据, 单片机不断扫描数码管,分时送出数据, 利用“视觉暂留” 利用“视觉暂留”的现象进行显示 优点:硬件简单,使用器件少、 优点:硬件简单,使用器件少、成本低 缺点:程序复杂, 缺点:程序复杂,需CPU不断扫描数码 不断扫描数码 极大占用CPU时间 管,极大占用 时间 实现方式: 实现方式:直接连接
2011年3月16日
17
4.7 设计实例 硬件设计
数码管型号的选择
尺寸大小、 尺寸大小、颜色 共阴、共阳、 共阴、共阳、 单个组合、 位一体 单个组合、4位一体
数码管与单片机的连接
并行连接、 并行连接、串行连接
数码管的驱动方式
三极管、缓冲器、锁存器、 三极管、缓冲器、锁存器、专用芯片
2011年3月16日 18
亮度不均匀
2011年3月16日 12
亮度均匀
4.5 数码管的显示方式 1. 静态显示
单片机只送一次数据至数码管即可保持字 形的显示 优点:程序简单,不占用CPU时间 优点:程序简单,不占用 时间 缺点:硬件复杂,使用器件多、 缺点:硬件复杂,使用器件多、成本高 实现方式: 实现方式:使用锁存器锁存数据
4.2.2 数码管内部连接方式 数码管内部二极管的连接方式: 数码管内部二极管的连接方式:
g f com a b a f e d g b c
dp
dp g f
e
d c b a
com
e d com c dp
com
dp g f
e d c b a
共阴极(CC) 共阴极
com端接低电平 端接低电平 输入高电平亮
2011年3月16日
14
4.6 数码管的驱动 数码管工作时所需电流较大, 数码管工作时所需电流较大,约 (10×8=80mA),因此无法直接接单片机 × , IO口,需要电流驱动、译码等设备: 口 需要电流驱动、译码等设备: 1. 三极管(放大电流) 三极管(放大电流)
PNP
2. 译码器(减少IO端口占用) 译码器(减少 端口占用 端口占用)
放大成整数显示 放大成整数显示
使用sprintf()函数 函数 使用
2011年3月16日
22
4.7 设计实例 4. 数字显示中的灭零
数字显示过程中, 数字显示过程中,按习惯数字首位为零 应不予显示。设计思想: 应不予显示。设计思想:程序中应记录 数字的位数。 数字的位数。
2011年3月16日
23
输入字符查表转换为字形码
使用数组转换

输入的字符需加小数点
P0=ledcc[3]&0x7F; P2=ledca[3]|0x80;
2011年3月16日 10
4.4 数码管的连接方式 并行连接
数码管与单片机8位同时连接 数码管与单片机 位同时连接 优点: 优点:传输数据速度快 缺点:占用IO口较多 缺点:占用 口较多
74LS138
2011年3月16日 15
4.6 数码管的驱动 3. 缓冲器(增大驱动能力) 缓冲器(增大驱动能力)
74LS244、74LS245 、
4. 锁存器(锁存输出数据) 锁存器(锁存输出数据)
74LS373、74LS573 、
5. 串入并出移位寄存器(串行输入) 串入并出移位寄存器(串行输入)
串行连接
数码管与串入并出移位寄存器相连,移位寄 数码管与串入并出移位寄存器相连, 存器与单片机以串行方式相连 优点:占用IO口少 优点:占用 口少 缺点:传输数据速度慢, 缺点:传输数据速度慢,硬件成本高
2011年3月16日 11
限流电阻的选择
数码管与单片机相连接时, 数码管与单片机相连接时,需要使用限流 电阻。 电阻。
4.7 设计实例 2. 软件设计
软件流程图
2011年3月16日
19
4.7 设计实例 2. 软件设计
字形码的选择(共阴、共阳 字形码的选择 共阴、共阳) 共阴 显示字符转换字形码(段码 段码) 显示字符转换字形码 段码 数码管的控制策略(位选码 位选码) 数码管的控制策略 位选码 延时时间的选择 宏的使用 函数封装
74LS164、74LS595 、
6. 专用芯片(程序简单效果好) 专用芯片(程序简单效果好)
MAX7219、MAX7221、HD7229、8279 、 、 、
2011年3月16日 16
4.7 设计实例
任务要求: 任务要求: 使用数码管设计一个单片机的 信息显示装置, 信息显示装置,能够显示单片机输 出的数字和字符信息。 出的数字和字符信息。
亮度高、信息量少、 亮度高、信息量少、成本低
数码管:输出数字、 数码管:输出数字、简单字符
亮度高、简单实用、功耗低、成本低 亮度高、简单实用、功耗低、
2011年3月16日
4
4.1 单片机的信息显示设备 3. LED点阵:显示复杂文字、图形 点阵:显示复杂文字、 点阵
亮度高、功耗大、 亮度高、功耗大、成本高
4. LCD液晶:显示复杂字符、图形 液晶:显示复杂字符、 液晶
亮度低、需背光照明、功耗低、 亮度低、需背光照明、功耗低、大屏幕 成本高、 成本高、可实现触摸操作
2011年3月16日
5
4.2 数码管显示器的结构 数码管(LED Display)是由发光二极 数码管 是由发光二极 管组成的显示器件,一般由8个发光二极 管组成的显示器件,一般由 个发光二极 管构成字段,通过字段不同的亮灭组合 管构成字段, 来显示字符。 来显示字符。
相关文档
最新文档