标题:
STM32矩阵键盘数码显示仿真实现
[打印本页]
作者:
xmxkx
时间:
2022-6-4 16:31
标题:
STM32矩阵键盘数码显示仿真实现
功能描述:按下对应按键时,则数码显示对应按键值。
复制代码
key.c
#include "key.h"
static u8 key_up=1;//2»Ö§3Öᬰ′
int key=0;
void delayms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<123;j++);
}
}
void KEY_Init()
{
GPIO_InitTypeDef GPIO_InitStructer;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructer.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructer.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructer);
GPIO_InitStructer.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructer);
}
u8 keyscan(void)
{
u16 temp,num;
GPIO_Write(GPIOB,0xf0);
while(1)
{
if(P5==1&& P6==1 && P7==1&& P8==1)
{
key=240;
key_up=1;
}
else if(key_up==1&&(P5==0||P6==0||P7==0||P8==0))
{
// GPIO_ResetBits(GPIOB, GPIO_Pin_0);
// GPIO_SetBits(GPIOB, GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
GPIO_Write(GPIOB,0xfe);
temp=GPIO_ReadInputData(GPIOB);
temp&=0xf0;
if(temp!=0xf0)
{
delayms(2);
temp=GPIO_ReadInputData(GPIOB);
temp&=0xf0;
switch(temp)
{
case 0xe0:num=0x00;break;
case 0xd0:num=0x01;break;
case 0xb0:num=0x02;break;
case 0x70:num=0x03;break;
default:break;
}
}
// GPIO_ResetBits(GPIOB, GPIO_Pin_1);
// GPIO_SetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3);
GPIO_Write(GPIOB,0xfd);
temp=GPIO_ReadInputData(GPIOB);
temp&=0xf0;
if(temp!=0xf0)
{
delayms(2);
temp=GPIO_ReadInputData(GPIOB);
temp&=0xf0;
switch(temp)
{
case 0xe0:num=0x04;break;
case 0xd0:num=0x05;break;
case 0xb0:num=0x06;break;
case 0x70:num=0x07;break;
default:break;
}
}
// GPIO_ResetBits(GPIOB, GPIO_Pin_2);
// GPIO_SetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3);
GPIO_Write(GPIOB,0xfb);
temp=GPIO_ReadInputData(GPIOB);
temp&=0xf0;
if(temp!=0xf0)
{
delayms(2);
temp=GPIO_ReadInputData(GPIOB);
temp&=0xf0;
switch(temp)
{
case 0xe0:num=0x08;break;
case 0xd0:num=0x09;break;
case 0xb0:num=0x0a;break;
case 0x70:num=0x0b;break;
default:break;
}
}
// GPIO_ResetBits(GPIOB, GPIO_Pin_3);
// GPIO_SetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
GPIO_Write(GPIOB,0xf7);
temp=GPIO_ReadInputData(GPIOB);
temp&=0xf0;
if(temp!=0xf0)
{
delayms(2);
temp=GPIO_ReadInputData(GPIOB);
temp&=0xf0;
switch(temp)
{
case 0xe0:num=0x0c;break;
case 0xd0:num=0x0d;break;
case 0xb0:num=0x0e;break;
case 0x70:num=0x0f;break;
default:break;
}
}
return (num);
}
}
}
复制代码
STM32静态秒表.png
(125.35 KB, 下载次数: 78)
下载附件
2022-6-4 16:28 上传
STM32矩阵数码显示
作者:
xmxkx
时间:
2022-6-5 05:44
proteus仿真包忘了发了,按键无反应,求帮助:
dsn目录是仿真.7z
(260.64 KB, 下载次数: 109)
2022-7-1 02:14 上传
点击文件名下载附件
作者:
dsdfxy0
时间:
2022-6-30 23:45
包括keil程序
作者:
927463280
时间:
2022-12-5 19:08
怎么按了没反应
作者:
wldellstar
时间:
2022-12-6 11:11
没有注释的程序,真的是太难看懂了。
作者:
haide1998
时间:
2022-12-7 09:51
好就好在仿真包,果断试一把
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1