欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: avr單片機(jī)矩陣鍵盤程序問題 [打印本頁]

作者: zhuangtp    時間: 2020-2-9 19:02
標(biāo)題: avr單片機(jī)矩陣鍵盤程序問題
碰到一個問題,我用變量temp1表達(dá)PINA的值,帶入switch中,程序運(yùn)行不起來,但是直接把PINA帶入switch中卻可以正常運(yùn)行,請教下這個是什么原因造成的啊,我用的ATMEL16,

單片機(jī)源程序如下:
#include<avr/io.h>
#include<util/delay.h>
void scan()
{
unsigned int temp=0,temp1=0;
PORTA=0XF0;
DDRA=0X0F;
temp=PINA&0xf0;
if(temp==0xe0)
   {
    PORTA=0X0F;
DDRA=0XF0;
    temp1=PINA&0x0f;
_delay_ms(10);
      switch(temp1)
  {
  case 0x0e:PORTB&=~(1<<0);break;
  case 0x0d:PORTB&=~(1<<1);break;
  case 0x0b:PORTB&=~(1<<2);break;
  case 0x07:PORTB&=~(1<<3);break;   
        }  
  while(PINA==0x0E);
  while(PINA==0x0D);
  while(PINA==0x0B);
  while(PINA==0x07);
  PORTB=0XFF;  
  }
if(temp==0xd0)
   {
   PORTA=0X0F;
DDRA=0XF0;
    temp1=PINA;
_delay_ms(10);
      switch(PINA)
  {
  case 0x0e:PORTB&=~(1<<4);break;
  case 0x0d:PORTB&=~(1<<5);break;
  case 0x0b:PORTB&=~(1<<6);break;
  case 0x07:PORTB&=~(1<<7);break;   
        }
    while(PINA==0x0E);
  while(PINA==0x0D);
  while(PINA==0x0B);
  while(PINA==0x07);
  PORTB=0XFF;
   
   }
}
int main()
{
PORTB=0XFF;
DDRB=0XFF;
while(1)
{
scan();
}
}

作者: 左眼    時間: 2020-2-10 10:03
問題似乎出在你寫了temp1=PINA&0x0f;temp1=PINA;這樣寫似乎有問題。如果你真想用temp代替PINA可以在#include<util/delay.h>的下面寫一句加#define temp1 PINA(不要帶;) ,這樣temp1就是PINA了.switch(temp1&0x0f)  switch(temp1),就行了不要在一個函數(shù)內(nèi)用一個變量代替兩個,在程序中一律用temp1代替PINA。能明白我的意思嗎?
作者: zhengdian1    時間: 2020-2-10 11:47
那就把PINA帶入switch.
作者: zhuangtp    時間: 2020-2-10 16:06
左眼 發(fā)表于 2020-2-10 10:03
問題似乎出在你寫了temp1=PINA&0x0f;temp1=PINA;這樣寫似乎有問題。如果你真想用temp代替PINA可以在#includ ...

void scan()
{
unsigned int temp=0;

PORTA=0XF0;
DDRA=0X0F;
temp=PINA&0xf0;
if(temp==0xe0)
   {
    PORTA=0X0F;
        DDRA=0XF0;
    temp=PINA&0x0f;
        _delay_ms(10);
             switch(temp)
                {
                case 0x0e:PORTB&=~(1<<0);break;
                case 0x0d:PORTB&=~(1<<1);break;
                case 0x0b:PORTB&=~(1<<2);break;
                case 0x07:PORTB&=~(1<<3);break;          
        }  

                while(temp==0x0E);
                while(temp==0x0D);
                while(temp==0x0B);
                while(temp==0x07);
                PORTB=0XFF;  
  }

這個是修改后的代碼,依然沒有用,奇怪的是第一層if使用temp完全沒問題,到了switch就是執(zhí)行不了,不知道什么問題
作者: zhuangtp    時間: 2020-2-10 16:06
zhengdian1 發(fā)表于 2020-2-10 11:47
那就把PINA帶入switch.

可是沒弄明白為什么帶入一個變量就不行啊,原因沒找到
作者: zhuangtp    時間: 2020-2-10 16:43
左眼 發(fā)表于 2020-2-10 10:03
問題似乎出在你寫了temp1=PINA&0x0f;temp1=PINA;這樣寫似乎有問題。如果你真想用temp代替PINA可以在#includ ...

試過了也沒用,奇怪的是第一層的if可以順利判斷temp的值,但是到了第二層的switch,就是執(zhí)行不了,不知道為什么
作者: Oliveryi    時間: 2020-2-11 00:42
類型錯了

試試
switch((unsigned char)temp)





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1