這兩天在自己調程序,發現程序不按照預期的去執行,在判斷后會跳到未執行的子函數中,不明白是什么情況。
貼出有關的代碼:
- void main()
- {
- lcd_init();
- Uart_Init();
- Key_Init();
- clear_();
- delay(100);
- while(1)
- {
- cod_ = key_scan();//判斷以及編碼
- num_ = encode(cod_);//解碼程序。得出數字
- if(num_!=16)
- {
- if(num_==3)
- {
- key();
- }
- if(num_==7)
- {
- iccade();
- }
- if(num_==11)
- {
- AS_608();
- }
- }
- }
-
- }
- 這是主函數。num==3,正常跳到指定函數,num==7會跳到非指定函數,按照正常來說會進入iccade()函數,但是會進到FPM10A_Add_Fingerprint()函數中。
- void iccade()
- {
- unsigned char status,i,j=0;
- unsigned char m=0,a,b,c;
- InitializeSystem( ); //中斷初始化
- lcd_init();//lcd初始化
- PcdReset();//尋卡
- PcdAntennaOff();//關天線
- PcdAntennaOn();//開天線
- display();//顯示初始化
- while ( 1 )
- {
- status = PcdRequest(0x52, g_ucTempbuf);//尋卡
- if (status != MI_OK)
- {
- InitializeSystem( );
- PcdReset();
- PcdAntennaOff();
- PcdAntennaOn();
- continue;
- }
- status = PcdAnticoll(g_ucTempbuf);//防沖撞
- if (status != MI_OK)
- { continue; }
- lcd_wcmd(0x01);
- delay(10);
- lcd_pos(0,0);
- for(i=0;i<4;i++)
- {
- a=g_ucTempbuf[i];
- b=a/16;
- c=a%16;
- data6[i*2]=table[b];
- delay(10);
- data6[i*2+1]=table[c];
- }
- for(i=0;i<8;i++)
- {
- if(ICpw[i]==data6[i])
- {
- if(i==7)
- {
- same();
- delay(1000);
- lcd_wcmd(0x01);
- display();
- break;
- }
- continue;
- }
- else
- diff_();
- delay(500);
- lcd_wcmd(0x01);
- display();
- break;
- }
- }
- }
- void FPM10A_Add_Fingerprint()
- {
- unsigned char id_show[]={0,0,0};
- lcd_wcmd(0x01); //清屏
- finger_id=0;
- while(1)
- {
- LCD1602_Display(0x80," Add finger ",0,16);
- LCD1602_Display(0xc0," ID is ",0,16);
- //按返回鍵直接回到主菜單
- if(KEY_CANCEL == 0)
- {
- while(KEY_CANCEL==0);
- break;
- }
- 當num==11時,執行woshou()函數時,顯示完"Loading"后又會跳到FPM10A_Add_Fingerprint()函數,按下返回鍵才會回到woshou()函數繼續執行。
- void AS_608()
- {
- lcd_wcmd(0x01);
- LCD1602_Display(0x80,"Fingerprint Test",0,16);
- delay(500);
- WoShou();
- delay(1000);
- while(1)
- {
- void WoShou()//握手指令
- {
- char i;
- LCD1602_Display(0xc0,"Loading",0,7); //設備加載中界面
- for(i=0;i<8;i++) //進度條式更新,看起來美觀
- {
- lcd_wdat(42); //42對應ASIC碼的 *
- delay(200); //控制進度條速度
- }
-
- FPM10A_Cmd_Check();
- FPM10A_Receive_Data(12);
- if(FPM10A_RECEICE_BUFFER[9]==0);
- LCD1602_Display(0xc0,"Docking success",0,16);
- delay(100);
-
-
- }
復制代碼
貼出有關函數的代碼 ,求各位大佬告知是什么情況。
|