Proteus仿真实验---4x4矩阵按键

最近在回顾学习,之前一直没想到要记录一下,突然想到还是要写一写学习笔记的,不仅能记录自己的学习过程,还能记录一下学习过程中出现的问题和思考。(知识能力有限,有错的地方还请不吝指正,谢谢!)

 下面先来记录一下第一个问题:

一个简单的矩阵按键加数码显示如下:

        简单介绍一下矩阵按键:将按键排列成4x4的矩阵,按照行列将按键的各引脚接在起,行接在P1口的高四位,列接在了P1口的低四位;用的数码管为四引脚控制的七段数码管。

电路:

 keil程序:

        

        行列判断:如有按键按下,判断列,先将P1口设置为0x0f,也就是将高四位置0低四位置为1,若是第一行第一列按下,则P1口值为0x07,给keyvalue赋值为0,也就是按键S0,表示第一行第一列,第二列P1口值为0x0b,keyvalue的值按它的排序值给,就是1,也是按键S1,剩下两列P1口值分别为0x0d,0x0e;

        判断行,将P1口设置为0xf0,也就是高四位置1,低四位置0,若是第一列第一行按下,则P1口值为0x70,给keyvalue赋值为原来的keyvalue,第二行第一列按下P1口值为0xb0,keyvlaue的值则是在列判断基础上加4,按键则是S4,后面三个按键也是在原来列基础上加4,就是这一行的按键,还有两列对应的P1口的值为0xd0,0xe0。

        这里有个问题:为什么P1口赋值0x0f,按键按下后为1的引脚会变为0?

#include "reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;

#define GPIO_KEY P1
#define GPIO_LED P2

u8 KeyValue;     //用来存放按键的值


void delay(u16 i)   //延时函数
{
	while(i--);
}

//u8 code smgduan[17] = {0x40,0xcf,0x24,0x30,0x19,
//											0x12,0x02,0xf8,0x00,0x10};  //单个数码管对应的0~9的值

											
void keyscan(void)
{
	u8 a=0;
	GPIO_KEY = 0x0f;  //判断列
	if(GPIO_KEY != 0x0f)  //检测按键是否按下
	{
		delay(1000);  //延时10ms消抖
		if(GPIO_KEY != 0x0f)
		{
			GPIO_KEY = 0x0f;  //判断列
			switch(GPIO_KEY)
			{
				case(0x07):KeyValue = 0;break;  //列的值
				case(0x0b):KeyValue = 1;break;
				case(0x0d):KeyValue = 2;break;
				case(0x0e):KeyValue = 3;break;
			}
			
			GPIO_KEY = 0xf0;  //判断行
			switch(GPIO_KEY)
			{
				case(0x70):KeyValue = KeyValue;break; //
				case(0xb0):KeyValue = KeyValue+4;break;
				case(0xd0):KeyValue = KeyValue+8;break;
				case(0xe0):KeyValue = KeyValue+12;break;
			}
			while((a<50)&&(GPIO_KEY != 0xf0))
			{
				delay(1000);
				a++;
			}
		}
	}
}

void main()
{
	
	while(1)
	{
		keyscan();
		GPIO_LED = KeyValue;
	}
}

 最后仿真出现的问题是,列的值可以判断出,但是到行却没有?

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Proteus仿真是一款功能强大的电子电路仿真软件,可用于帮助开发人员设计和验证电路设计的正确性和性能。在stm32时钟设计和实现方面,Proteus仿真可以提供以下几个方面的帮助: 1. 时钟电路设计:Proteus仿真软件提供了各种元件和器件模型,可以用于设计stm32的时钟电路。开发人员可以在软件中添加和连接时钟源、晶振、电容、电感等元件,并设置其参数和特性。 2. 时钟频率设定:Proteus仿真软件允许开发人员设定时钟的频率。可以通过调节晶振的参数、加入PLL锁相环电路和设置分频器等方式,实现对stm32时钟频率的控制和调整。通过仿真,可以验证时钟频率的稳定性和精度。 3. 时钟分频设计:在stm32的时钟设计中,时钟分频是很常见的需求。Proteus仿真软件允许开发人员设计和验证时钟分频电路的正确性。通过添加和设置分频器,可以将时钟分频为需要的频率,满足不同外设和模块对时钟频率的要求。 4. 时钟精度和稳定性验证:Proteus仿真软件可以模拟外部环境对时钟信号的影响,如电源噪声、温度变化等,帮助开发人员验证时钟的精度和稳定性。可以通过仿真来检测和调整时钟电路,使其满足系统要求。 总之,Proteus仿真软件在stm32时钟设计和实现方面是一个强大的辅助工具。通过仿真,可以帮助开发人员验证电路设计的正确性、稳定性和精度,加快产品开发的进度,以及减少出错的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值