51单片机数码管

这篇具有很好参考价值的文章主要介绍了51单片机数码管。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

51单片机的数码管是一种常用的数字显示设备,用于在嵌入式系统中显示数字和一些特定的符号。数码管通常由七段LED组成,每个LED段可以显示数字0到9以及一些字母和符号。通过控制每个LED段的亮灭,可以显示不同的数字和字符。

在51单片机中,数码管通常连接到GPIO(通用输入/输出)引脚上,通过控制这些引脚的电平状态来控制数码管的显示。通过适当的硬件连接和软件编程,可以实现数码管的各种显示效果。

在软件编程中,可以通过扫描显示的方式来控制数码管的显示,即逐个显示每个数码管,并按照一定的时间间隔刷新显示内容,从而呈现出连续的数字或字符。此外,还可以通过PWM(脉冲宽度调制)技术来调节数码管的亮度,实现不同亮度的显示效果。

数码管在嵌入式系统中广泛应用于时钟、计数器、测量仪表、温度计等各种场合,它们提供了一种直观、便捷且低功耗的数字显示方式。因此,51单片机的数码管模块是嵌入式系统中常见的输出设备之一。
51单片机数码管,51单片机,嵌入式硬件,单片机
51单片机数码管,51单片机,嵌入式硬件,单片机单个数码管共阴极数码管需要给正集高电平1点亮(目前我们在使用的是共阴极的数码管)

51单片机数码管,51单片机,嵌入式硬件,单片机如何区分共阴极数码管和共阳极数码管:共阴极数码管的负极是接在CND(也就是地上的),共阳极数码管的正极是接在5v的电源上的,要想在单片机中驱动共阴极数码管工作需要给共阴极的数码管一个高电平,而共阳极的数码管则和共阴极数码管相反
51单片机数码管,51单片机,嵌入式硬件,单片机四位数码管

51单片机数码管,51单片机,嵌入式硬件,单片机51单片机数码管,51单片机,嵌入式硬件,单片机锁存器:用于数据的锁存通常和数码管配合使用实现数据的锁存
锁存芯片:le表示的是选通端,如果选通端也就是LE为高电频那么输入端D无论输出什么输出端都是什么如果LE为低电频那么输入端都是锁存到上面的值
51单片机数码管,51单片机,嵌入式硬件,单片机51单片机数码管,51单片机,嵌入式硬件,单片机
上拉电阻的作用:开漏状态表示的是可以输出低电平可以输出高电平

51单片机数码管,51单片机,嵌入式硬件,单片机eg1:数码管的静态显示

#include <REGX52.H>
#include <INTRINS.H>
sbit wei = P2^7; 		// 位选择器:根据自己的单片机板定义,不同的单片机产品管脚可能是不同的
sbit duan = P2^6;    // 段选择器
unsigned char 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  //自定义

                         };

void Delay(unsigned int xms)		
{
	unsigned char i, j;
  while(xms){
		i = 2;
		j = 239;
		do{
		   while(--j);
		}while(--i);
	  xms--;
	}
}

void main(){
			// 打开锁存器
			duan = 1; 
			// 段选控制数码管显示什么值
			P0 = leddata[8];
			// 关闭锁存器
			duan = 0;	
			// 延迟函数
			Delay(5);
	

	    // 共阴极数码管加0的时候未选通
			// 打开位选择器
			wei = 1;
			// 数码管全部点亮
			P0 = 0;
			// 关闭段选择器
			wei = 0;
			while(1){
				 
			}
}

eg2:数码管的静态显示让数码管在第一位显示1:延时函数编写在头文件中
51单片机数码管,51单片机,嵌入式硬件,单片机

#include <REGX52.H>
#include "main.h"
#include <INTRINS.H>
#define unit unsigned int
#define uchar unsigned char 
	
sbit  beep = P2^3;
sbit wei  = P2^7; 		// 位选择器
sbit duan = P2^6;     // 段选择器

void main(){
	  // 打开位锁存器
    wei = 1;
	  P0 = 0xfe; // 高电平的16进制位0x06
	  //关闭位锁存器
	  wei = 0;
	  Delay(500);
	  // 打开段选择器
	  duan = 1;
	  P0 =0x06;
	  // 关闭段选择器
	  duan = 0;
	  // 延迟函数500毫秒
	  Delay(500);
	  // while循环一直循环条件为true
	  while(1){
		  

		}

}

eg3:数码管显示0-9循环显示间隔500毫秒

#include <REGX52.H>
#include <INTRINS.H>
#include "Util.h"
// 初始化数组
unsigned char leddata[]={ 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x00  //自定义
 };
void main(){
	   // 使用for循环遍历数组
	   int i = 0;
	   // 计算数组的长度
	   int len = sizeof(leddata)/sizeof(leddata[0]);
	   for(i = 0; i< len; i++){
		         // 打开断选择器
			 duan = 1;
			 P0 = leddata[i];
			 duan = 0;
			 Delay(500);
			 // 打开位选择器
			 wei = 1;
			 P0 = 0;
			 wei = 0;	
		 }

}

eg4:数码管的动态显示

#include <REGX52.H>
#include <INTRINS.H>
#include "Util.h"
// 初始化数组
unsigned char leddata[]={ 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x00  //自定义
 };
 // 创建位选择数组
unsigned char weiOption[] = {
        0x7F, 01111111
	      0xBF, 
				0xDF,
				0xEF,
		    0xF7, 
				0xFB, 
				0xFD, 
				0xFE,
				0x00
 };
void main(){ 
	   int i = 0;
		 int j = 0;
     int lenght = sizeof(leddata)/sizeof(leddata[0]);
     int weiNum = sizeof(weiOption)/sizeof(weiOption[0]);
     while(i < lenght && j < weiNum){
		    wei = 1;
			  P0 = weiOption[j]; // 点亮第一个数码管
			  wei = 0;
			  Delay(1000);
			  // 锁存
			  duan = 1;
			  P0 = leddata[i];
			  duan = 0;
			 	j++;
			  i++;
		 }	
}

eg5:数码管的动态显示:1-4

#include <REGX52.H>
#include <INTRINS.H>
#include "Util.h"
// 初始化数组
unsigned char leddata[]={ 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x00  //自定义
 };


void main(){ 
            // 第一位数码管
              wei = 1;
              P0 = 0xfe;
              wei = 0;
              duan = 1;
              P0 = leddata[1];
              duan = 0;
            Delay(500);
              // 第二位数码管
              wei = 1;
              P0 = 0xfd;
              wei = 0;
              duan = 1;
              P0 = leddata[2];
              duan = 0;
              Delay(500);
                // 第三位数码管
              wei = 1;
              P0 = 0xfb;
              wei = 0;
              duan = 1;
              P0 = leddata[3];
              duan = 0;
                Delay(500);
              // 第四位数码管
              wei = 1;
              P0 = 0xf7;// 11110111
              wei = 0;
              duan = 1;
              P0 = leddata[4];
              duan = 0;
                Delay(500);
	  
	
}

51单片机数码管,51单片机,嵌入式硬件,单片机eg6:循环显示1 , ,3

#include <REGX52.H>
#include "main.h"
#include <INTRINS.H>
#define unit unsigned int
#define uchar unsigned char 
	
sbit  beep = P2^3;
sbit wei  = P2^7; 		// 位选择器
sbit duan = P2^6;     // 段选择器

void main(){
	 

	  while(1){
			    // 清除断码
			    P0 = 0xff;
					// 打开位锁存器
					wei = 1;
					P0 = 0xfe; // 高电平的16进制位0x06
					//关闭位锁存器
					wei = 0;
					// 打开段选择器
					duan = 1;
					P0 =0x06;
					// 关闭段选择器
					duan = 0;
					// 延迟函数500毫秒
					Delay(500);
					// while循环一直循环条件为true
			
			    // 清除断码
			    P0 = 0xff;
			    // 打开位锁存器
					wei = 1;
					P0 = 0xfd; // 高电平的16进制位0x06
					//关闭位锁存器
					wei = 0;
					// 打开段选择器
					duan = 1;
					// 显示数字二
					P0 = 0x5B;
					// 关闭段选择器
					duan = 0;
					// 延迟函数500毫秒
					Delay(500);
					// while循环一直循环条件为true
					
					// 清除断码
			    P0 = 0xff;
					// 打开位锁存器
					wei = 1;
					P0 = 0xFB; // 1111 1011高电平的16进制位0x06
					//关闭位锁存器
					wei = 0;
					// 打开段选择器
					duan = 1;
					// 显示数字三
					P0 = 0x4F;
					// 关闭段选择器
					duan = 0;
					// 延迟函数500毫秒
					Delay(500);
					// while循环一直循环条件为true
			
		}

}

eg6:数码管动态显示效果

51单片机数码管,51单片机,嵌入式硬件,单片机

#include <REGX52.H>
#include "main.h"
#include <INTRINS.H>
#define unit unsigned int
#define uchar unsigned char 
sbit  beep = P2^3;
sbit wei  = P2^7; 		// 位选择器
sbit duan = P2^6;     // 段选择器
//数组的定义
unsigned char code leddata[]={ 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x00  //自定义
 };
// 功能函数
void diaplay(uchar i){
					uchar bai,shi,ge;
	        // 计算个位10位和百位
	        bai = i / 100; // 211 /100 = 2
	        shi = i % 100 / 10; // 211 % 100 / 10 = 1;
	        ge  = i % 10; // 211 % 10
	        

					// 清除断码
			    P0 = 0xff;
					// 打开位锁存器
					wei = 1;
					P0 = 0xfe; // 高电平的16进制位0x06
					//关闭位锁存器
					wei = 0;
					// 打开段选择器
					duan = 1;
					P0 =leddata[bai];
					// 关闭段选择器
					duan = 0;
					// 延迟函数500毫秒
					Delay(500);
					// while循环一直循环条件为true
			
			    // 清除断码
			    P0 = 0xff;
			    // 打开位锁存器
					wei = 1;
					P0 = 0xfd; // 高电平的16进制位0x06
					//关闭位锁存器
					wei = 0;
					// 打开段选择器
					duan = 1;
					// 显示数字二
					P0 = leddata[shi];
					// 关闭段选择器
					duan = 0;
					// 延迟函数500毫秒
					Delay(500);
					// while循环一直循环条件为true
					
					// 清除断码
			    P0 = 0xff;
					// 打开位锁存器
					wei = 1;
					P0 = 0xFB; // 1111 1011高电平的16进制位0x06
					//关闭位锁存器
					wei = 0;
					// 打开段选择器
					duan = 1;
					// 显示数字三
					P0 = leddata[ge];
					// 关闭段选择器
					duan = 0;
					// 延迟函数500毫秒
					Delay(500);
					// while循环一直循环条件为true

}

void main(){

  while(1){
		  diaplay(233);
		
	}

}文章来源地址https://www.toymoban.com/news/detail-811207.html

到了这里,关于51单片机数码管的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二、51单片机控制数码管

    (1)数码管的外观: 数码管可分为单个的,联排的(2位、4位、8位) (2)数码管的作用: 数码管是显示器件,是用来显示数字的。 (1)数码管的亮灭是由内部的照明LED的亮灭实现的。 (2)一位数码管内部有八颗LED灯,利用内部的LED灯的亮和灭让数码管显示不同的数字。 (1)驱动方法的

    2023年04月09日
    浏览(45)
  • 51单片机入门————数码管显示

    我们在马路上看到的红绿灯,就是由数码管来实现的,就是其中可能加入了一些延时和转换 数码管是通过控制138译码器与74HC245来控制数码管的亮灭与数字的显示 我们先讨论一个数码管 数码管有共阳极和共阴极,我们现在使用的STC89C52是共阴极的,说明数码管共用阴极 上面是

    2024年02月13日
    浏览(42)
  • 51单片机(数码管可调时钟)

    1.数码管(共阴极)如何显示数字:位选+段选(单个) 位选:138译码器通过P22、P23、P24三个端口输入二进制数(011、000等)来选择连同译码器右边的哪一条线,而这些线又分别连着数码管的LED12345678、决定选择哪一个来显示数字 段选:决定输出什么数字,数码管下方又连着一

    2024年02月05日
    浏览(46)
  • 51单片机控制数码管动态显示

    首先打开proteus,导入8位数码管和89c51。 然后如图连线,分清断码和位码, 断码就是一个数码管的7个LED灯。 位码:就是第几位显示,由于是共阴极,所以哪位接地就显示哪位。 下面通过改变位码的接线就可以看出不同的效果 下面就编写程序,从第1位到第8位显示从0到7的八

    2023年04月21日
    浏览(43)
  • 51单片机:数码管和矩阵按键

    目录 一:动态数码管模块 1:介绍  2:共阴极和共阳极 A:共阴极 B:共阳极 C:转化表  3:74HC138译码器 4:74HC138译码器控制动态数码管(位选) 5:数码管显示完整代码 6:74HC573锁存器 A:基本点 B:原理图介绍 c:74HC573控制数码管代码 二:矩阵按键模块 1:介绍 2:原理图  3:矩阵按键代码       

    2024年02月15日
    浏览(46)
  • 51单片机矩阵键盘——数码管显示

    当我们熟悉了数码管的位选与段选,并了解的矩阵键盘的扫描之后就可以编写程序了。 按下矩阵键盘S1并松开,数码管第一位(LED8)显示0;按下矩阵键盘S2并松开,数码管第一位显示1;...按下矩阵键盘S16并松开,数码管第一位显示F; 矩阵键盘扫描(输入扫描)     原理:

    2024年02月11日
    浏览(52)
  • 51单片机数码管显示0-9

    初级代码:使用延时函数,延时; 进阶代码:使用定时器,延时:51单片机定时器控制数码管显示_学习笔记吧的博客-CSDN博客 初级代码: 电路接线图:  

    2024年02月12日
    浏览(40)
  • 【51单片机-数码管】:用51单片机写一个八个数码管中选用任意相邻两个数码管,用来循环显示0-99之间的数据,数据显示间隔为0.5s

             用普中51单片机写一个八个数码管中选用任意相邻两个数码管,用来循环显示0-99之间的数据,数据显示间隔为0.5s。         随机数码管 00-99  循环0.5s  显示。        数码管是一种数字显示器件,它由多个发光二极管(LED)组成,可以显示数字、字母、符号等

    2024年02月07日
    浏览(53)
  • 基于51单片机的数码管闹钟设计

    系统功能:利用定时器实现时钟,时钟可以通过独立按键设置,设有一个闹钟,闹钟时间可通过按键进行设置,时钟界面和闹钟界面可通过按键切换,当时钟和闹钟时间相同,蜂鸣器响,提示闹钟时间到等。 此系统重点在于:数码管动态驱动的使用方法,单片机内部定时器的

    2024年02月11日
    浏览(45)
  • 51单片机静态数码管原理及代码

    单个数码管有 8个LED灯 ,通过输入电平点 亮a~g可显示数字 ,以下为原理图:   数码管原理图分为共阴极与共阳极两种 : ① 共阴极 :a~dp位于发光二极管的阳极(即高电平的一端)部分,左接GND端 ② 共阳极 :a~dp位于发光二极管的阴极(即低电平的一端)部分,右接VCC电源

    2024年02月06日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包