|
OK,謝謝你的提醒
這是我的代碼,我刪除了原來(lái)的按鍵部分,只留下了串口部分,但是這部分是用AI寫(xiě)的,和我原來(lái)寫(xiě)的差不多,多了一部分東西.我對(duì)代碼修改了一部分,原本interrupt 4這里是檢測(cè)\n為結(jié)束標(biāo)志的,后面為了方便我就該為了以一個(gè)空格為結(jié)束標(biāo)志,然后發(fā)現(xiàn)沒(méi)有現(xiàn)象,我就在interrupt進(jìn)去的時(shí)候加了個(gè)燈亮,出來(lái)的時(shí)候加了個(gè)燈滅,發(fā)現(xiàn)會(huì)正常熄滅。然后我就在但是就是在主函數(shù)中if(UART_RX_Complete)加了個(gè)LCD顯示,這里就不會(huì)顯示,我不知道為什么。希望大佬們能做出指正
- #include <REGX52.H>
- #include "LCD1602.h"
- #include "Delay.h"
- #include "MatrixKey.h"
- #include "UART.h"
- sbit LED=P2^0;
- unsigned char KeyNum;
- unsigned int Password=123;
- unsigned int SetWord;
- unsigned char Count;
- unsigned char state;
- unsigned char Counter;
- unsigned char i;
- unsigned char dash_pos = 0;
- unsigned int old_password = 0;
- unsigned int new_password = 0;
- unsigned char valid = 1;
- unsigned char UART_RX_Buffer[10]={0};
- unsigned char UART_RX_Count = 0;
- unsigned char UART_RX_Complete = 0;
- void main()
- {
- LED=1;
-
- LCD_Init();
- UartInit();
- LCD_ShowString(2,1,"CODE LOCK:");
- while(1)
- {
- Counter = 0;
- if(UART_RX_Complete)
- {
- LCD_Init();
- LCD_ShowString(1,1,"CODE LOCK:");
- UART_RX_Complete=0;
-
- old_password = 0;
- new_password = 0;
- valid = 1;
-
-
- for(i=0;i<10;i++)
- {
- if(UART_RX_Buffer[i]=='-')
- {
- dash_pos=i;
- break;
- }
-
- }
-
- if(dash_pos == 0|| dash_pos>9)
- {
- LCD_ShowString(1,1,"FORMAT ERROR!");
- goto CLEAR_BUFFER;
- }
-
-
- for(i=0;i< dash_pos;i++)
- {
- if(UART_RX_Buffer[i]<'0' ||UART_RX_Buffer[i] > '9')
- {
- valid = 0;
- break;
- }
- old_password = old_password*10 + (UART_RX_Buffer[i] - '0');
-
- }
-
- if(valid)
- {
- for(dash_pos+1;i<10;i++)
- {
- if(UART_RX_Buffer[i] == '\0')break;
- if(UART_RX_Buffer[i]<'0' ||UART_RX_Buffer[i] > '9')
- {
- valid = 0;
- break;
- }
- new_password = new_password*10 + (UART_RX_Buffer[i] - '0');
- }
-
- }
-
- if(valid)
- {
- if(old_password == Password)
- {
- Password = new_password;
- LCD_ShowString(1, 1, "PASSWORD UPDATED!");
- LCD_ShowNum(2, 1, Password, 3);
- LED = 0;
- Delay(5000);
- LED = 1;
- state = 0;
- LCD_ShowString(1,1," ");
- LCD_ShowString(2,1," ");
- }
- else
- {
- LCD_ShowString(1, 1, "OLD PWD WRONG! ");
- }
- }
-
-
- else
- {
- LCD_ShowString(1, 1, "INVALID CHARACTER!");
- }
-
- CLEAR_BUFFER:
- for(i=0;i<10;i++)
- {
- UART_RX_Buffer[i] = 0;
- }
- UART_RX_Count = 0;
- }
- /*************************************¼üÅÌÃÜÂëÊäÈ벿·Ö**************************/
- }
- }
- /*************************************´®¿ÚÖжϺ¯ÊýÄ£°å**************************/
- void UART_Routnine() interrupt 4
- {
- if(RI==1)//ÅжÏÊǽÓÊÕÖжÏ
- {
- LED = 0;
- if(UART_RX_Count < 9)
- {
- UART_RX_Buffer[UART_RX_Count] = SBUF;
- UART_RX_Count++;
- if(SBUF == ' ')
- {
- UART_RX_Buffer[UART_RX_Count] = '\0';
- UART_RX_Complete = 1;
- UART_RX_Count = 0;
- }
- }
- RI = 0;
- LED = 1;
- }
- if(TI==1)
- {
- TI=0;
- }
-
- }
復(fù)制代碼
|
|