矩阵键盘

本文介绍了一个基于51单片机的程序,该程序实现了通过数码管显示不同数字的功能。程序首先初始化数码管,并定义了显示0到15的十六种状态对应的二进制显示代码。随后进入主循环,不断读取P3口的状态来判断应显示的数字,并将相应的显示代码送至P0口,控制数码管显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit wela=P2^0;
sbit dula=P2^1;
uchar temp,num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x7b,0x71
};
void delay(uchar z)
{
	uchar x,y;
	for(x=z;x>0;x--)
	{
		for(y=110;y>0;y--);
	}
}
void main()
{
	wela=1;
	P0=0x00;
	wela=0;
	dula=1;
	P0=0x00;
	dula=0;
	while(1)
	{
		P3=0xfe;
		temp=P3;
		temp=temp&0xf0;
		while(temp!=0xf0)//可改为if(temp!=0xf0)
		{
			delay(5);
			temp=P3;
			temp=temp&0xf0;
			while(temp!=0xf0)//可改为if(temp!=0xf0)
			{
				temp=P3;
				switch(temp)
				{
					case 0xee: num=3;break;
					case 0xde: num=2;break;
					case 0xbe: num=1;break;
					case 0x7e: num=0;break;
				}
				while(temp!=0xf0)
				{
					temp=P3;
					temp=temp&0xf0;
				}
				dula=1;
				P0=table[num];
				dula=0;
			}
		}
		P3=0xfd;
		temp=P3;
		temp=temp&0xf0;
		while(temp!=0xf0)
		{
			delay(5);
			temp=P3;
			temp=temp&0xf0;
			while(temp!=0xf0)
			{
				temp=P3;
				switch(temp)
				{
					case 0xed: num=7;break;
					case 0xdd: num=6;break;
					case 0xbd: num=5;break;
					case 0x7d: num=4;break;
				}
				while(temp!=0xf0)
				{
					temp=P3;
					temp=temp&0xf0;
				}
				dula=1;
				P0=table[num];
				dula=0;
			}
		}
		P3=0xfb;
		temp=P3;
		temp=temp&0xf0;
		while(temp!=0xf0)
		{
			delay(5);
			temp=P3;
			temp=temp&0xf0;
			while(temp!=0xf0)
			{
				temp=P3;
				switch(temp)
				{
					case 0xeb: num=11;break;
					case 0xdb: num=10;break;
					case 0xbb: num=9;break;
					case 0x7b: num=8;break;
				}
				while(temp!=0xf0)
				{
					temp=P3;
					temp=temp&0xf0;
				}
				dula=1;
				P0=table[num];
				dula=0;
			}
		}
		P3=0xf7;
		temp=P3;
		temp=temp&0xf0;
		while(temp!=0xf0)
		{
			delay(5);
			temp=P3;
			temp=temp&0xf0;
			while(temp!=0xf0)
			{
				temp=P3;
				switch(temp)
				{
					case 0xe7: num=15;break;
					case 0xd7: num=14;break;
					case 0xb7: num=13;break;
					case 0x77: num=12;break;
				}
				while(temp!=0xf0)
				{
					temp=P3;
					temp=temp&0xf0;
				}
				dula=1;
				P0=table[num];
				dula=0;
			}
		}
	}
}

  

转载于:https://www.cnblogs.com/fengyepiaolei/archive/2011/11/18/2254578.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值