IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 从零开始带你玩转单片机----------【第四期】数码管显示 -> 正文阅读

[嵌入式]从零开始带你玩转单片机----------【第四期】数码管显示

??第一话——基础知识

🤡1.1什么是数码管?

在这里插入图片描述
在这里插入图片描述

LED数码管内部由多个发光二极管构成,LED数码管为“8”字形,算小数点段总共8段,每一段对应着一个发光二极管,有共阴极和共阳极两种。

🤖1.2用一位数码管显示一个数字

在这里插入图片描述
在这里插入图片描述
假设用一位数码管表示数字7,实际上我们只要点亮a、b、c三段的二极管,其他的保持熄灭,就能呈现出数字7的显示;但是我们此时需要注意数码管是共阴极还是共阳极连接,上图为共阴极连接,要点亮a、b、c段的二极管,首先公共端要输入0-低电压,a、b、c三段输入为1-高电平,其他为低电平即可,共阳性原理类似。

👾1.3四位一体的数码管

在这里插入图片描述
在这里插入图片描述

四位一体的数码管,每个数码管公共端单独分开(12、9、8、6),相同的段选端接在一起(a~g,dp),如果要在某一个上显示数字,先选中需要显示数字的那位的公共端,在进行段选即可。

👹1.4译码器

  • 译码器是一种具有“翻译”功能的逻辑电路,这种电路能将输入二进制代码的各种状态,按照其原意翻译成对应的输出信号。有一些译码器设有一个和多个使能控制输入端,又成为片选端,用来控制允许译码或禁止译码。
    在这里插入图片描述
    在这里插入图片描述

-三八译码器——就是用三位来控制八位,但首先需要三个引脚片选上,G1接高电平,G2A、G2B接低电平,才能实现;将三位选择端组成的二进制数据换算为对应十进制数据,就是选择控制的端口,如101转化为十进制为5,那么选中的就为Y5,参照上面的真值表。

??第二话——代码实操

😃 2.1数码管显示一个数字

/*************一位数码管显示一个数字*********************/

#include <regx51.h>

void main()
{
	P2_2=0;     /*********这里是三八译码器****************************/
	P2_3=0;    /*********输入一个1 0 0的数据,对应为操作Y4******/
	P2_4=1;   /*********也就是操作第4位数码管*********************/ 
	
	P0=0X07;     //数码管的段码,对应数据为0000  0111,也就是数字7
	while(1);
}

🤣 2.2随意改变参数的数码管显示

/*******************随意调整显示位置和内容的数码管程序**********/
#include <regx52.h>

//共阴极数码管的段码,显示数字0~9
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};


//开发板上有8个数码管,用38译码器选定第几个数码管的位置函数
void Nixie(unsigned char Location,Number)   
{
	switch(Location)
	{
	  case 1:P2_4=1; P2_3=1;P2_2=1; break;
	  case 2:P2_4=1; P2_3=1;P2_2=0; break;
	  case 3:P2_4=1; P2_3=0;P2_2=1; break;
	  case 4:P2_4=1; P2_3=0;P2_2=0; break;
			
	  case 5:P2_4=0; P2_3=1;P2_2=1; break;
	  case 6:P2_4=0; P2_3=1;P2_2=0; break;
	  case 7:P2_4=0; P2_3=0;P2_2=1; break;
	  case 8:P2_4=0; P2_3=0;P2_2=0; break;
	}
	  P0=NixieTable[Number];            //想让数码管显示几,就从这里给P0口赋对应的数码管段码数组
	
}


void main()
{
	Nixie(6,3);                       //给函数传参数,让第6个数码管,显示数字3
	while(1)}

😂 2.3动态数码管显示

#include <regx52.h>
#include <intrins.h>  //nop函数的头文件

 /**********************************************************/
 /**************随意改变参数的延时函数***********************/
 
void Delay(unsigned char xms)        
{                                   
	while(xms)
	{
	  
		unsigned char i=2;
		unsigned char j=199;         
		_nop_();
	  do
	  {
	   while(--j);
	  }while(--i);
		xms--;                
  }                                 
}                                 
  /*************************************************************/



 /***********************0~9的数码管显示段码*********************/
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
 

 /*****************数码管的位置选择,选择第几位数码管的函数*******/
void Nixie(unsigned char Location,Number)   
{
	switch(Location)
	{
		case 1:P2_4=1; P2_3=1;P2_2=1; break;
	    case 2:P2_4=1; P2_3=1;P2_2=0; break;
	    case 3:P2_4=1; P2_3=0;P2_2=1; break;
	    case 4:P2_4=1; P2_3=0;P2_2=0; break;
			
		case 5:P2_4=0; P2_3=1;P2_2=1; break;
		case 6:P2_4=0; P2_3=1;P2_2=0; break;
		case 7:P2_4=0; P2_3=0;P2_2=1; break;
		case 8:P2_4=0; P2_3=0;P2_2=0; break;
	}
	  P0=NixieTable[Number];//让数码管显示具体数字
	  Delay(1);           //延时1毫秒,视觉停留,余辉效应
	  P0=0X00;            //消影,不然显示会有混乱,可以把这个注释掉,观察实验现象
}

/***************主函数进入数码管显示函数***********************/
/**********实际显示1后显示2,在显示3,因为延时1ms视觉停留,所以看着是数码管显示4 5 6的静态显示***********************/
void main()
{
	while(1)
	{
	Nixie(4,4); 
	Nixie(5,5);
	Nixie(6,6);
	
	}
}

😘2.4两个独立按键控制单个数码管递加、递减

#include <regx52.h>
#include <intrins.h>  //包含nop函数的头文件

unsigned char i;    //定义一个全局变量,用于后面传递数据
unsigned char cnt;  //定义一个全局变量,计数器的作用,用于累加

/******延时函数******/
void Delay(unsigned char xms)
{
	while(xms)
	{
	  
		unsigned char i=2;
		unsigned char j=199;
		_nop_();
	  do
	  {
	   while(--j);
	  }while(--i);
		xms--;
  }
}

/*******第几位数码管显示的函数*******/
void NixieLocation()
{
    P2_4=1;
    P2_3=1;
    P2_2=1; 
    P0=0x00;	//初始化数码管,让数码管不显示
}

/****************数码管显示数字几的段码*************/
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};	


void main()
{
	  while(1)
		{
	         NixieLocation();    //调用数码管位置函数
	
	         if(P3_1==0)        //按键检测,按键按下执行循环体里的
	         {
		       Delay(20);       //按键消抖
		       while(P3_1==0);  //按键松手判定
		       Delay(20);       //按键松手去抖
		
		
		          if(cnt<10)     //越界判断,因为数码管我们写的0~9的段码,所以不能超过10位
		          {
		             cnt++; 	//每按一次,计数器cnt递加一次		
			         i=NixieTable[cnt];    //让i为数码管显示的数据
			         Delay(1000);        //延时
	          	  }else
	           	  {
			         cnt=0;             //超过10后,cnt归0,在一次递增
			         i=NixieTable[0];	//数码管显示也要初始化
                     Delay(1000);			
		          }
	         }
	
					
	             if(P3_0==0)      //按键检测
	             {
		            Delay(20);     //延时去抖
		            while(P3_0==0);   //松手检测
		            Delay(20);    //延时去抖
		
		
		          if(cnt>0)     //因为要递减操作,递减下去会出现负数,所以要设置这个越界判定
		          {
		             cnt--; 	//每按一次,递减操作			
			         i=NixieTable[cnt];   //数码管显示的数据,
			         Delay(1000);       //延时
	          	  }else
	          	  {
			         cnt=9;        //计数器递减到小于0时,初始化为9
			         i=NixieTable[9];	//数码管显示也初始化
                     Delay(1000);		//延时
		          }
	            }
					 
				if(P3_0!=0&&P3_1!=0)    //上面的程序,不能让数码管一直显示,我们让这两个按键不操作时,进入到循环体里,执行数码管的显示,不然按键松手数码管就不显示了
                {					
				P0=i;        //数码管一直显示
                }				 
     }
}

??第三话——总结

数码管的显示实际就是先选位,在用段码来显示对应数字,学完这节,大家可以尝试写一个简易秒表程序,按键控制开始,停止,清零的操作。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:33:13  更:2022-09-13 11:37:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:37:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码