找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1303|回复: 1
收起左侧

关于单片机电子密码锁的程序有警告,新手求助

[复制链接]
ID:554408 发表于 2019-6-10 10:13 | 显示全部楼层 |阅读模式
求教以下程序有13处警告 , 新手求解,  关于电子密码锁的,警告在最后
  1. #include <reg51.h>
  2. #include <string.h>
  3. #define uchar unsigned char
  4. #define unit  unsigned int
  5. uchar Pre_KeyNo = 16, KeyNo = 16;
  6. uchar code Title_Text[] = "Your Password...";
  7. uchar DSY_BUFFER[10] = " ";
  8. uchar UserPassword[10] = " ";
  9. void LCD_Init();
  10. void Display_String(uchar * str,uchar LineNo);
  11. void IIC_24C04_Init();
  12. void Beep();
  13. uchar RecString(uchar Slave,uchar Subaddr,uchar *Buffer,uchar N);
  14. uchar SendString(uchar Slave,uchar Subaddr,uchar *Buffer,uchar N);
  15. uchar Keys_Scan();
  16. sbit LED_OPEN = P2^7;
  17. sbit BEEP = P3^7;

  18. void DelayMS(int x )
  19. {
  20. uchar  i;
  21. while (x--) for (i = 0;i<120;i++);
  22. }
  23. void Beep()
  24. {
  25. uchar  i;
  26. for (i=0;i<100;i++)
  27. {
  28. DelayMS(1);BEEP= ~BEEP;
  29. }
  30. BEEP=0;
  31. }
  32. void Clear_Password()
  33. {
  34. UserPassword[0] = '\0';
  35. DSY_BUFFER[0] = '\0';
  36. }
  37. void main()
  38. {
  39.    uchar i = 0;
  40.    uchar IIC_Password[10];
  41.    uchar IS_Valid_User = 0;
  42.    P0 = 0xFF;     
  43.    P1 = 0xFF;
  44.    P2 = 0xFF;  
  45.    TMOD = 0x02;                     //T0设置为8位自动重装模式
  46.    TH0 = 175;                  
  47.    TL0 = 175;
  48.    TR0 = 1;                         //启动T0
  49.    DelayMS(10);               
  50.    LCD_Init();                      //初始化LCD  
  51.    
  52.    IIC_24C04_Init();                //初始化24C04  
  53.    
  54.    Display_String(Title_Text,0x00); //在第1行显示标题
  55.    
  56.    //24C04的内容已由初始化BIN文件导入
  57.    //将24C04中预先写入的密码读入pass
  58.    RecString(0xa0, 0 , IIC_Password, 6);   
  59.    IIC_Password[6] = '\0';
  60.    while(1)
  61.    {
  62.       P1 = 0xF0;
  63.       if(P1 != 0xF0) KeyNo = Keys_Scan();  //扫描键盘获取键序号KeyNo

  64.       switch ( KeyNo )
  65.       {
  66.            case 0:  case 1: case 2: case 3: case 4:
  67.            case 5:  case 6: case 7: case 8: case 9:
  68.                         
  69.                    if ( i<= 5 )             //密码限制在6位以内
  70.                    {
  71.                         //如果i为0则执行一次清屏
  72.                         if (i ==0) Display_String("                ",0x40);
  73.                     
  74.                         UserPassword[i] = KeyNo + '0';
  75.                         UserPassword[i+1] = '\0';
  76.               
  77.                         DSY_BUFFER[i] = '*';
  78.                         DSY_BUFFER[i+1] = '\0';
  79.                     
  80.                         Display_String(DSY_BUFFER,0x40);
  81.                      
  82.                         i++;
  83.                     }
  84.                     break;
  85.                
  86.            case 10: //按A键开锁
  87.                     if (strcmp(UserPassword,IIC_Password) == 0)
  88.                     {
  89.                        LED_OPEN = 0;  //点亮LED
  90.                        Clear_Password();
  91.                        Display_String("Unlock OK!      ",0x40);
  92.                        IS_Valid_User = 1;
  93.                     }
  94.                     else
  95.                     {
  96.                        LED_OPEN =1;   //关闭LED
  97.                        Clear_Password();
  98.                        Display_String("ERROR !         ",0x40);
  99.                        IS_Valid_User = 0;
  100.                     }
  101.                     i = 0;
  102.                     break;
  103.                     
  104.            case 11: //按B键上锁
  105.                     LED_OPEN =1;   
  106.                     Clear_Password();
  107.                     Display_String(Title_Text,0x00);
  108.                     Display_String("                ",0x40);
  109.                     i = 0;                        
  110.                     IS_Valid_User = 0;               
  111.                     break;
  112.                                    
  113.            case 12: //按C键设置新密码
  114.                     //如果是合法用户则提示输入新密码
  115.                     if ( !IS_Valid_User ) Display_String("No rights !",0x40);
  116.                     else
  117.                     {
  118.                        i = 0;
  119.                        Display_String("New Password:   ",0x00);
  120.                        Display_String("                ",0x40);
  121.                      }
  122.            
  123.                     break;                        
  124.                     
  125.            case 13: //按D键保存新密码
  126.                     if ( !IS_Valid_User ) Display_String("No rights !",0x40);
  127.                     else
  128.                     {
  129.                        SendString(0xa0, 0 , UserPassword, 6);
  130.                        
  131.                        //重新读入刚写的密码
  132.                        RecString(0xa0, 0 , IIC_Password, 6);   
  133.                        IIC_Password[6] = '\0';                           
  134.                        
  135.                        i = 0;
  136.                        Display_String(Title_Text,0x00);
  137.                        Display_String("Password Saved! ",0x40);
  138.                      }               
  139.                     
  140.                     break;                        
  141.       
  142.            case 14: //按E键消除所有输入
  143.                     i = 0;
  144.                     Clear_Password();
  145.                     Display_String("                ",0x40);            
  146.        }

  147.        Beep();         
  148.        DelayMS(100);
  149.        P1= 0xF0;
  150.        while (P1 != 0xF0);    //如果有键未释放则等待
  151.        while (P1 == 0xF0);    //如果没有再次按下按键则等待
  152.    }
  153. }
复制代码

  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define unit  unsigned int
  5. #define Delay4us(); {_nop_();_nop_(); _nop_();_nop_();}
  6. sbit SCL = P3^2;
  7. sbit SDA = P3^3;
  8. void Start()
  9. {
  10. SDA = 1;SCL = 1;Delay4us();SDA = 0;Delay4us();SCL = 0;
  11. }
  12. void Stop()
  13. {
  14. SDA =0;SCL =1;Delay4us();SDA = 1;Delay4us();SCL=0;
  15. }
  16. void IIC_24C04_Init()
  17. {
  18. SCL = 0; Stop();
  19. }
  20. void ACK()
  21. {
  22. SDA =0;SCL =1;Delay4us();SCL = 0;SDA=1;
  23. }
  24. void No_ACK()
  25. {
  26. SDA =1;SCL =1;Delay4us();SCL = 0;SDA=0;
  27. }
  28. uchar RecByte()
  29. {
  30. uchar i,rd;
  31. rd = 0x00;
  32. SDA = 1;
  33. for(i=0;i<8;i++)
  34. {
  35. SCL =1 ;rd<<=1; rd |=SDA;Delay4us();SCL = 0;Delay4us();
  36. }
  37. SCL=0;
  38. Delay4us();
  39. return rd;
  40. }
  41. uchar SendByte(uchar wd)
  42. {
  43. uchar  i;
  44. bit  ack0;
  45. for(i=0;i<8;i++)
  46. {
  47. SDA=(bit)(wd & 0x80);
  48. _nop_();_nop_();SCL = 1;Delay4us();SCL = 0;wd<<=1;
  49. }
  50. Delay4us();
  51. SDA = 1;
  52. SCL = 1;
  53. Delay4us();
  54. ack0 = !SDA;
  55. SCL = 0;
  56. Delay4us();
  57. return ack0;
  58. }
  59. uchar SendString(uchar Slave,uchar Subaddr,uchar *Buffer,uchar N)
  60. {
  61. uchar i;
  62. Start();
  63. if(!SendByte(Slave))  return 0;
  64. if(!SendByte(Subaddr))  return 0;
  65. for(i=0;i<N;i++)
  66. {
  67. if (!SendByte(Buffer[i])) return 0;
  68. }
  69. Stop();
  70. return 1;
  71. }
  72. uchar RecString(uchar Slave,uchar Subaddr,uchar *Buffer,uchar N)
  73. {
  74. uchar i;
  75. Start();
  76. if(!SendByte(Slave))  return 0;
  77. if(!SendByte(Subaddr))  return 0;
  78. Start();
  79. if(!SendByte(Slave+1))  return 0;
  80. for(i=0;i<N-1;i++)
  81. {
  82. Buffer[i] = RecByte();
  83. ACK();
  84. }
  85. Buffer[N-1] = RecByte();
  86. No_ACK();
  87. Stop();
  88. return 1;
  89. }
  90. #include <reg51.h>
  91. #define uchar unsigned char
  92. #define unit  unsigned int
  93. void DelayMs(unit x);
  94. uchar Keys_Scan()
  95. {
  96. uchar Tmp,KeyNo = 0;
  97. P1=0x0F;
  98. DelayMs(1);
  99. Tmp = P1 ^ 0x0F;
  100. switch (Tmp)
  101. {
  102. case 1: KeyNo = 0;break;
  103. case 2: KeyNo = 1;break;
  104. case 4: KeyNo = 2;break;
  105. case 8: KeyNo = 3;break;
  106. default:  KeyNo = 16;
  107. }
  108. P1 = 0X0F;
  109. DelayMs(1);
  110. Tmp = P1 >> 4 ^ 0x0F;
  111. switch (Tmp)
  112. {
  113. case 1: KeyNo += 0; break;
  114. case 2: KeyNo += 4; break;
  115. case 4: KeyNo += 8; break;
  116. case 8: KeyNo += 12;
  117. }
  118. return KeyNo;
  119. }
复制代码

警告


WDR19YWP33X%)U5T$AE6F4X.png
回复

使用道具 举报

ID:332444 发表于 2019-6-10 10:40 | 显示全部楼层
什么意思?三个文件每个文件单独检查告警进行处理即可.
把告警的函数全部注释掉试看
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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