|
开始只有理论解码方法,只知道和鼠标的解码差不多,相位解码,
现在买到了编码开关,就是显示器上用的单键飞梭开关,采用电平改变触发中断方式,如果采用边沿触发方式,只能走2格解1个码
电路图PDF,protel99se格式,以及含中文显示、频率采集的一些代码。
点击此处下载ourdev_182732.rar(文件大小:145K)
核心代码如下,其他是一个项目的一部分,能用T6963驱动的LCD屏显示中文字,字库在ZM.H文件中
//外部中断0,用于编码开关解码,解码图: A接中断脚(AVR的PD2),以此为基准,B用来判断方向(连到AVR的PA1), C接地
//A -|
// | -----|__________|----------|____________
//C -|
//
//B -|
// | ----------|__________|----------|____________
//C -|
// CW ===>>> ROTATION
//外部中断设置(ISC01=0,ISC00=1): INT0 引脚上任意的逻辑电平变化都将引发中断
#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
//external interupt on INT0
GICR=0; //禁止外部中断
if ((PIND & 0x04)==0) //先判断是高电平产生的中断还是低点平的中断
if ((PINA & 0x02)==0) //再判断B线上的电平
{
keycounter--;
keydirection=0;
}
else
{
keycounter++;
keydirection=1;
}
else
if ((PINA & 0x02)==0)
{
keycounter++;
keydirection=1;
}
else
{
keycounter--;
keydirection=0;
}
GICR=0x40;
} |
|