ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

笔记:51单片机——静态数码管和动态数码管的分别

2022-03-19 09:32:27  阅读:170  来源: 互联网

标签:LED1 case LED2 LED 单片机 51 break 数码管


单片机的机子上有8个数码管,当需要用到的时候可以看到这个管每次选择哪个亮的时候,数电课本上都知道138译码器是比较好的位选择器。就是当我们需要选择哪个数码管亮的时候,分别对应的就给138译码器的三个引脚位给电平,

138译码器译码规则从上往下是低位到高位1 2 4 ,右边的引脚就对应这LED位位选择端,当需要选择哪个数码管亮的时候,就给这个译码器选择就好了。

然后选择好位之后就到段选了,因为选择了数码管就有给亮的数字是多少,这里可以定义一个数组然后赋值给P0端口,数组就是两个8421码,对应着a b c d e f g dp。8421 8421这样子。然后16进制码就是在右边往左边读,就好像让数码管亮数字2就是  a b g e d 点亮就给电平,然后16进制是0x5d

选择的原理大概是这样,

这个是数组显示0-15的

#include <reg52.h>
#include "led.h"


sbit LED=P2^2;     //定义138译码管脚
sbit LED1=P2^3;
sbit LED2=P2^4;

u16 code number[]={0x3f,0x06,0x5b,0x4f,0x66,
                   0x6d,0x7d,0x07,0x7f,0x6f,
				   0x77,0x7c,0x39,0x5e,0x79,0x71};  //0~15    10~15显示abcdef

下面是选择

void delay(unsigned int xms)	  //延迟函数  1表示1ms
{
	unsigned char i, j;
	while(xms--){
	i = 2;
	j = 239;
	do
	{
	  while (--j);
	} while (--i); }


}

void led(u8 s,u8 chr)
{
   	 switch(s)
	 {
      	case 1:LED=1;LED1=1;LED2=1;break;   //选择左边往右数第一个,下面依次往右数
		case 2:LED=0;LED1=1;LED2=1;break;
		case 3:LED=1;LED1=0;LED2=1;break;
		case 4:LED=0;LED1=0;LED2=1;break;
		case 5:LED=1;LED1=1;LED2=0;break;
		case 6:LED=0;LED1=1;LED2=0;break;
		case 7:LED=1;LED1=0;LED2=0;break;
		case 8:LED=0;LED1=0;LED2=0;break;
	 }
	  P0=number[chr];   //选择数码管显示的数字数组第几个。
	  delay(10);
	  //P0=0x00;	   //消隐用于同时显示多个数字出现的时候就需要把注释去掉
}

说到这里有一个注释的P0=0x00就是动态数码管和静态数码管的区别了,正常显示只能让一个数码管亮的,并不能让多个同时亮。当然可以这样,先亮一个然后灭掉,再让另一个亮,这样子只有闪的够快就能骗过人的眼睛。这样子就能让人以为是同时有多个数码管亮。其不然还是一个时间里只有一个亮,只是亮灭的够快,就好像同时亮一样。这里需要延迟一下是因为,当位选  段选   灭,位选  段选   灭,位选  段选   灭 这里执行的时间一样,会导致出现一种错觉就是,会不会下次出现的是 段选   灭 位选 或者    灭  位选  段选,所以需要给一定的机械延迟,让单片机识别出来这样时间段是不同的执行规则。给它一定的反应时间。

标签:LED1,case,LED2,LED,单片机,51,break,数码管
来源: https://blog.csdn.net/m0_64478952/article/details/123588725

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有