-
51单片机实验 7段数码管静态显示数字
2020-12-17 21:28:1051单片机实验 7段静态数码管显示数字 P0口接7段静态数码管,实现1秒数字显示,从0到16(F),来回闪烁显示 由于数字显示有一秒替换下一个数字的要求,所以采用定时器T0定时一秒。 由于前面实验积累,可以复用一部分...51单片机实验 7段数码管静态显示数字
P0口接7段静态数码管,实现1秒数字变换显示,从0到16(F),来回闪烁显示
由于数字显示有一秒后替换下一个数字的要求,所以采用定时器T0定时一秒。
由于前面实验积累,可以复用一部分以前的代码。C代码:
#include <at89x52.h> code unsigned char SegTab[16]={//段码表--共阳 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e }; void Timer0_init(void) { TMOD &=~0x0f; TMOD |=0x01; TH0=(65536-50000)/256; TL0=(65526-50000)%256; ET0=1; TR0=1; } void Timer0_ISR(void) interrupt 1 { static unsigned char intcnt=0,idx=0; TH0=(65536-50000)/256; TL0=(65526-50000)%256; if(++intcnt == 20){//一秒 intcnt=0; P0=SegTab[idx++]; if(idx==16) idx=0;} } void main(void) { Timer0_init(); EA=1; //ET0=1; while(1){ ;} }
主要注意段码的选择,本次采用的是共阳极接法的数码管,所以阴极(引脚)为0时对应二极管导通发光,例如数字“8”,由于数码管共阳极接法,应该是000 0000才可以使数码管点亮.
下面是共阳极接法的段码表:
code unsigned char SegTab[16]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e
};如果是共阴极接法的数码管,则应选择以下段码:
code unsigned char SegTab[16]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
}; -
单片机c代码数码管静态显示任意数字
2010-04-09 13:21:24单片机c代码数码管静态显示任意数字,好东西啦 -
51单片机之数码管静态显示
2018-10-14 14:17:59在对单片机编程以实现数码管静态显示数字之前,我们先来了解一下数码管的结构以及一些常识,对于数码管,有称八段数码管的,也有称七段数码管的,其实无非就是多在一个小数点h , 如上图所示, 我们就拿带小数点的...在对单片机编程以实现数码管静态显示数字之前,我们先来了解一下数码管的结构以及一些常识,对于数码管,有称八段数码管的,也有称七段数码管的,其实无非就是多在一个小数点h , 如上图所示, 我们就拿带小数点的八段数码管来说 , 其实我们没必要说对数码管很陌生,因为数码管无非就是八块发光二极管集成在了一起,另外数码管有共阴极和共阳极数码管之分,说起共阴,共阳,大家可能会有所陌生,这里我们简单介绍一下:
共阴极数码管: 将八只发光二极管的负极通过一根总线连接在了一起 , 然后每只二极管的正极被引了出来,通过二极管的单向导通性可知,当对应数码管的二极管段接入高电平时,二极管点亮。(换句话说,也就是说想让哪一只二极管点亮,就给哪只二极管高电平。下面编程我们就以共阴数码管为例)
共阳极数码管: 将八只发光二极管的正极通过一根总线连接在了一起 , 然后每只二极管的负极被引了出来,通过二极管的单向导通性可知,当对应数码管的二极管段接入低电平时,二极管点亮。
好了,数码管的基本知识我们说完了,下面来说一些编程相关的,首先,我们知道数字数码管而言,那肯定是显示数字的,那么我们怎么编程实现呢?其实很简单,你想啊,数码管由八段发光二极管组成,那么我们就拿着上面的图,来画一画,比如说,显示数字 “1 ” ,那也就是让 b 和 c 亮,编程的话,即是0x06,0x06转换为二进制 ,是00000110,这样一来给了 b 和 c 段高电平,实现了点亮数字 “1”;下面我们就把数码管所能够显示的数字以及符号通过一个表格整理出来(以共阴极数码管为例);
显示数字 十六进制 二进制 显示数字 十六进制 二进制 0 0x3f 00111111 B 0x7c 01111100 1 0x06 00000110 C 0x39 00111001 2 0x5b 01011011 D 0x5e 01011110 3 0x4f 01001111 E 0x79 01111001 4 0x66 01100110 F 0x71 01110001 5 0x6d 01101101 H 0x76 01110110 6 0x7d 01111101 L 0x38 00111000 7 0x07 00000111 P 0x73 01110011 8 0x7f 01111111 n 0x37 00110111 9 0x6f 01101111 u 0x3e 00111110 A 0x77 01110111 这里附上一个LED代码查询小软件:
(链接: https://pan.baidu.com/s/1lCDKtCwwabfYE7dWZ2iA-g 提取码: 5fgm),需要的可以下载使用,很方便。
接下来我们还要来介绍一款芯片,也就是74HC573锁存器。
你可能会问,我们静态显示数码管,直接对利用单片机的I/O口对数码管的引脚输出高低电平就好了嘛,为什么还要用到这款芯片?这里我们解释一下,单片机直接控制数码管确实很好,但是我们要明白一点,单片机一共也就 4 x 8 = 32个I/O口,而且我们单片机开发板上都不是只有单个数码管的,都是有六个八个数码管在一块的,如果都用单片机来控制,那一块单片机岂不是什么都干不了了吗,要知道,我们一块51单片机开发板上是由很多模块组成的,有很多功能需要实现,如果一个数码管显示模块就把我们的I/O口资源给用完了,那还有什么意义呢。相反,如果用上锁存器,我们只需要用到单片机的两个I/O口就可以了,完全足够了。
下面,我们来简单介绍一下这款芯片: 对于74HC573,形象一点,我们只需要将其理解为一扇大门,只不过这扇大门是单向的,其中11引脚(LE)控制着门的开、关状态,高电平为大门打开,低电平为大门关闭。D0-D7为输入,Q0-Q7为输出,在LE = 1,即输入高电平时,输入端=输出端,输入是什么,输出也就原封不动的输出;在LE = 0 ,即输入高电平时,大门关闭,实现锁存,不再输出。了解之后,我们按照电路图,来进行编程,代码实现。
如上图所示,在实现数码管的静态显示中,我们用到了两个锁存器,两个I/O口,P1.6和P1.7,分别是位选和段选。关于位选和段选我们解释一下:
位选,位选,也就是位置的选择,一块单片机开发板上,有8个数码管,依次是1、2、3.....8, 这样的话,比如说我们想让第三个亮,就可以通过位选锁存器来实现;
至于说段选,就很好理解了,就是我们常说的控制一个数码管中的 a,b,c...g 段,使其显示数字,这就是段选,即选择数码管的哪一笔段。好了,下面开始编程:
/* ***************************************************** */ // 工 程 : 51单片机开发板 // 文件名 : smg.c // 处理器 : STC89C52RC // 编译环境 : Keil4 C51 // 系统时钟 : 11.0592MHZ // 版 本 : V1.0 // 设计者 :朱豪男 // 生成日期 : 2018-10-14 // 修改日期 : // 简单描述 : 数码管静态显示程序 /* ***************************************************** */ #include <reg52.h> #define uchar unsigned char #define uint unsigned int #define data P0 //P0口宏定义 /* ***************************************************** */ // 数码管位选数组定义 /* ***************************************************** */ uchar code leddata[] = { 0x3F, //"0" 0x06, //"1" 0x5B, //"2" 0x4F, //"3" 0x66, //"4" 0x6D, //"5" 0x7D, //"6" 0x07, //"7" 0x7F, //"8" 0x6F, //"9" 0x77, //"A" 0x7C, //"B" 0x39, //"C" 0x5E, //"D" 0x79, //"E" 0x71, //"F" 0x76, //"H" 0x38, //"L" 0x37, //"n" 0x3E, //"u" 0x73, //"P" 0x5C, //"o" 0x40, //"-" 0x00, //熄灭 0x00 //自定义}; }; /* ***************************************************** */ // 位定义 /* ***************************************************** */ sbit du = P1^7; //段选定义 sbit we = P1^6; //位选定义 /* ***************************************************** */ // 函数名称:DelayMS() // 函数功能:毫秒延时 // 入口参数:延时毫秒数(ValMS) // 出口参数:无 /* ***************************************************** */ void delay(uint z) { uint x,y; for(x = 0; x < z; x++) for(y = 0; y < 113; y++); } /* ***************************************************** */ // 函数名称:main() // 函数功能:数码管静态显示 // 入口参数:无 // 出口参数:无 /* ***************************************************** */ void main(void) { uchar i; we = 1; //位选开 data = 0x00; //送入位选数据 we = 0; //位选关 while(1) { for(i = 0;i < 16 ; i++) { du = 1; //段选开 data = leddata[i]; //送入段选数据 du = 0; //段选关 delay(500); //延时 } } }
代码很好理解,我们简单介绍一下,首先我们定义了个数码管位选数组,也就是十六进制代码,这便是后来数码管显示数字的核心,接着,我们用 sbit 定义了位选和段选端口,分别是 P1.6 和 P1.7 ,定义了一个延时函数,其实这一串代码很有意思,开关开关思想,贯穿始终,首先我们把位选打开,送入位选数据后,关闭锁存器,实现锁存,进入循环,随之打开段选锁存器,送入段选数据后,再次关闭段选,接下来,这个延时操作对于我们实际看到数码管的显示效果特别重要,因为程序在段选后之后,会马上消隐,显示的时间之后几个微秒,这显然不太合理,我们需要在关闭段选后加上延时,这样一来,才会让每位数码管亮度保持均匀。
(附上效果视频,链接: https://pan.baidu.com/s/1lAu0QkltthlfjndZ-DfX8g 提取码: 2hqs)
-
51单片机 共阳数码管静态显示
2012-08-11 16:03:02名称:单个共阳数码管静态显示 内容:通过赋值给P1,让数码管显示特定的字符或者数字 -
LED数码管静态显示接口与编程
2020-08-15 09:51:42在单片机系统中,常常用LED数码数码管显示器来显示各种数字或符号。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。 -
数码管静态显示到动态显示——六位8段数码管(共阴极)按顺序间隔1s显示数字1~6
2021-01-21 17:41:54数码管静态显示到动态显示 2021-01-21,51单片机学习笔记 六位8段数码管(共阴极)按顺序间隔1s显示数字1~6 代码: /**************************************************** 六位8段数码管(共阴极)按顺序间隔1s显示...数码管静态显示到动态显示
2021-01-21,51单片机学习笔记
六位8段数码管(共阴极)按顺序间隔1s显示数字1~6
代码:
/**************************************************** 六位8段数码管(共阴极)按顺序间隔1s显示数字1~6 *****************************************************/ #include <reg52.h> //#include <intrins.h> /*此程序也可以用其中的 按位移动函数_crol_和_cror_ 实现对 六位数码管 位显 的扫描*/ #define uchar unsigned char #define uint unsigned int sbit dula=P2^6;//段显 sbit wela=P2^7;//位显 uchar num,dunum,wenum; //定义:计数(中断服务响应次数)变量,段显编码下标,位显编码下标 /*共阴极数码管段显真值表:0,1234,5678,9AbC,dEF.无*/ uchar code table_du[]={0x3f, //0 0x06,0x5b,0x4f,0x66, //1234 0x6d,0x7d,0x07,0x7f, //5678 0x6f,0x77,0x7c,0x39, //9AbC 0x5e,0x79,0x71,0x80, //dEF. 0x00}; //无 /*六位共阴极数码位显真值表:(因为是六位数码管,最高两位用不到,索性都设为高电平) 1111 1110,1111 1101,1111 1011,1111 0111,1110 1111,1101 1111*/ uchar code table_we[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; void display();//声明 显示函数 void main() { EA=1; ET0=1;//打开中断 TMOD=0X01;//选定中断模式 TH0=(65536-50000)/256; TL0=(65536-50000)%256;//初始化装填 TR0=1;//启动计时器 while(1) { /*********************************************************************************** 如果间隔时间足够短,如将50000改为500,将20改为2,此时,间隔时间为500us*2=1ms。 由于扫描速度足够快,在人的眼睛看来,六位数码管就可以同时点亮,而稳定地显示出“123456” 这也就是数码管的动态显示。随着扫描速度的加快,静态显示逐渐过渡到动态显示。 ************************************************************************************/ if(num==20)//经历1s(=20*50ms) { num=0;//初始化计数变量 if(dunum==6)//溢出回零,确保送入下标依次是下标为0~5的编码 { dunum=0; } if(wenum==6)//溢出回零 { wenum=0; } display();//显示函数,点亮相应位的数码管 dunum++;//段显编码下标自增 wenum++;//位显编码下标自增 } } } //中断服务程序 void time0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256;//初始化装填 num++;//计数变量自增,num每增加1,耗时50ms(=50000*1us) } //显示函数 void display() { P0=0xff;//1111 1111 清除位显(共阴极数码管位显为低电平时才会点亮) wela=1;//位显通过 wela=0;//位显保持 P0=table_du[dunum+1];//送入段显编码,数字123456的下标是1~6,故而 加1 dula=1;//段显通过 dula=0;//段显保持 /*若要显示字母AbCdEF,字母AbCdEF下标是10~15,只要改为 加10 即可*/ P0=table_we[wenum];//送入位显 wela=1;//位显通过 wela=0;//位显保持 }
写在最后:
本文仅为个人学习笔记,纰漏之处,欢迎斧正! -
verilog数码管静态显示计数器
2019-05-05 19:32:28最近刚上手数字电路实验,很多地方都不懂,实验课要求做出数码管静态显示计数器。自己写了一段代码也没报错,但是上basys3板子就行不通。 总体思路如下: 1: 计数模块 ``` module cnt( input clk1, ... -
共阳极数码管编码表_单片机入门:数码管静态显示
2020-12-09 17:40:47静态显示是每个数码管的段选必须接一个8位数据线来保持显示的字形码,当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。静态显示的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂...静态显示是每个数码管的段选必须接一个8位数据线来保持显示的字形码,当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。静态显示的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。本次设计是实现两个共阳极数码管显示固定的数字5和9,电路连接如图。注意,P0口需要接上拉电阻后再接到数码管。本设计的程序如下:
#include //包含51单片机寄存器定义的头文件/*******************************************函数功能:静态显示数字“59”共阳数码管编码表0xc0 0xf9 0xa4 0xb0 0x99 0x92 0 1 2 3 4 5 0x82 0xf8 0x80 0x90 0x88 0x83 6 7 8 9 A B 0xc6 0xa1 0x86 0x8e C D E F ******************************************/ void main(void) { P0=0x92; //将数字5的段码送P0口 P1=0x90; //将数字9的段码送P1口 while(1) ; //无限循环,防止程序跑飞 }
温馨提示:需要单片机资料的可后台联系!
-
C51单片机Day03-数码管静态显示
2020-10-09 17:00:04TX实验板用共阴LED显示器,根据16进制显示数字 显示方法:静态显示方法、动态显示方法 一行复制的方法:第一步:一行代码写完之后(注意光标在这一行的最后)shify+home(shift一直不要松手)、第二步:delete、第三... -
单片机静态数码管显示数字
2014-01-14 15:12:45单片机静态数码管显示数字,对于微机c语言也有借鉴意义啊 -
led数码显示控制plc实验_51单片机数码管静态显示和动态显示原理及实验
2021-01-04 00:19:57当多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线全部是连接在一起的,独立的公共端可以控制多位一体中的哪一位数码管点亮,而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把... -
静态数码管显示数字及字母
2019-02-02 11:45:14一个数码管由七个条线和一个小数点组成,要想显示数字或字母可以根据形状来显示。51单片机中数码管使用了共阴接法,所以比如说想要显示数字0,这数码管的a,b,c,d,e,f接高电平,g和dp接低电平,p0口对应的16进制数据... -
单片机 一位数码管静态显示控制电路及程序设计
2010-06-24 08:17:16T89C52单片机和一位数码管组成一个流水显示0-9数字。电路构成用Cepark单片机开发实验板上的四位动态数码管中的一位,做一位静态显示控制。 -
六位数码管静态及动态显示
2021-01-05 22:07:23静态显示:6位数码管循环显示数字0~F; 动态态显示:6位数码管同时显示数字1~6; 源码以及proteus电路原理图 -
【51单片机】STC89C52数码管静态显示实验,含c代码(5)
2020-07-12 11:41:46例:数码管显示数字1。对应二进制排列:00000110. 3.静态显示 每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直达送入新字形码为止。 1)锁存器原理 -
proteus入门,数码管循环显示静态数字详解
2020-02-29 16:07:37问题:我一开始使用共阳极的数码管调试时,显示的数字很乱,发现它把蓝色当成了高电平,红色当成低电平。不知道怎么回事。后来把数码管换成共阴极才正常显示。 此篇文章不仅提供解决此问题的方法。还写一些新手摸索... -
【FPGA——Cyclone Ⅳ学习笔记】五.数码管静态显示(EP4CE6F17C8)
2020-03-21 14:29:42一.原理图 通过第一张数码管的原理图可知,6根位选的信号线与PNP三极管相连然后再控制数码管的位选。...此代码用于实现数码管的静态显示,即六个位显示的数字相同。每经过0.5s数码管显示加1(0~... -
51单片机实例讲解,数码管显示数字“5555”程序
2020-07-14 05:27:10本例是利用74LS164八位移位寄存器(串入、并出)与单片机串行口结合,使数码管静态显示数字“5555”。(1)数码管显示数字“5555”硬件电路(见图20)。 图20 显示字符“5555”接线原理图在图20的电路中,74LS164的相关... -
数码管的静态显示和动态显示
2021-03-19 21:51:21一、TX1C数码管介绍 共阴极和共阳极数码管,实验板上是共阴极数码管,8位一体的数码管。 连接原理图如下面两图:连在一起的段线(段选线)控制数码管亮什么数字,独立的公共端(位选线)...一、数码管的静态显示 ... -
51单片机数码管静态与动态显示
2020-07-16 21:21:20数码管简述 这是一个数码管内部电路原理图,ah每个数字代表一个发光二极管,v是公共端,可以接地或者电源,对应共阴极和共阳极接法。...如果我们将数码管接到P1口上,显示数字“0”的话,那么P1口的八 -
数码管显示数字(滚动和静态)
2019-12-03 21:54:51数码管显示数字(滚动和静态) 1. 8只数码管滚动显示单个数字** 代码: #include<reg51.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char uchar code table[]= {0xc0,0xf... -
51单片机入学第三课——数码管静态与动态显示
2020-08-08 10:08:44文章目录数码管的应用数码管显示的原理静态与动态显示静态显示动态显示锁存器工作原理 数码管的应用 来自百度: 数码管,也称作辉光管,是一种可以显示数字和其他信息的电子设备。玻璃管中包括一个金属丝网制成 的... -
-
静态数码管显示实验
2020-07-13 17:14:06数码管是一种现代常用的数码显示器件,具有发光显示清晰、响应速度快、功耗低、体积小、寿命长、易于控制等诸多优点,在数显仪器仪表、数字控制设备等方面得到广泛应用。本章我们将介绍八段数码管的控制原理以及如何... -
C51单片机学习笔记(五)——数码管的静态显示和动态显示
2019-04-07 23:06:55C51单片机学习笔记(五)——数码管的静态显示和动态显示 文章目录C51单片机学习笔记(五)——数码管的静态显示和动态显示1.数码管的显示原理 1.数码管的显示原理 数码管有一位和多位一体两类,它是由8个LED(a,b,c,d,... -
数码管动态静态显示原理
2018-03-07 13:02:32例如共阴数码管数字0的字段码为00111111B(3FH) 共阴极:八段发光二极管的阴极端连接在一起,阳极端分开控制,使用时候公共端接地,要使哪个发光二极管亮,则对应的阳极端接高电平; 共阳极:八段发光二极管的阳...
收藏数
186
精华内容
74