单片机学习————数码管与独立按键

静态数码管

LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。所谓静态显示,就是数码管的笔画点亮后,这些笔画就一直处于点亮状态。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。

LED数码管根据LED的不同接法可以分为2类:共阴和共阳。使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。LED显示器时,电路连接图如下。在这里插入图片描述
由于8个LED共有16个引脚,为了减少引脚,形成了共阳极和共阴极两种数码管,如下图,如果是共阴极,点亮方法就是公共脚加低电平,引出脚加高电平,如果是共阳极,公共脚加高电平,引出脚加低电平即可。

注:由po口负责控制8段led数码管。
16进制数的编码如下表。
在这里插入图片描述

八段led数码管代码编码表
在这里插入图片描述
数码管电路原理图
在这里插入图片描述
程序编写


#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值



void main()
{	
	LSA=0;
	LSB=0;
	LSC=0;	//控制38译码器的Y0输出低电平
	P0=smgduan[0];
	while(1);
}

动态数码管显示

动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。

锁存器的使用

锁存器,Latch,是数字电路中的一种具有记忆功能的逻辑元件。锁存,就是把信号暂存以维持某种电平状态,在数字电路中则可以记录二进制数字信号“0”和“1”。只有在有锁存信号时输入的状态被保存到输出,直到下一个锁存信号。通常只有0和1两个值。

锁存器原理图
在这里插入图片描述
1.OE为使能端,当他为低电平的时候, 锁存器开始工作
2.VCC和GND为电源和地端
3.LE为锁存端,当LE为高电平的时候,Q0Q7都跟D0D7状态一样,当LE为低电平的时候,Q0Q7都锁存数据,无论D0D7怎么变化,Q0~Q7都保持锁存之前的那个状态。

74HC138
在这里插入图片描述
LSA,LSB,LSC可由电平构成的二进制决定那个数码管亮,他们的存在可节省io口数量

程序

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

void delay(u16 i)
{
	while(i--);	
}

void DigDisplay()
{
	u8 i;
	for(i=0;i<8;i++)
	{
		switch(i)	 //位选,选择点亮的数码管,
		{
			case(0):
				LSA=0;LSB=0;LSC=0; break;//显示第0位
			case(1):
				LSA=1;LSB=0;LSC=0; break;//显示第1位
			case(2):
				LSA=0;LSB=1;LSC=0; break;//显示第2位
			case(3):
				LSA=1;LSB=1;LSC=0; break;//显示第3位
			case(4):
				LSA=0;LSB=0;LSC=1; break;//显示第4位
			case(5):
				LSA=1;LSB=0;LSC=1; break;//显示第5位
			case(6):
				LSA=0;LSB=1;LSC=1; break;//显示第6位
			case(7):
				LSA=1;LSB=1;LSC=1; break;//显示第7位	
		}
		P0=smgduan[i];//发送段码
		delay(100); //间隔一段时间扫描	
		P0=0x00;//消隐
	}
}


void main()
{	
	while(1)
	{	
		DigDisplay();  //数码管显示函数	
	}		
}

独立按键

在这里插入图片描述
在这里插入图片描述
一般的独立按键有四个脚,无论按键是否被按下,1和2总是相通的,3和4也是相通的。当按键按下时,1、2脚与3、4脚接通,按住不放则保持接通状态。
按键通断过程的抖动:当按键按下时(释放时)输出的理想波形是标准的矩形波,但是,由于机械触点的弹性作用,闭合时电路不会马上稳定的接通,这中间会出现一连串的抖动,如图所示,抖动时间一般为5~10ms。
在这里插入图片描述
按键的消抖:按键的抖动会造成一次按下被误认为多次按下,所以要进行消抖处理,一般分为硬件消抖和软件消抖,这里讨论软件消抖,方法是当单片机检测到按键闭合时,采用延时程序产生5~10ms的延时,等抖动消失后,再判断是否处于闭合状态,同理释放的时候,也要给延时。消抖电路如下
在这里插入图片描述
按键给单片机传达指令的基本原理:按键的一端接地,另一断接单片机的任意一个I/O口,当按键没被按下时,单片机的I/O口是高电平,当按键被按下时,就变成低电平,此时单片机就认为按键被按下了。
程序

1.	void delay(u16 i)  
2.	{  
3.	    while(i--);   
4.	}  
5.	  
10.	void keypros()  
11.	{  
12.	    if(k1==0)         //检测按键K1是否按下  
13.	    {     
14.	        delay(1000);   //消除抖动 一般大约10ms  
15.	        if(k1==0)    //再次判断按键是否按下  
16.	        {  
17.	            led=~led;     //led状态取反  
18.	        }  
19.	        while(!k1);  //检测按键是否松开  
20.	    }         
21.	} 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值