📄 coder.c
字号:
#include "coder.h"
volatile uint16 step;//在中断函数里要修改全局变量的值得加volatitle限定<www.ouravr.com中注明>,但是不加volatile好像是没有影响
volatile long ring;
uint32 data_disp;
/********************************************************************************
函数功能:由编码器输出做为外部中断0的触发源
函数名称:SIGNAL(SIG_INTERRUPT0)
出口参数:无
入口参数:无
备 注:无
********************************************************************************/
SIGNAL(SIG_INTERRUPT0)
{
if((PINC&(1<<0)) == 1)//顺时针时增加
{
step++;
if(step>=1000)
{
ring++;
step = 0;
}
if(ring>=32766)
ring = 0;
}
if((PINC&(1<<0)) == 0)//逆时针时减小
{
step--;
if(step>65534)
{
ring--;
step = 1000;
}
if(ring <0)
{
ring = 0;
step = 0;
}
}
}
int main(void)
{
DDRB = (1<<0)|(1<<1);//驱动ZLG7290用
PORTB = 0x00;
DDRC &= ~(1<<0);//PC0引脚,
MCUCR=(1<<ISC01)|(0<<ISC00);//设定中断触发方式为下降沿触发
GIFR=(1<<INTF0);//清中断标志,以免误触发中断
GICR=(1<<INT0);//外部中断0允许位
sei();//使能全局中断
while(1)
{
data_disp = (ring*1000+step);
Disp_i2c_led(data_disp);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -