问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

自学单片机 c语言编程 写了个矩阵键盘扫描程序 老是不行,郁闷了两天了呀 请大侠指点下

发布网友 发布时间:2022-05-15 09:56

我来回答

5个回答

热心网友 时间:2023-10-19 05:14

#define uint unsigned int
#define uchar unsigned char
sbit Key_Scanf = P1; //4X4按键显示;
sbit Print_Out = P0; //显示数字P0;
sbit PORT = P2; //数码选择;
sbit SYSLED = P3^1; //系统指示灯;
uchar code table[]={0xff,0x4f,0x12,0x06,0x4c,0x24,0x20,0x0f,0x00,0x0c,0x01}; //0~9数字
void display(uchar); //显示
void delay_50us(uint t); //延时50微秒,防抖动
uchar keyscan(void); //键盘
void SYS_LED(void); //指示灯
uchar a=0;
uchar keynum;
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}

void SYS_LED()
{
SYSLED = 0;
delay_50us(100);
SYSLED = 1;
}

void display( uchar keynum) //根据keynum返回值显示数字
{
PORT=0xfe;
Print_Out=table[keynum];
}
uchar keyscan()
{
Key_Scanf=0xbf; // 扫描第一横行,后四位为1,前四位线与,然后跟原来数值比较,如果不等,则把对应的数字赋给keynum
if((Key_Scanf&0xbf)!=0xbf)
{
delay_50us(100);
if((Key_Scanf&0xbf)!=0xbf)//消抖
{
SYS_LED();
a=Key_Scanf&0xbf;
switch(a)
{
case 0x77:keynum=1;break;
case 0x7b:keynum=2;break;
case 0x7d:keynum=3;break;
default:break;
}
}
}
Key_Scanf=0xdf; //扫描第二横行,后四位为1,前四位线与;
if((Key_Scanf&0xdf)!=0xdf)
{
delay_50us(100);
if((Key_Scanf&0xdf)!=0xdf)
{
a=Key_Scanf&0xdf;
switch(a)
{
case 0x7e:keynum=4;break;
case 0xb7:keynum=5;break;
case 0xbb:keynum=6;break;
default: break;
}
}
}
Key_Scanf=0xef; //扫描第三横行,后四位为1,前四位线与;
if((Key_Scanf&0xef)!=0xef)
{
delay_50us(100);
if((Key_Scanf&0xef)!=0xef)
{
a=Key_Scanf&0xef;
switch(a)
{
case 0xbd:keynum=7;break;
case 0xbe:keynum=8;break;
case 0xe7:keynum=9;break;
default: break;
}
}
}

Key_Scanf=0xf7; //扫描第四横行,后四位为1,前四位线与;
if((Key_Scanf&0xf7)!=0xf7)
{
delay_50us(100);
if((Key_Scanf&0xf7)!=0xf7)
{
a=Key_Scanf&0xf7;
switch(a)
{
case 0xeb:keynum=10;break;
default: break;
}
}
}
return keynum;
}

void main(void)
{
while(1)
{
keyscan();
display(keynum);
}
}

热心网友 时间:2023-10-19 05:14

你的程序很混乱啊,为什么两次if的条件是一样的
还有你对P0赋值之后又进行判断,这个逻辑。。。。。

如果你想让键盘扫描函数不断的查询,就使用do。。。while语句
改成这样你看行不行
void keyscan()//矩阵键盘扫描程序
{
do{
a=P0;
P0=0xf0;
b=P0;
a= a|b;
delay (10);
} while(P0!=0x0f);
}

只是提供一个思路,不保证正确性

热心网友 时间:2023-10-19 05:14

void keyscan()//矩阵键盘扫描程序
{
P0=0x0f;
if(P0!=0x0f) //这里条件0,不会执行后面的程序吧
{delay (10);
if(P0!=0x0f)
{
a=P0;
P0=0xf0;
b=P0;
a= a|b;
};
};
}

热心网友 时间:2023-10-19 05:15

4*4的矩阵按钮接的P1口

//------------------------------------键盘扫描======================
P1=0xf0;
if((P1&0xf0)!=0xf0)
{
delay1ms(20);
if((P1&0xf0)!=0xf0)
{
s=0xfe;
while((s&0x10)!=0)
{
P1=s;
if((P1&0xf0)!=0xf0)
{
r=(P1&0xf0)|0x0f;
b=(~s)+(~r);
}
else
s=(s<<1)|0x01;
}
}
}
//-------------------b为键值--------------------------

热心网友 时间:2023-10-19 05:16

要循环才行
你这样只执行一次就退出来了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
“晚来天欲雪,能饮一杯无?”是什么意思_出处及原文翻译_学习力 胸肌中部怎么练 血沉高是怎么回事,怎样才能降低啊! 中海锦江城多久交房 “QMS”作为“质量管理体系”的英文缩写,其背后理论及应用如何?_百度... 我用QQ登的快手绑定了一个电话号码,电话号码不用了,现在怎么能登得进去... 桂林银行白金客户条件 桂林银行最高等级卡 iQOO 11系列曝光,预计年底正式发布! vivo X90先别买?iQOO 11系列配置堪称豪华 电脑通过单片机串口发送调光指令使单片机产生PWM信号对LED调光 单片机中用矩阵键盘的8个按键分别控制8个LED,当按下时亮,松手时灭,用switch语句 用三个按键控制花样流水灯,一个按键控制从左往右,第二个按键控制,从右往左,第三个按键流水灯 菜鸟教C语言。。。为什么switch case 语句跳不出 C51 单片机P1.0-P1.4口用作按键输入时,使用switch语句怎么定义? 怎么在excel里面实现switch功能 左边是个&quot;土&quot; 右边是个&quot;幼&quot; (土幼)怎么拼 一个土一个幼怎么读 水星无线网卡的光盘不见了,网上哪里有?回拷贝个给我 急求搭配!!!粉色羊绒风衣 最长公共子序列数组开不下怎么办 水星破解… 10W-40机油什么意思,能当四季机油用吗? 请问谁有水星13号计划 Mercury 13求百度云高清资源链接 用水星(Mercury)MW150U 150M无线USB网卡下载一个大约500MB的电影正常需要多少时间,不得虚构,真实, 四十岁的女人穿肉粉色羊绒大衣配 请问铁氟龙什么料? 粉色羊绒衫 适合配什么裤子 要用什么旋转编码器来测直流电机的旋转的角度 如何判断旋转的角度 招商银行新浪微博达人信用卡的具体功能有那些? 介绍有帅哥或女王的动漫 CS1.6当中,有人在跑步中一跳一跳的是怎么跳的?哪有教学视频啊? 问下大神道士7级技能以后先升级8级狗还是先升级8级噬血 你好,我想办理招行的新浪微博联名信用卡,请问这个卡能参加招行官网上的在线办卡ipad mini抽奖吗? 办理新浪微博达人信用卡需要缴纳费用吗? 反光灯槽平面图时怎么表现 招商银行微博达人信用卡何时送包? 荣耀8怎么管理SD卡啊?,卡里东西太多想删掉一些。 新浪微博信用卡是否能开通支持VISA双币种?? 左耳耳鸣好几年滋滋声不断 我从未申请过银行卡,打算申请招行的,请问我是申请young卡好还是微博达人信用卡号呢? ckr10 左耳不时有些滋滋声是什么原因 刚才耳朵忽然有像电流一样的滋滋声,怎么回事? 申请新浪微博信用卡,需要钱吗,怎么拿到卡 已经有招行信用卡了还可以办微博达人的联名卡么 办理了招行的新浪微博联名卡,能在万达之类的电影院享受优惠么》?还是必须办理万达联名卡信用卡? 反光灯槽平面时怎么画 关于新浪微博申请的信用卡是否需要证件说明以及手续费之类的。。。是完全免费的吗 请详细说明! 谁可以告诉我何为顺灯槽,何为反灯槽,最好是有装修图纸的平面图作介绍的。我是木工!谢谢!麻烦介绍详细