
编程思路:每次都是将P1口的值读取进来,再屏蔽低4位,仅对高4位进行判断
{
#define INPUTMASK 0xF0
char ReadPort = 0;
ReadPort = P1 & INPUTMASK;
switch(ReadPort)
{
case 0xf0: break; / 没有任何按键按下,跳出 /
case 0x10: Subfunction1();break; / P14按下,跳转到子函数1 /
case 0x20: Subfunction2();break; / P15按下,跳转到子函数2 /
case 0x40: Subfunction3();break; / P16按下,跳转到子函数3 /
case 0x80: Subfunction4();braak; / P17按下,跳转到子函数4 /
default:
Subfunction5();braak; / 任意2个或以上按键按下,跳转到子函数5 /
}
}
在switch case函数中采用模块块编程,这里的子函数,即在相应的按键状态下其它端口的状态实现,不再赘述。
这要有一个能配合实现这个功能的 电源控制ic(假设为U1)才行。
按键短按时,这个U1的CE为CE=1,则可给单片机及后面的电路供电。单片机运行后并输出一个
io-1信号控制U1,实现短按后能锁定U1正常继续供电。
按键长按时,让单片机的一个io-2输出低电平 让U1的CE和单片机控制U1的io-1拉低,这样U1就断开对后面电路的供电。
一直循环下去。
所以硬件还需要修改才能实现,
这是我想到的方法,可能还有其他更好的方法吧。
你可以先去找找这方面的ic 然后根据这个ic的特性来做
如果是手动按键,肯定有抖动,所以测试结果肯定与你的理想状态不符。记得上次这个提问,我回答过,程序就如楼上所说的一样。
键盘刚被按下,因为抖动,所以反应到P21时,输出的波形也会随这抖动而比较不稳定。
关键还是看你需要达到的具体效果,P21是随稳定的键按下&抬起而变化,还是必须随P31的状态而变化。
以上就是关于初学单片机,编程不太熟悉,51单片机根据开关状态输出高低电平,有逻辑判断,请教编程思路,用C语言!全部的内容,包括:初学单片机,编程不太熟悉,51单片机根据开关状态输出高低电平,有逻辑判断,请教编程思路,用C语言!、单片机单按建开关机,输入输出状态设置问题、单片机按键程序(按键开关状态0和1.且自锁)P3.1 输入,P2.1输出。输入有变化P2.1就取反。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)