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

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

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

阅读全文

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

热点内容
辞海分册pdf 浏览:933
安卓系统页面怎么调 浏览:773
压缩文件的用法 浏览:32
如何用浏览器访问服务器地址 浏览:205
soft编译器 浏览:113
三轴车床的编程指令 浏览:71
天生敏感pdf 浏览:565
西瓜星球服务器怎么刷钻石 浏览:838
php生成chm 浏览:658
解释程序和编译程序产生目标吗 浏览:609
dos命令rem 浏览:371
plc程序员水平高低 浏览:854
linux服务器linux云 浏览:373
大脚重置命令 浏览:130
app怎么引导页面 浏览:946
pdf转换成w0rd 浏览:569
压缩空气属于什么能量类型 浏览:881
上海交警app怎么付费 浏览:601
暗黑2怎么切换服务器 浏览:20
安卓如何玩港服游戏 浏览:350