51单片机的数码管和矩阵键盘

使用4*4的矩阵键盘和一个数码管

在4*4的矩阵键盘上编码0-F的字符,和一个数码管显示每个键盘上输入的字符。

//4*4键盘检测程序,按下键后相应的代码显示在数码管上
#include<reg51.h>
typedef unsigned char UINT8;
UINT8 i=100;
UINT8 j,k,temp,key;
void delay(unsigned char i)
{
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
UINT8 code table[]=
{
	0x3f,0x06,0x5b,0x4f,
	0x66,0x6d,0x7d,0x07,
	0x7f,0x6f,0x77,0x7c,
	0x39,0x5e,0x79,0x71
};

void display(unsigned char num)
{
     P0=table[num];
}

void init_led()
{
	P0 = 0x00;
}

void main()
{
	while(1)
	{
		P1 = 0xef;
		temp = P1;
		temp = temp&0xf0;
		if (temp != 0xf0)
		{
			temp = P1;
			switch(temp)
			{
				  case 0xee:
					   key=0;
					   break;
				  case 0xed:
					   key=1;
					   break;
				  case 0xeb:
					   key=2;
					   break;
				  case 0xe7:
					   key=3;
					   break;
				  default:
					  break;
			}
			display(key);
			P1=0xfe;
		}
		P1 = 0xdf;
		temp = P1;
		temp = temp&0x0f;
		if(temp != 0x0f)
		{
			temp = P1;
			switch(temp)
			{
				  case 0xde:
					   key = 4;
					   break;
				  case 0xdd:
					   key = 5;
					   break;
				  case 0xdb:
					   key = 6;
					   break;
				  case 0xd7:
					   key = 7;
					   break;
				  default:
					  break;
			 }
			 display(key);
		}
		P1=0xbf;
		temp=P1;
		temp=temp&0x0f;
		if(temp != 0x0f)
		{
			temp=P1;
			switch(temp)
			{
				  case 0xbe:
					   key=8;
					   break;

				  case 0xbd:
					   key=9;
					   break;

				  case 0xbb:
					   key=10;
					   break;

				  case 0xb7:
					   key=11;
					   break;
				  default:
					   break;
			}
			display(key);
		}
		P1=0x7f;
		temp=P1;
		temp=temp&0x0f;
		if(temp!=0x0f)
		{
			temp=P1;
			switch(temp)
			{
				  case 0x7e:
					   key=12;
					   break;

				  case 0x7d:
					   key=13;
					   break;

				  case 0x7b:
					   key=14;
					   break;

				  case 0x77:
					   key=15;
					   break;

				  default:
					  break;
			}
			display(key);
		}
	}
}

这个上面有一个bug就是每进入的时候数码管不是空的而是现实“0”这个没有解决。

时间: 2024-10-11 22:48:02

51单片机的数码管和矩阵键盘的相关文章

单片机第8课:矩阵键盘扫描

JP3接P0,VCC接+5V,矩阵键盘的左边八个引脚接在P1上面.想要的结果是按第0个按键,数码管显示0,以此类推.注意,这里的数码管是共阳极的. #include<reg51.h> #define uint unsigned int #define uchar unsigned char uchar code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa

51单片机:独立按键与矩阵按键控制数码管

一,独立按键注意一下几点 >按下的时候,电压被拉低,所以IO口要传低电平( 0x0 ) >按下的时候要消除抖动 ( 延时10ms ),在判断,是否还是低电平,再做业务处理 下面这段程序,就是通过一个独立按键连接到p1口,控制静态数码管的 一段 进行亮和灭的切换. #include <reg52.h> sbit key_control = P1^0; sbit led = P0^0; typedef unsigned char u8; typedef unsigned int u16

基于51单片机的独立按键和矩阵按键用法

------------恢复内容开始------------ 主要实现如图所示的功能 将主函数以外的函数全部放在qiyu.h文件中 1 //qiyu.h 2 #define KEY_PORT P1 3 #define led P2 4 #define unchar unsigned char 5 #define uint unsigned int 6 7 sbit Buz = P1^5; 8 sbit LED = P2^0; 9 sbit K1 = P3^0; 10 sbit K2 = P3^1

51单片机实现数码管动态显示

-------------------------------------------- 设计要求: 在8位8端的数码管上动态显示76543210,快速显示时人眼看到的效果为同时亮起 -------------------------------------------- 实现目标: -------------------------------------------- 数码管编码计算: -------------------------------------------- 实现代码: 1

51 单片机定时器数码管 从1数到100(带三个按键控制开始,暂停,复位)

#include <reg51.h> #define uint unsigned int #define uchar unsigned char sbit wei=P2^7; sbit duan=P2^6; sbit key1=P3^4; sbit key2=P3^5; sbit key3=P3^6; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//1~9 //0~9,0x77,0x7c,0x39

矩阵键盘 数码管

开始时数码管不显示,顺序按下矩阵键盘后,在数码管上依次显示0~F,6个数码管同时静态显示. 数码管和矩阵键盘 首先关闭所有的数码管的段选不让数码管显示任何数字,然后位选中所有的数码管,接下来只需要选中所有的数码管,以后的操作的只需要送段选数据就行了,接着进入while()大循环不停的扫描键盘是否有被按下 #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wel

[原创]基于51单片机的红外遥控课程设计

[注]: 一眨眼,大学接近尾声,具有找工作需要,所以把大学做的电子设计“劣作”放上来.希望考研失意,还能赶上“好工作”的春招班车.如果大伙有什么工作推荐也可以联系我哦,因为一年考研少接触了这方面,所以难免有些生疏.但请相信我!给我机会我会很认真学的! 邮箱:[email protected] 转载请注明出处呀! 基于51单片机的红外遥控课程设计 目录 第一章 设计简介... 3 第二章 系统方案... 3 一.设计方案对比... 3 二.方案设计... 4 第三章 硬件设计... 5 一.红外遥

单片机入门-矩阵键盘控制数码管显示

任务简述:通过按下4X4矩阵键盘实现数码管对应显示数字 实现方式:通过行列分接法,可以节省使用单片机的I/O口,扫描矩阵键盘是否有按下,判断P2端口得到的值. protues 硬件系统 单片机晶振复位电路: 锁存器.上拉电阻: 4x4矩阵键盘: 代码实现: void key44scan(void)//键盘扫描函数 { uint t; P2=0xfe; t=P2; t=t&0xf0; if(t!=0xf0) { delay(); t=P2; switch(t) { case 0xee:keynum

51单片机第四弹---矩阵键盘

原理图: 原理: 和独立键盘相似 /******************************************************************************* * 实 验 名 : 矩阵键盘实验 * 使用的IO : 数码管使用P0 矩阵键盘使用P3 * 实验效果 : 显示独立键盘的按键值 * 注 意 : *******************************************************************************/