钻石会员
  
主题
帖子
积分21330
阅读权限50
注册时间2008-11-14
最后登录1970-1-1
在线时间 小时
|
大家有没有兴趣啊?
那5个按键太麻烦了,按来按去,还要想办法找位置装好。
我觉得还是用一个编码开关搞定好一点。一个就顶5个用。装什么盒子也方便,就打了个孔,像一般电位器一样固定就行。
因为不想再改M8电源的程序了,所以考虑用“大炮打蚊”的方法。
用一片单片机 + 一个编码开关 重新做一片板,然后接5根线到M8电源的5个按键上。模拟M8电源上自带的按键动作。从而达到用单一编码开关来代替5个按键的目的。
具体是:
往左转是 减。
往右转是 加。
短按一下是来回切换电压、电流调节,决定是电压加减,还是电流加减。
长按一下是储存数据至EEPROM。
这个按键可以随意扩展多个按键。就单片机本身资源来说,只受IO口的多少限制。编码开关占用一个中断及一个IO口。
接下来,我得找时间搭一下电路,验证一下。
程序我试了一下,可以正常动作。呵呵。
以下为选段。
我不会写C的,仅能写出想要的结果,没能力优化的。高手看了笑笑就好。呵!
PORTC上的0 ~ 3 是电流电压调节的4个按键输出,储存键另设。
if (key_int==1) //电压、电流调节。
{
if (state == 0) //电压,state由按键按下产生。短按。长按是储存数据。
{
key_int=0; //清除key_state状态
if (keycounter == 0)
{
PORTC.0=0; //电压++,低有效
delay_ms(10);
PORTC.0=1;
}
if (keycounter == 1)
{
PORTC.1=0; //电压--,低有效
delay_ms(10);
PORTC.1=1;
}
}
if (state == 1) //电流,state由按键按下产生。短按,长按是储存数据。
{
key_int=0; //清除key_state状态
if (keycounter == 0)
{
PORTC.2=0; //电流++,低有效
delay_ms(10);
PORTC.2=1;
}
if (keycounter == 1)
{
PORTC.3=0; //电流--,低有效
delay_ms(10);
PORTC.3=1;
}
} |
|