打印
[AVR单片机]

上了一个选择编码开关,照抄了一段代码,结果出大事鸟,求解

[复制链接]
1148|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zqdl8|  楼主 | 2015-7-21 20:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上了一个选择编码开关,照抄了一段代码,结果出大事鸟,求解
先声明楼主论坛菜鸟一枚

AVR16 中断0接了一个旋转编码器,抄的网上的代码,旋转编码开关转动的时候后反映正常,就是结果不正常,上代码先
ISR(INT0_vect)
{
         GICR =0x00;
if (Bit_Get(PIND,2)==1)
         {
                 if (Bit_Get(PIND,1)==0)
                 
                 {
                         sumx++;
                 }else
                 {
                         sumx--;
                 }
         }else
         {
                 if (Bit_Get(PIND,1)==0)
                 
                 {
                         sumx++;
                 }else
                 {
                         sumx--;
                 }
         
         }
   GIFR  |= (1 << INTF1) | (1 << INTF0);
   GICR =0xC0;//0xC0 */
}

main函数里面这样处理的
 itoa(sumx,strr,10);
           display_string_5x7(5,1,strr)

变量定义这样的
uint sumx =1;
uchar strr[25]={0};

然后奇怪的事情就来了,选择编码开关的时候数字会变,但是哪个结果啊,变化的也太大了吧,按理应该是转一下加或者减一的,结果差了十万八千里,实在搞不明白了,上坛子请教,
个人感觉是 int 转uchar不对,但是不知道该怎么处理

相关帖子

沙发
SD10A| | 2015-7-30 13:48 | 只看该作者
我 去年弄编码器的时候也是用中断  和一个普通IO 来做的,发现只能减不能加,最后才发现是硬件连接方法不对。

使用特权

评论回复
板凳
SD10A| | 2015-9-20 11:04 | 只看该作者
中断程序的使用变量要用volatile修饰


估计你是整形数据转化成字符串的时候出了问题
这样你不转换了,直接一个数据求各个位,显示的时候以display_string_5x7(5,1,个位+0x30)的方法

使用特权

评论回复
地板
airwill| | 2015-9-23 13:21 | 只看该作者
抄错了吧.
上面 是 sumx++;  else  sumx--;
那么下面应该是  sumx--;  else  sumx++;




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝