导航:首页 > 操作系统 > 单片机按键扫描子程序定义出错

单片机按键扫描子程序定义出错

发布时间:2023-07-12 11:40:39

❶ 关于C51单片机 按键 编程的问题

#include<reg51.h>
uchar key_scan(); //按键扫描子程序
void delay10ms(); //延时程序
uchar key_free(); //等待按键释放程序
void key_deal();
sysem_initial(); //初始化程序
void main()
{
sysem_initial();
while(1)
{
key_scan();
uchar key_free();
key_deal();
}
}
void sysem_initial()
{
PCON=0x00;
SCON=0x18; //选择串行工作方式0
ES=0; //禁止串行口中断
}
uchar key_scan()
{
unsigned char key,Rankcode;
int i,j;
SBUF=0x00; //使扫描键盘的74LS164输出为00H,所有列线低电平
while(TI!=1); //串行输出完否
TI=0; //清零
P1=0x03; //所有行线为高电平
if(P1&0x03!=1) //如果有键按下
{
delay10ms();
for(i=0;i<8;i++)
{
if(P1&0x03!=1) //确实有键按下
{
Rankcode=0xFE; //扫描第一列
SBUF=Rankcode; //输出列值
while(TI!=1);
TI=0;
if(P1&0x03==0x01) //如果第一行有键闭合
{
j=0;
}
else if(P1&0x03==0x02) //如果第二行有键闭合
{
j=1;
}
key=j*8+i;
}
if(j==0||j==1) //扫描按键
break; //退出
Rankcode=(Rankcode<<1)|0x01; //否则,开始扫描下一列
}
}
return(key); //返回键值
}
uchar key_free()
{
key=key_scan();
SBUF=0x00;
P1=0x03;
while(TI!=1);
TI=0;
while(P1&0x03!=0x03); //如果仍有键按下,等待按键释放
return(key);
}
void delay10ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<120;j++);//你的问题出在这里{}之间需要;,可以不要直接加;
}
//还有你上面所有等待的while() 后面都需要;这才是空等待,否则是带后面的语句指令一起执行

❷ 单片机调试的时候出错了 求大神

就这个程序而言,就纯在这几个错误,只要是有错误就无法编译成功


错误一、按键检测函数内,赋值语句被你写成判断语句了,如下图这里

解决办法是,将temp的变量声明语句移到函数外,使其成为全局变量


错误三、既然程序的前端有各个函数的定义部分,那就要吧主函数放在最上端,不需要经常修改的函数放在最下端,虽然这不是强制性的,但这是一个良好的编程习惯


先改正以上错误吧!

❸ 51单片机 计算器程序 不能成功 按键按下没反应 附上程序 看哪里错误

看不太懂,不过发现好象按键扫描程序有误
象 P1=0xf0; 你的目的可能是让高4 位作为输出,低4 位作嫌拿为输入
按键按下时,高4 位的1传到低4 位上,芹键搭这样是不行的
对于51单片机,由于是弱上拉,只有0将1拉低,1不可能将0填高
就是说让 P1=0xf0,读取P1,低4 位永远亮段是0
if(P1==0xf1) if (P1==0xf2).......等条件永远不具备

阅读全文

与单片机按键扫描子程序定义出错相关的资料

热点内容
简便算法100点 浏览:161
如何创新我的世界服务器 浏览:881
战地怎么看服务器地址 浏览:348
vue怎么打包放上服务器 浏览:165
为什么安卓服夏日活动没有兔子头 浏览:894
pubg为什么显示服务器连接失败 浏览:650
阿里云扫码登录服务器 浏览:971
化学基础pdf 浏览:896
51单片机晶码管 浏览:281
怎么查服务器假死原因日志在哪看 浏览:277
扫描pdf文件 浏览:926
解压密码百度云在线解压 浏览:767
传播学算法推荐 浏览:749
我的世界网络游戏如何查找服务器 浏览:257
安卓和苹果通讯录怎么互传 浏览:203
怎么打开隐私与应用加密的菜单 浏览:416
我的世界服务器小游戏的地址大全 浏览:578
在网络安全中加密安全机制提供了数据的 浏览:249
南京前端程序员私活怎么收费 浏览:981
拓扑pdf 浏览:440