单片机大程序调试,各位朋友。我做了一个想用来开门的51控制。程序出问韪了。谢谢 80

voidkai_meng()//{staticuint8i=0;uint8inmima[8];saomiao=1;while(saomiao){pi2=0;//第一次扫描... void kai_meng() //
{

static uint8 i=0;
uint8 inmima[8];
saomiao=1;
while(saomiao)
{
pi2=0; //第一次扫描?
LED=1;
if(pi6==0)
{
Delay1();
if(pi6==0)
{
inmima[i]=0x01;
i++;
if(i==8)
{
i=0;in_eeprom(inmima);
saomiao=0;
}
}
}
if(pi7==0)
{
Delay1();
if(pi7==0)
{inmima[i]=0x02;i++;
if(i==7)
{
i=0;
in_eeprom(inmima);
saomiao=0;
}
}
}
if(pc6==0)//可能多删大括号
{
Delay1();
if(pc6==0)
{inmima[i]=0x03;i++;
if(i==7)
{
i=0;
in_eeprom(inmima);
saomiao=0;
}
}
}
pi2=1; pi3=0;//第2次扫描
if(pi6==0)
{
Delay1();
if(pi6==0)
{
inmima[i]=0x04;
i++;
if(i==7)
{
i=0;in_eeprom(inmima);
saomiao=0;
}
}
}
if(pi7==0)
{
Delay1();
if(pi7==0)
{
inmima[i]=0x05;i++;
if(i==7)
{
i=0;
in_eeprom(inmima);
saomiao=0;
}
}
}
if(pc6==0)
{
Delay1();
if(pc6==0)
{inmima[i]=0x06;i++;
if(i==7)
{
i=0;
in_eeprom(inmima);
saomiao=0;
}
}
}
pi3=1; pi4=0;////第3次扫描?
if(pi6==0)
{
Delay1();
if(pi6==0)
{
inmima[i]=0x07;
i++;
if(i==7)
{
i=0;
in_eeprom(inmima);
saomiao=0;
}
}
}
if(pi7==0)
{
Delay1();
if(pi7==0)
{
inmima[i]=0x08;
i++;
if(i==7)
{
i=0;
in_eeprom(inmima);
saomiao=0;
}
}
}
if(pc6==0)
{
Delay1();
if(pc6==0)
{inmima[i]=0x09;i++;
if(i==7)
{
in_eeprom(inmima);
i=0;
saomiao=0;

}
}
}
pi4=1;pi5=0; //第4次扫描
if(pi6==0)
{
Delay1();
if(pi6==0)
{
pi5=1;
inmima[i]=0x00;
i++;
if(i==7)
{
in_eeprom(inmima);
i=0;
saomiao=0;
}
}
}
LED=0;
}
}
展开
 我来答
意法半导体(中国)投资有限公司 2023-06-12
展开全部
MAIN: MOV SP,#50H MOV DPTR,#TAB;读入字模指针 MOV 30H,DPL; 存起来 ;堆栈低8位 MOV 31H,DPH ;堆栈高8位 MOV 32H,30H;再记录指针,留作移动了多少位的判断 用。 MOV 3H,31H ;3H记录字模数据的高位地址 INC 3H;3H高位地址+5,表示数据有5X256列之多。 ROL: MOV R2,#01H;设扫描次数 INI1: MOV DPL,30H;这段是扫描一次32列 MOV DPH,31H MOV R4,#32 MOV R3,#0 LOP1 P1,R3 CLR A MOVC A,@A+DPTR MOV P0,A INC DPTR CLR A MOVC A,@A+DPTR MOV P2,A INC DPTR CAL DELAY INC R3 DJNZ R4,LOP1 DJNZ R2,INI1;这条预留扫描次数用可以调整速度 MOV DPL,3…
百度网友87b23c2
2013-08-22
知道答主
回答量:11
采纳率:0%
帮助的人:8.4万
展开全部
对于矩阵键盘,我建议用带上拉的,这个程序写起来非常非常方便!带上拉的矩阵键盘,4行(或者4列)一直是高电平(因为接着上拉嘛~),你只需要把没接上拉的列(行)按0111,1011,1101,1110的顺序扫描就行。现在假设扫描到0111,就是第一列是低电平,你按下第一列的哪一个键,哪一行的引脚就会被拉低,这样就检测到了。
如果说的不是很明白。。。可以给你发原理图和代码。
追问
我是p1.2到1.5是行。1.6到1.7和3.6列。因为内有上拉电阻就没有在外面上拉。你Q多少,我发全部程序给你改下1002380711
追答

 

连接左边插针的IO口作为输出,连接上边插针的IO口作为输入。当输出口全为高,你按下任意按键,输入口检测到的都是高电平(因为被上拉了)。当输出口输出0111,即第一行为低电平时,你按下第一行的某一个按键,对应的IO口会变为低电平,这样你检测低电平,就知道哪一个键被按下。输出口再输出1011,1101,1110不停的循环就行。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
意法半导体(中国)投资有限公司
2021-01-14 广告
可以写对它写程序,让它听从你的安排,你让它实现什么功能它就能实现,比如电子钟、电子琴、打印机、手机、电梯控制,智能家具如:空调、冰箱、洗衣机等,如果这些家电没有它,什么都不能工作。单片机内部很复杂,你研究的越深你就会越爱上它,它可以帮你实现... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
GUEL86
2013-08-22 · TA获得超过5856个赞
知道大有可为答主
回答量:5538
采纳率:86%
帮助的人:2739万
展开全部

这是一个4*4键盘程序,很简单的程序加一个数码管显示的仿真实例,供参考。

更多追问追答
追问
俺也做过。不过这次无论怎么去不了抖。按一下跳几次,我从一毫秒到700毫秒之间去抖都不行。去他妈妈的!之前做控制数码管。调时间没问题,这次死了。
百度文字限制,没办法全部上代码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zn123717885
2013-08-24 · TA获得超过1033个赞
知道小有建树答主
回答量:771
采纳率:52%
帮助的人:119万
展开全部
思路有问题,软件去抖你应将全部按键看成整体,扫一次就获取一个键盘编码,如编码有按键变化则延时15ms,再扫取一次键盘偏码,对比前后两次编码就可确认
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友966a334
2013-08-22 · TA获得超过134个赞
知道答主
回答量:34
采纳率:0%
帮助的人:20.4万
展开全部
不知所云啊。能解释下不
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xachf
2013-08-22 · TA获得超过316个赞
知道小有建树答主
回答量:263
采纳率:0%
帮助的人:216万
展开全部
你这个程序作为键盘扫描,太啰嗦了,找个课本看看,应该很简单
追问
哎。少一个while
等待放手。有这样多事要做啊!都不算高手。否则一眼看出问题,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式