这个是原理图。帮忙看看有何问题!感觉小问题应该不少!但是不知道哪里有 计数部分的程序以前有人提供过,大概就是这个,有些不明白
#include "reg51.h"
long counter=0; //旋转编码器的脉冲计数值,左转为正,右转为负 void main() { IT0 = 1; //外部中断0为边沿触发 EX0 = 1; //使能外部中断0 EA=1; //使能中断 while(1) { // 在这里写代码实现你想做的事,比如计数值的进一步处理等等等等 } }
//****************************************************************************** // 延时函数delay(unsigned char dly) // 延时值与晶体频率有关,可以自己调整变量x的值以取得合适的单位延时值 //****************************************************************************** void delay(unsigned char dly) { unsigned int x; while(dly--) { x = 1000; while(x--); } }
//****************************************************************************** // 外部中断0的中断处理函数void ISR0() // 注意:旋转编码器的A接P3.2,B接P1.7(跟你图上一样不变) //****************************************************************************** void ISR0() interrupt 0 { if((P1&0x80) == 0x80) { delay(10); //消抖动,延时一会,确认P1.7仍然为高,如果频率比较高,延时要缩短 if((P1&0x80) == 0x80) counter++; } else { delay(10); //消抖动,延时一会,确认P1.7仍然为低,如果频率比较高,延时要缩短 if((P1&0x80) == 0x00) counter--; } }
有些不明白的,B接1.7和计数有何关系? 延迟X如何取值? 如果按照我接线的方式,如何修改程序? 显示程序如何做?
谢谢了,我知道我问的问题幼稚,还请解答下。。谢谢了 |