南非海鸥. 2022-03-13 00:55
浏览 15
已结题

C语言goto跳转后变量PassKey归零

51单片机矩阵键盘
goto用于编辑完PassKey后跳出if返回到开头
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"                                            //按键检测
//#define Passkey 1234

unsigned char KeyNum;
unsigned int Count=0,PassWord,PassKey;

void main()
{
    LCD_Init();     //1602初始化
    PassKey=1234;
    LCD_ShowString(1,1,"PassWord:       ");
    LCD_ShowNum(2,1,PassWord,4);
        while(1)
        {
            loop:    
            KeyNum=MatrixKey();
            if(KeyNum)                                                   //检测按键按下
            {
                if(KeyNum<=10)                                            //输入范围S1——S10
                {
                    if(Count<4)                                              //限定输入4位数  9999<65536<99999
                    {
                    PassWord*=10;                                                //左移一位
                    PassWord+=KeyNum%10;                                //累加,其中S10=0
                    Count++;
                    }
                    LCD_ShowNum(2,1,PassWord,4);                //更新显示
                }
                if(KeyNum==11)                                                 //如果S11按下,确认位
                {
                    if(PassWord==PassKey)                                    //如果正确
                    {
                        LCD_ShowString(1,13,"GOOD");
                        PassWord=0;
                        Count=0;                                           //密码和计次清零
                        LCD_ShowNum(2,1,PassWord,4);            //更新显示
                    }
                    else                                                 //如果密码错误
                    {
                        LCD_ShowString(1,13,"ERR ");
                        PassWord=0;
                        Count=0; 
                        LCD_ShowNum(2,1,PassWord,4);          //更新显示
                    }
                }
                if(KeyNum==12)                                                //删除刚输入的一位,取消位
                {
                    PassWord/=10; 
                    Count--;
                    LCD_ShowNum(2,1,PassWord,4);            //更新显示
                }    
                
                /*更改密码*/
                if(KeyNum==13)
                {
                    //while(1)
                    //{
                        PassKey=0;
                        Count=0;
                        LCD_ShowString(1,1,"PassKey:           ");
                        if(KeyNum<=10)
                        {
                            if(Count<4)
                            {
                                PassKey*=10;
                                PassKey+=KeyNum%10;
                                Count++;
                                LCD_ShowNum(2,1,PassKey,4);
                            }                    
                        }
                        if(KeyNum==12)
                        {
                            PassKey/=10;
                            Count--;
                            LCD_ShowNum(2,1,PassKey,4);
                        }
                    //}
                }
                if(KeyNum==14)
                {
                    Count=0;
                    PassWord=0;
                    LCD_ShowString(1,1,"PassWord:       ");
                    LCD_ShowNum(2,1,PassWord,4);
                    goto loop;
                }
            }
        }        
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 3月21日
    • 创建了问题 3月13日

    悬赏问题

    • ¥15 孟德尔随机化怎样画共定位分析图
    • ¥18 模拟电路问题解答有偿
    • ¥15 Matlab在app上输入带有矩阵形式的初始条件发生错误
    • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
    • ¥15 误删注册表文件致win10无法开启
    • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
    • ¥60 ESP32怎么烧录自启动程序
    • ¥50 html2canvas超出滚动条不显示
    • ¥15 java业务性能问题求解(sql,业务设计相关)
    • ¥15 52810 尾椎c三个a 写蓝牙地址