Proteus仿真51单片机+4X4矩阵按键扫描+数码管0-F显示

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Proteus仿真51单片机+4X4矩阵按键扫描+数码管0-F显示相关的知识,希望对你有一定的参考价值。

51单片机+4X4矩阵按键扫描+数码管0-F显示


  • 🎞📽📺🎬Proteus仿真效果:
  • 📓工程架构

📚功能说明

📝按键4x4共16个按键,通过按下对应的按键,分别显示0-9,a-f,字符。

  • 🔰数码管显示

✨采用的的共阴数码管,代码实现部分:

//共阴数码管段码表
unsigned char code seg[]=0x3f/*0*/,0x06/*1*/,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77/*A*/,0x7C,0x39,0x5E,0x79,0x71/*F*/;
void display(unsigned char Num)

	P2=seg[Num];
		

  • 🔰4x4矩阵部分

🌼按键扫描功能代码实现部分:

uint16_t key_scan(void)

    uint16_t key_val=0;
    uint16_t temp=0;		
	/*************扫描第1行**************/
    P1 = 0X00;
    P1 = 0XF7;
    if((P1&0XF0)!=0XF0)
    
       delay_ms();//消抖
        if((P1 & 0XF0)!=0XF0)
        
            temp=(P1&0XF7);
            switch(temp)
            
                case 0xE7:  key_val=1;   break;
                case 0xD7:  key_val=2;   break;
                case 0xB7:  key_val=3;   break;
                case 0x77:  key_val=4;   break;
                default:    key_val=0;   break;
            
        
    
    
		/*************扫描第2行***************/
    P1=0X00;
    P1=0XFB;
    if((P1&0XF0)!=0XF0)
    
       delay_ms();
        if((P1 & 0XF0)!=0XF0)
        
            temp=(P1&0XFB);
            switch(temp)
            
                case 0xEB:  key_val=5;  break;

                case 0xDB:  key_val=6;  break;

                case 0xBB:  key_val=7;  break;

                case 0x7B:  key_val=8;  break;

                default:    key_val=0;  break;
            
        
    

		/*************扫描第3行************/
    P1=0X00;
    P1=0XFD;
    if((P1&0XF0)!=0XF0)
    
       delay_ms();
        if((P1 & 0XF0)!=0XF0)
        
            temp=(P1&0XFD);
            switch(temp)
            
                case 0xED:  key_val=9;   break;
                case 0xDD:  key_val=10;  break;
                case 0xBD:  key_val=11;  break;
                case 0x7D:  key_val=12;  break;
                default:    key_val=0;   break;
            
        
    
		/*************Scan  4st Line************************/
    P1=0X00;
    P1=0XFE;
    if((P1&0XF0)!=0XF0)
    
       delay_ms();
        if((P1 & 0XF0)!=0XF0)
        
            temp=(P1&0XFE);
            switch(temp)
            
                case 0xEE:  key_val=13;  break;
                case 0xDE:  key_val=14;  break;
                case 0xBE:  key_val=15;  break;
                case 0x7E:  key_val=16;  break;
                default:    key_val=0;   break;
            
        
    
    return key_val;

📖主程序代码

#include "key_scan.h"
#include "SEG.h"

void main()

	static uint16_t Key_Value=0;
	display(0);
	while(1)
	
		Key_Value = key_scan();
		if((Key_Value !=0) && (Key_Value != 16))
		display(Key_Value);
		else if(Key_Value == 16)
		display(0);
	
	

⛳工程源码和仿真资源

🍁基于Proteus8.12版本仿真

链接:https://pan.baidu.com/s/16_9CiAQmoV61NMHtoqb45Q 
提取码:bjk8

以上是关于Proteus仿真51单片机+4X4矩阵按键扫描+数码管0-F显示的主要内容,如果未能解决你的问题,请参考以下文章

Proteus仿真51单片机4x4矩阵键盘扫描lcd1602显示

51单片机8x9矩阵键盘+数码管+74HC595+Proteus仿真

51单片机 4×4键盘矩阵控制条形LED显示+ Proteus仿真

51单片机4x4矩阵键盘扫描+数码管显示

Proteus仿真51单片机+LCD1602显示+按键扫描功能实现模板

Proteus仿真4X4矩阵按键显示0-F