单片机编程高手,麻烦您帮我看看独立键盘对吗?我怎么就又不了?
DLJP:MOV P3,#0FFH;P3口赋值高电平
MOV A,#0FFH;A也为高电平P3比较做准备
ABC1:CJNE A,P3,ABC2;比较有键盘输入吗?
AJMP ABC1;重新扫描
ABC2:LCALL YSSS;延时防抖
MOV B,P3;把p3口数据放入一个地方
CJNE A,P3,$;等待放键
ABC3:MOV A,#11111110B;送人动态扫描条件
MOV R0,#00H;记录那个键按下?
ABC5:CJNE A,B,ABC4;比较
XCH A,R0;交换条件
RET
ABC4:INC R0;记录再次扫描
RL A;左一次
CJNE R0,#08,ABC5;判断r0大于8 吗?
AJMP ABC3;如果大于8重新赋值
答案:这段程序我看了一半,就发现缺不少东西,尤其是延时和读P3口
在第7行 CJNE A,P3,$; 循环的读取P3,等待放键 之前,
每一次读P3口状态,必须MOV P3,# 0FFH
所以至少应该这样:
LOOP:MOV P3,# 0FFH
CJNE A,P3,LOOP
而且在键盘程序中,延时消抖是非常重要的,判断按键是否确实松开也很重要
建议你找本讲51汇编的书看看相关部分,理解一下
就算是P3口的8个按键程序,也要比这长的多
天上1云间
我想问一下,楼主为什么用汇编编写单片机程序呀,C51不是更方便吗。
回答一下,按键程序的本身,C和汇编其实差不了多少,都比较麻烦。
其他:LCALL YSSS;延时防抖
这个延时程序 也贴出来 我想问一下,楼主为什么用汇编编写单片机程序呀,C51不是更方便吗。
上一个:东芝单片机
下一个:这段汇编语言是什么意思?