找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 345|回复: 3
收起左侧

51单片机 串口修改LCD密码锁密码

[复制链接]
ID:1152144 发表于 2025-5-29 17:18 | 显示全部楼层 |阅读模式
我是51单片机小白,做一个LCD密码锁的项目遇到了困难。在题目要求的串口修改密码锁密码这个功能上,我一直找不到错误,有没有大佬能帮帮我QAQ。题目要求是密码锁初始密码为123,用电脑通过串口发送“123-789”将密码从123修改为789,我不知道哪里写错了,请求大佬们帮忙,谢谢大佬们了

串口改变LCD密码锁的密码.zip

59.92 KB, 下载次数: 0

回复

使用道具 举报

ID:1121801 发表于 2025-5-30 08:37 | 显示全部楼层
一般都不会下载附件,你最好把代码直接贴上来.
估计一下,应该是对字符"-"的判断有问题.或者是你程序中的字符'-'与你输入的字符"-"不匹配.
回复

使用道具 举报

ID:1152144 发表于 2025-5-30 15:00 | 显示全部楼层
cyi8 发表于 2025-5-30 08:37
一般都不会下载附件,你最好把代码直接贴上来.
估计一下,应该是对字符"-"的判断有问题.或者是你程序中的字 ...

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

  6. sbit LED=P2^0;

  7. unsigned char KeyNum;
  8. unsigned int Password=123;
  9. unsigned int SetWord;
  10. unsigned char Count;
  11. unsigned char state;
  12. unsigned char Counter;

  13. unsigned char i;
  14. unsigned char dash_pos = 0;
  15. unsigned int old_password = 0;
  16. unsigned int new_password = 0;
  17. unsigned char valid = 1;

  18. unsigned char UART_RX_Buffer[10]={0};
  19. unsigned char UART_RX_Count = 0;
  20. unsigned char UART_RX_Complete = 0;

  21. void main()
  22. {
  23.         LED=1;
  24.         
  25.         LCD_Init();
  26.         UartInit();
  27.                 LCD_ShowString(2,1,"CODE LOCK:");
  28.         while(1)
  29.         {
  30.                 Counter = 0;
  31.                 if(UART_RX_Complete)
  32.                 {
  33.                                 LCD_Init();
  34.                         LCD_ShowString(1,1,"CODE LOCK:");
  35.                         UART_RX_Complete=0;
  36.                         
  37.                         old_password = 0;
  38.                         new_password = 0;
  39.                         valid = 1;
  40.                
  41.                
  42.                         for(i=0;i<10;i++)
  43.                         {
  44.                                 if(UART_RX_Buffer[i]=='-')
  45.                                 {
  46.                                         dash_pos=i;
  47.                                         break;
  48.                                 }
  49.                                 
  50.                         }
  51.                         
  52.                         if(dash_pos == 0|| dash_pos>9)
  53.                         {
  54.                                 LCD_ShowString(1,1,"FORMAT ERROR!");
  55.                                 goto CLEAR_BUFFER;
  56.                         }
  57.                         

  58.                         
  59.                         for(i=0;i< dash_pos;i++)
  60.                         {
  61.                                 if(UART_RX_Buffer[i]<'0' ||UART_RX_Buffer[i] > '9')
  62.                                 {
  63.                                         valid = 0;
  64.                                         break;
  65.                                 }
  66.                                 old_password = old_password*10 + (UART_RX_Buffer[i] - '0');
  67.                                 
  68.                         }
  69.                         
  70.                         if(valid)
  71.                         {
  72.                                 for(dash_pos+1;i<10;i++)
  73.                                 {
  74.                                         if(UART_RX_Buffer[i] == '\0')break;
  75.                                                 if(UART_RX_Buffer[i]<'0' ||UART_RX_Buffer[i] > '9')
  76.                                         {
  77.                                                 valid = 0;
  78.                                                 break;
  79.                                         }
  80.                                         new_password = new_password*10 + (UART_RX_Buffer[i] - '0');
  81.                                 }
  82.                                 
  83.                         }
  84.                         
  85.                         if(valid)
  86.                         {
  87.                                         if(old_password == Password)
  88.                                         {
  89.                                                 Password = new_password;
  90.                                                 LCD_ShowString(1, 1, "PASSWORD UPDATED!");
  91.                                                 LCD_ShowNum(2, 1, Password, 3);
  92.                                                 LED = 0;
  93.                                                 Delay(5000);
  94.                                                 LED = 1;
  95.                                                 state = 0;
  96.                                                 LCD_ShowString(1,1,"                ");
  97.                                                 LCD_ShowString(2,1,"                ");
  98.                                         }
  99.                                         else
  100.                                         {
  101.                                                         LCD_ShowString(1, 1, "OLD PWD WRONG!   ");
  102.                                         }
  103.                         }
  104.                         
  105.                
  106.                         else
  107.                                 {
  108.                                                 LCD_ShowString(1, 1, "INVALID CHARACTER!");
  109.                                 }
  110.                                 
  111.         CLEAR_BUFFER:
  112.                                 for(i=0;i<10;i++)
  113.                                 {
  114.                                         UART_RX_Buffer[i] = 0;
  115.                                 }
  116.                                 UART_RX_Count = 0;
  117.                         }
  118.         /*************************************¼üÅÌÃÜÂëÊäÈ벿·Ö**************************/        


  119.         }
  120. }
  121. /*************************************´®¿ÚÖжϺ¯ÊýÄ£°å**************************/
  122.         void UART_Routnine() interrupt 4
  123.         {
  124.                 if(RI==1)//ÅжÏÊǽÓÊÕÖжÏ
  125.                 {
  126.                         LED = 0;
  127.                         if(UART_RX_Count < 9)
  128.                         {
  129.                                 UART_RX_Buffer[UART_RX_Count] = SBUF;
  130.                                 UART_RX_Count++;
  131.                                 if(SBUF == ' ')
  132.                                 {
  133.                                         UART_RX_Buffer[UART_RX_Count] = '\0';
  134.                                         UART_RX_Complete = 1;
  135.                                         UART_RX_Count = 0;
  136.                                 }
  137.                         }
  138.                         RI = 0;

  139.                         LED = 1;
  140.                 }
  141.                 if(TI==1)
  142.                 {
  143.                         TI=0;
  144.                 }
  145.         
  146. }
复制代码

回复

使用道具 举报

ID:584814 发表于 2025-5-31 22:35 | 显示全部楼层
同是STC15W408AS,只要引脚对上应该就没问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表