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

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

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

阅读全文

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

热点内容
怎么拿到服务器权限 浏览:192
延时摄影app如何保存 浏览:195
程序员转正申请职级怎么写 浏览:874
closelinuxsocket 浏览:268
程序员0基础该怎么学 浏览:276
android支付宝支付原理 浏览:729
股票指标加密可以导入 浏览:935
怎样算法排卵期 浏览:803
小米如何加密第三方软件 浏览:232
安卓工程师有什么证书 浏览:788
小米相册截屏文件夹目录 浏览:552
scum怎么查看服务器的ip地址 浏览:457
程序员面试要那么长时间吗 浏览:63
程序员那么可爱有几集 浏览:721
韩顺平java入门到精通下载 浏览:880
c语音编译器苹果版 浏览:915
华为云服务器忙 浏览:432
9806h命令 浏览:726
无锡人怎么在APP里 浏览:810
安卓系统怎么让应用不保存缓存 浏览:482