用C51实现简单拨号

这篇博客介绍了如何利用89C51单片机和4*4矩阵键盘实现拨号功能。通过P1口连接键盘,P0和P2口连接数码管,当按键被按下时,数码管会显示对应的键值。文章详细阐述了Proteus布线、矩阵键盘的按键判断原理和步骤,并提供了键值判断、按键处理和主循环的实现过程。最后展示了不同输入阶段的数码管显示效果。
摘要由CSDN通过智能技术生成

目标

通过89C51的P1口连接4*4的矩阵键盘,P0和P2口连接八位数码管。开始运行后,按下矩阵按键后数码管上显示出对应的键值,从左向右依次排列。当数码管显示满八位数字后,再有字符输入时整体字符向左平移,输入字符从最右端挤入。

Proteus布线

用P0口的低四位P0.0-P0.3来连接矩阵键盘的行线,用P0口的高四位P0.4-P0.7来连接矩阵键盘的列线。我是按照下图这样来给矩阵键盘分配键值的。
在这里插入图片描述
矩阵键盘判断按键值的原理和步骤:
(1)令P0=“11110000”,当无按键按下时,P0保持不变。每个键盘的左端口为低电平,右端口为高电平。一旦有按键按下,按键部位的导线连通,该按键的左端口会被上拉成高电平。这一行的行线对应的P0.0-P0.3端口的电平就会变成高电平。此时便可以通过P0口的端口值(总共分为11110001、11110010、11110100、11111000四种情况)来判断被按下的按键属于第几行。
(2)在判断完行之后。立刻令P0=“00001111”,此时每个键盘的左端口为高电平,右端口为低电平。由于按键部位的导线已经连通,该按键的右端口会被上拉成高电平。这一列的列线对应的P0.4-P0.7端口的电平就会变成高电平。此时便可以通过P0口的端口值(总共分为00011111、00101111、01001111、10001111四种情况)来判断被按下的按键属于第几列。

实现过程

1、首先,编写我们最核心的键值判断函数
就按照刚才讲过的原理和步骤,用judge_number()函数实现如下:

uint judge_number()
{
   
	uint hang=0,lie=0;
	     //判断行
				switch(P1)//"11110000"
				{
   
					case 0x0f1:{
   hang=0;break;}
					case 0x0f2:{
   hang=1;break;}
					case 0x0f4:{
   hang=2;break;}
					case 0x0f8:{
   hang=3;break;}
					default :{
   hang=0;  }
	       }
	      //判断列
	       P1=0x0f;//"00001111"
				switch(P1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值