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

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

发布时间: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).......等条件永远不具备

阅读全文

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

热点内容
单片机中三位数码管原件 浏览:140
pdf可以删除其中一页 浏览:216
清dns缓存的命令 浏览:103
免费pdf在线转换 浏览:768
堆货算法 浏览:878
vsc编译vc程序 浏览:197
centos55命令 浏览:709
美国干编程有什么条件 浏览:505
阿里云服务器远程链接 浏览:250
墨镜慧眼怎么下载厂商的app 浏览:61
iphone加密专线 浏览:491
aes产生加密文件 浏览:416
编程实现蓝牙通信 浏览:769
怎么恢复掉签的app 浏览:848
服务器部署ip地址 浏览:323
涉密场所周边安全防护距离算法 浏览:674
安卓fpse模拟器怎么设置加速 浏览:948
建行app怎么生成电子签章 浏览:510
获取当前时间javadate 浏览:75
带密码的wifi如何加密 浏览:239