51单片机:数码管和矩阵按键

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

目录

一:动态数码管模块

1:介绍

 2:共阴极和共阳极

A:共阴极

B:共阳极

C:转化表

 3:74HC138译码器

4:74HC138译码器控制动态数码管(位选)

5:数码管显示完整代码

6:74HC573锁存器

A:基本点

B:原理图介绍

c:74HC573控制数码管代码

二:矩阵按键模块

1:介绍

2:原理图

 3:矩阵按键代码


一:动态数码管模块

1:介绍

        LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件;

        我们的51单片机的1个数码管就相当于由8个发光二极管封装在一起, 所以我们只需要控制8个发光二极管封就可以实现数码管的显示,这款单片机是共阴极连接

        数码管扫描(输出扫描)     原理:显示第1位→显示第2位→显示第3位→……,然后快速循环这个过程,最终实现所有数码管同时显示的效果,节省I/O口

51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

 2:共阴极和共阳极

我们这款单片机是共阴极所以我们主要介绍共阳极连接

A:共阴极

1.LED共阴极是指LED灯中的二极管的阴极有一个共同的接点,并且该接点连接在GND端,即处于低电平状态。      我们只需要给它一个高电频(1)就可以点亮他

51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

 从高位到低位读取

eg:让第一个数码管显示0

51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

数码管段码表对应的0,1,2,3,4,5,6,7,8,9

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

B:共阳极

        LED共阳极是指LED灯中的二极管的阳极有一个共同的接点,并且该接点连接在VCC端,即处于高电平状态。  我们只需要给它一个低电频(0)就可以点亮他

51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

 51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

    数码管段码表对应的0,1,2,3,4,5,6,7,8,9

unsigned char LED7Code[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82,
						0xf8, 0x80, 0x90};

C:转化表

51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

 3:74HC138译码器

        概述 D74HC138D 是一种三通道输入、八通道输出译码器,主要应用于消费类电子产品

        3个io口控制8位,因为单片机上面的资源有限

51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

 51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

 51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

 通过A0~A2数据的输入来控制Y0~Y7数据的输出;实现 3个io口控制8位,(位选)

4:74HC138译码器控制动态数码管(位选)

51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

 eg:点亮LED8

        EDL1对应的是Y7的输出端口,所以只需要控制A,B,C输出Y7即可

        从高位到低位读和写;   (只需要将二进制转化位10进制的7即可)

P2_4=1;P2_3=1;P2_2=1;//二进制111转化十机制为:7,输出Y7;当用户选择1时点亮LED8

5:数码管显示完整代码

#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//延时函数的声明
void Delay(unsigned int xms);
/**
  * @brief  数码管的选择和读取
  * @param  Location:选择那一个数码管; Number:选择显示那个数字(0~9)
  * @retval 无
  */
void Nixie(unsigned char Location,Number)
{
    switch (Location)  
    {
        case 1:P2_4=1;P2_3=1;P2_2=1;break;//二进制111转化十机制为:7,当用户选择1时点亮LED8
        case 2:P2_4=1;P2_3=1;P2_2=0;break;//二进制110转化十机制为:6,当用户选择2时点亮LED7
        case 3:P2_4=1;P2_3=0;P2_2=1;break;//二进制101转化十机制为:5,当用户选择3时点亮LED6
        case 4:P2_4=1;P2_3=0;P2_2=0;break;//二进制100转化十机制为:4,当用户选择4时点亮LED5
        case 5:P2_4=0;P2_3=1;P2_2=1;break;//二进制11(高位补零)转化十机制为:3,当用户选择5时点亮LED4
        case 6:P2_4=0;P2_3=1;P2_2=0;break;//二进制10(高位补零)转化十机制为:2,当用户选择6时点亮LED3
        case 7:P2_4=0;P2_3=0;P2_2=1;break;//二进制1(高位补零)转化十机制为:1,当用户选择7时点亮LED2
        case 8:P2_4=0;P2_3=0;P2_2=0;break;//二进制0(高位补零)转化十机制为:0,当用户选择3时点亮LED1 
    }  
    P0=NixieTable[Number];	//段码输出
    Delay(1);				//显示一段时间
	P0=0x00;				//段码清0,消影  
}


void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
void main()
{
	while(1)
	{
		Nixie(1,1);		//在数码管的第1位置显示1
		Delay(20);
		Nixie(2,2);		//在数码管的第2位置显示2
		Delay(20);
		Nixie(3,3);		//在数码管的第3位置显示3
		Delay(20);
	}
}

6:74HC573锁存器

A:基本点

        74HC573是拥有八路输出的透明锁存器,输出为三态门,是一种高性能硅栅CMOS器件。如图,OE为三态允许控制端(低电平有效),通常叫做输出使能端。1D--8D为数据输入端;1Q--8Q为数据输出端:LE为锁存允许端,或锁存控制端。图为74HC573的真值表,真值表中字母代码含义如下:H-高电平,L一低电平;X一任意电平,Z一高阻态,也就是既不是高电平也不是低电平,而它的电平状态由与相连的其他电气状态决定,Q0一上次的电平状态。

51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

 A:OE为片选段,低电平有效当,其为低电平时锁存器正常OE为低电平时,LE控制锁存器的状态

B:LE=1 时 输入D=输出的Q

C:LE=0 时  输出的nochange,与所上一次相同

D:  段选锁存:控制该数码管显示的内容             位选锁存:控制那一路数码管显示。

B:原理图介绍

51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

 公阴极数码管段选:

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

 公阴极数码管位选:

        共阴数码管的每一位(WEI1,WEI2,WEI3…)都是公共的阴极,只有输入低电平的时候才会被点亮,所以位选的时候被选中的位必须是低电平。

eg:选择WE1 为:PO=0xfe  (从高位到低位开始写)

unsigned char  table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};					
//位选的8个数码管

c:74HC573控制数码管代码

#include <REGX52.H>
sbit dula=P2^6;	//段选:选择输出的内容
sbit wela=P2^7;	//位选:选择输出数码管的位置
//段选:0~9
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//位选:1~8个数码管
unsigned char  table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};					
//延时子函数
void Delay(unsigned int xms)  
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

//74HC573芯片控制的数码管
//Location:位选选择哪一个数码管;Number段选:选择输出的内容
void Nixie(unsigned char Location,Number)
{   
    
    switch (Location)  
    {
        case 1:P0=table[Location-1];wela=1;wela=0;break;
        case 2:P0=table[Location-1];wela=1;wela=0;break;
        case 3:P0=table[Location-1];wela=1;wela=0;break;
        case 4:P0=table[Location-1];wela=1;wela=0;break;
        case 5:P0=table[Location-1];wela=1;wela=0;break;
        case 6:P0=table[Location-1];wela=1;wela=0;break;
        case 7:P0=table[Location-1];wela=1;wela=0;break;
        case 8:P0=table[Location-1];wela=1;wela=0;break; 
    }
    P0=NixieTable[Number];	
    dula=1;
    dula=0;
    Delay(1);				
	P0=0x00;				 
      
}
void main(){
    while(1){
        Nixie(1,1);
        Nixie(2,2);
        Nixie(3,3);
       
       
    }
}

二:矩阵按键模块

1:介绍

        矩阵键盘扫描(输入扫描)     原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果,节省I/O口

2:原理图

51单片机:数码管和矩阵按键,STC89C52单片机,51单片机,矩阵,嵌入式硬件

 按下为0;我们使用列扫描,

eg:按下1,5,9,13

1:使他P1端口全部为1

2:1,5,9,13为一列,他们的共同端口为P1^3,显示共同端口为P1^3为0;

3:依次使P1_7,  P1_6,  P1_5, P1_4为0,文章来源地址https://www.toymoban.com/news/detail-617408.html

 3:矩阵按键代码

#include <REGX52.H>


//声明
void Delay(unsigned int xms)
/**
  * @brief  矩阵键盘读取按键键码
  * @param  无
  * @retval KeyNumber 按下按键的键码值
			如果按键按下不放,程序会停留在此函数,松手的一瞬间,返回按键键码,没有按键按下时,返回0
  */
unsigned char MatrixKey()
{
	unsigned char KeyNumber=0;
	
	P1=0xFF;
	P1_3=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}
	
	P1=0xFF;
	P1_2=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}
	
	P1=0xFF;
	P1_1=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}
	
	P1=0xFF;
	P1_0=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}
	
	return KeyNumber;
}
void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

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

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

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

相关文章

  • 51单片机按键控制数码管显示0-9

    实验题目:使用51单片机设计两个按键控制数码管显示0-9,当K1按下减1,当K2按下加1. 理解程序可参考我的另外两个文章; 51单片机数码管显示0-9_学习笔记吧的博客-CSDN博客 51单片机独立按键控制合集_学习笔记吧的博客-CSDN博客 两个文章一结合就是一个新的产物,所以51单片机

    2024年02月11日
    浏览(37)
  • 51单片机——秒表(定时器扫描独立按键和数码管)

            这次实验主要是用定时器来定时扫描独立按键和数码管,代替两个模块函数中的延时函数。用定时器定时扫描的好处就是,主函数中的延时并不会影响按键的检测和数码管的扫描,只会影响响应速度。因为定时器是溢出就会执行中断程序,是定时的扫描。 改进的

    2024年02月10日
    浏览(39)
  • 51单片机“独立按键”控制静态数码管———显示数字0-9

    (1).独立按键模块电路图可以清楚的看到,所有从引脚JP1出来的电流都会接到GND,且当所有按键按下时被执行链接GND。所以,当JP1引脚各端口----识别----到“电流为低电平为0时”,说明按键被按下,否则为高电平按键没有被按下。 ( 2).按键的原理其是需要我们单片机有检

    2024年02月11日
    浏览(33)
  • 【51单片机】EEPROM-IIC实验(按键控制数码管)

    目录   🎁I2C总线 ​编辑 🎁代码 🏳️‍🌈main.c 🏳️‍🌈i2.c 🎆代码分析   I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信;I2C总线有两根双向的信号线,一根 数据线SDA 用于收发数据,一根 时钟线SCL 用于通信

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

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

    2024年02月11日
    浏览(39)
  • 51单片机实验三:数码管显示时钟 按键调节时间时闪烁提示

    功能效果:1.时分秒的动态显示。2.用三个按键实现时分秒的修改,调节的数字闪烁提示。  

    2024年02月11日
    浏览(28)
  • 单片机学习-使用矩阵按键来显示数码管0-F

    1、行列扫码 //数码管字摸 u8 gsmg_code[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};      //共阴 显示0-F 2、线翻转扫描

    2024年02月04日
    浏览(35)
  • 51单片机用矩阵键盘控制数码管,求助大佬

    从黑体的地方开始,我想通过矩阵键盘控制数码管显示0-15,但是不知道怎么搞两位数的显示,是不是延时什么的有问题 #include REGX52.H sfr P4 = 0xC0; unsigned char code duanma[18]={         0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x80,0xc0,0x86,0x8e,0xbf,0x7f}; sbit R1 = P3^0; sbit R2 = P3^1; sbit R3 = P

    2024年02月09日
    浏览(30)
  • C51单片机的电子时钟(数码管显示+独立按键模块修改及暂停时间)

    IMG_1120 通过查看这三个原理图我们可以得知控制K1、K2、K3及K4是通过P31、P30、P32及P33来实现的,控制8个数码管是P22、P23及P24来实现, 控制发光二极管则由P00-P07来实现。 代码分为三部分分别为main.c、key.h、key.c scankey()函数的主要代码,通过软件入手提高系统的可靠性,防止外

    2024年02月05日
    浏览(41)
  • 51单片机的串口实验之数码管显示与按键实验(8位数字任意传输)

    目标效果: 1、电脑发送任意小于=8位数字( SUBF只有8位最大只能发送255,但是可以通过数组进行临时存储来实现传输多字节 )数字,在数码管上显示对应的数字且同时满足高位是0可以不显示  2、矩阵按键按下后,电脑接收所按下的按钮 实验器材: 1、普中51单片机。2、ST

    2024年02月02日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包