OK,谢谢你的提醒
这是我的代码,我删除了原来的按键部分,只留下了串口部分,但是这部分是用AI写的,和我原来写的差不多,多了一部分东西.我对代码修改了一部分,原本interrupt 4这里是检测\n为结束标志的,后面为了方便我就该为了以一个空格为结束标志,然后发现没有现象,我就在interrupt进去的时候加了个灯亮,出来的时候加了个灯灭,发现会正常熄灭。然后我就在但是就是在主函数中if(UART_RX_Complete)加了个LCD显示,这里就不会显示,我不知道为什么。希望大佬们能做出指正
- #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;
- }
-
- }
复制代码
|