关于#流程图#注释#的问题,如何解决?(语言-c语言)

求下面这段代码的注释和流程图,尽可能的详细一些,实在是有些看不懂啊~(„ಡωಡ„)栓Q


#include <REG52.H>
#include <string.h> 
#include "lcd1602.h"
#include "delay.h"
#include "key_m.h"
#include "password.h"
#include "buzzer.h"
#include "RC522.h"
#include "eeprom.h"
#include "stepMoto.h"

#define PW_MODE_INPUT   1//ÊäÈëÃÜÂë¿ªËøÄ£Ê½
#define PW_MODE_REGIST    2//×¢²áÐÂÃÜÂëģʽ
#define IC_REGIST       3//IC×¢²á
#define IC_DELETE       4//ICɾ³ý

unsigned char IC_SN[3][4]={0};//´æ·ÅÓû§µÄIC¿¨ÐòÁкÅ


u8 openDoor=0;
u8 saveEEPROM=0;

void Dis_ICcode(u8* _IC);
u8 Search_IC(u8 *_IC);
void Save_IC(u8 _ID,u8 *_IC);
u8 Find_hole_InLib(void);
void Delelt_ID_inLib(u8 _ID);
unsigned char USRT_key;
void main(void)//Ö÷º¯ÊýÈë¿Ú
{
    u8 mode;
    u8 key;
    u8 i;
    u8 sta;
    u8 err=0;
    delay_Init();
    LCD_Init();
    PW_Init(); //¸´Î»³õʼÃÜÂë
    Beep(200);

Start:
    mode = PW_MODE_INPUT;
    LCD_Clear();
    LCD_GotoXY(0x00,0);
        LCD_Print("RFID PWord. Lock");
    LCD_GotoXY(0x00,1);
    LCD_Print("----------------");
    Motor1_Stop();
    while(1)//Ö÷Ñ­»·
    {
        delay_ms(1);
        key = KeyScan(0);
        if(key==0)
        {
            key = USRT_key;
            USRT_key = 0;
        }
        if(key)
        {
            Beep(200);
            if(key=='*')
            {
                mode = IC_REGIST;//IC¿¨×¢²á
                LCD_GotoXY(0x00,0);
                LCD_Print(" Regist IC code ");                        
            }
            else if(key=='#')
            {
                mode = IC_DELETE;//ICɾ³ý
                LCD_GotoXY(0x00,0);
                LCD_Print(" delete IC code ");                        
                
            }
            else if(mode==PW_MODE_INPUT)//ÊäÈëÃÜÂëģʽ
            {
                 switch (InputPassword(key))
                 {
                     case 0xFF://ÌØÈ¨ÃÜÂëÕýÈ·
                        err = 0;
                        mode=PW_MODE_REGIST;//½øÈë¼Èëģʽ
                        LCD_GotoXY(0x00,0);
                        LCD_Print(" Enter a new PW.");
                        LCD_GotoXY(0x00,1);
                        LCD_Print("----------------");
                        break;
                    case 0x0F://Óû§ÃÜÂë
                        openDoor=1;
                        err = 0;
                                               break;
                    case 0xEE://ÃÜÂë´íÎó                        
                        LCD_GotoXY(0x0,1);
                        LCD_Print(" PassWord error ");                        
                        Beep(200);Beep(200);Beep(200);
                        delay_ms(500);
                        err++;
                        goto Start;

                        break;
                    default:
                        break;
                }

            }
            else if(mode==PW_MODE_REGIST)//¼ÈëÃÜÂëģʽ
            {
                sta=SetPassword(key);
                LCD_GotoXY(0x00,0);
                if(sta)
                {
                    if(sta==0xF1)LCD_Print("Set PW.->[24C02]");
                    if(sta==0xF2)LCD_Print("Set PW.->[Flash]"); 
                    if((sta>>4)==0x0E)LCD_Print("*Set PW. Error* ");
                    Beep(200);
                    Beep(200);                
                    delay_ms(400);
                    mode = PW_MODE_INPUT;//»Øµ½ÊäÈëģʽ                   
                    goto Start;
                }                
            }
        }
        else if((mode==PW_MODE_INPUT)||(mode==IC_REGIST)||(mode==IC_DELETE))
        {        
            if(ReadICcode(buf)==0)
            {
                Dis_ICcode(buf);
                Beep(200);
                delay_ms(400);
                sta=Search_IC(buf);             
                if(mode==PW_MODE_INPUT)
                {          
                    if(sta==0xEE)//ÐÂIC¿¨
                    {
err++;
                        openDoor = 0;
                        LCD_GotoXY(0x0,1);
                        LCD_Print(" IC code error  ");
                        Beep(100);Beep(100);Beep(100);                    
                        delay_ms(1500);
                        goto Start;   
                    }
                    else
                    {
                         openDoor = 1;
                         err = 0;
                    }
                }
                if(mode==IC_REGIST)
                {
                    if(sta==0xEE)//ÐÂIC¿¨
                    {
                        sta = Find_hole_InLib();//ÔÚÊý¾Ý¿âÖÐÕÒµ½Ò»¸ö¿ÕλÖÃ
                        if(sta!=0xEE)
                        {
                            Save_IC(sta,buf); //´æÔÚÕâ¸ö¿ÕλÖÃÉÏ
                            saveEEPROM=1;
                            LCD_GotoXY(0x0,1);
                            LCD_Print("Add IC Code OK  ");                    
                            Beep(500);      
                        }
                        else
                        {
                            LCD_GotoXY(0x0,1);
                            LCD_Print("Library Is Full ");
                            Beep(200);Beep(200);Beep(200);                   
                        }
                    }
                    else
                    {
                        LCD_GotoXY(0x0,1);
                        LCD_Print("IC Already Store");
                        Beep(200);Beep(200);Beep(200);                    
                    }
                    delay_ms(500);
                    goto Start;
                }
                if(mode==IC_DELETE)
 {
                    if(sta==0xEE)//ÐÂIC¿¨
                    {                    
                        LCD_GotoXY(0x0,1);
                        LCD_Print("Delete Code ERR");                    
                        Beep(200);Beep(200);Beep(200);
                    }
                    else
                    {
                        sta=Search_IC(buf);
                        Delelt_ID_inLib(sta);
                        saveEEPROM=1;
                        LCD_GotoXY(0x0,1);
                        LCD_Print("Delete Code OK ");
                        Beep(500);
                        delay_ms(400);                    
                    }
                    delay_ms(500);
                    goto Start;        
                }
            } 
        }
        if(openDoor)
        {
            openDoor=0;
            LCD_GotoXY(0x0,1);
            LCD_Print("Opening the door");
            //Relay=0;
            buzzer = 0;
            Motor1_Go_F(DEG180);
            buzzer = 1;
            //Beep(2000);
            LCD_GotoXY(0x0,1);
            LCD_Print("  Door Is Open  ");            
            delay_ms(1000);
            delay_ms(1000);
            
            //Relay=1;
            LCD_GotoXY(0x0,1);
            LCD_Print("Closing the door");            
            buzzer = 0;
            Motor1_Go_B(DEG180);
            buzzer = 1;
            LCD_GotoXY(0x0,1);
LCD_Print("----------------");            
        }
        else
            Motor1_Stop();
        if(err>=3)
        {
            LCD_GotoXY(0x0,1);
            LCD_Print("***Input Lock***");        
            while(1)
            {
                delay_ms(150);
                buzzer = 0;
                delay_ms(150);
                buzzer = 1;                
            }
        }
        if(saveEEPROM)
        {
            saveEEPROM = 0;
            for(i=0;i<8;i++) 
                buf[i] = code_PW[i];
            for(i=0;i<12;i++)    
                buf[8+i]=IC_SN[i/4][i%4]; 
            EEPROM_WRITE(buf,20);        
        }
        
    }
}
void LCD1602_Hex(u8 _hex)
{
    u8 temp = _hex>>4;
    if(temp>9)LCD_WrDat(temp-10+'A');
    else LCD_WrNUM(temp);
    
    temp = _hex&0x0F;
    if(temp>9)LCD_WrDat(temp-10+'A');
    else LCD_WrNUM(temp);   
}
void Dis_ICcode(u8* _IC)//ÏÔʾ16½øÖÆIC¿¨ºÅ
{
    //"0123456789abcdef"
    //"IC:78 FB A8 01  "
    LCD_GotoXY(0x0,1);
    LCD_Print("IC:             ");
        LCD_GotoXY(0x3,1);
    LCD1602_Hex(_IC[0]);
    LCD_GotoXY(0x6,1);
    LCD1602_Hex(_IC[1]);
    LCD_GotoXY(0x9,1);
    LCD1602_Hex(_IC[2]);
    LCD_GotoXY(0xC,1);
    LCD1602_Hex(_IC[3]);
}
u8 Search_IC(u8 *_IC)//ËÑË÷IC¿¨£¬·µ»ØIDºÅ
{
    u8 i;
    for(i=0;i<3;i++)
    {
        if((_IC[0]==IC_SN[i][0])
         &&(_IC[1]==IC_SN[i][1])
         &&(_IC[2]==IC_SN[i][2])
         &&(_IC[3]==IC_SN[i][3]))
         {
              return i;
         }
    }
    return 0xEE;
}
void Save_IC(u8 _ID,u8 *_IC)
{
    u8 i;
    for(i=0;i<4;i++)
    {
        IC_SN[_ID][i] = _IC[i];
    }
}

u8 Find_hole_InLib(void)//ËÑË÷¿ÕÏÐλÖÃ
{
    u8 IC_hole[4]={0};
    return Search_IC(IC_hole);
}
void Delelt_ID_inLib(u8 _ID)//ɾ³ýIDλÖõĿ¨ºÅ
{
    u8 IC_hole[4]={0};
    Save_IC(_ID,IC_hole) ;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7805608
  • 这篇博客也不错, 你可以看下C语言实现十进制转十六进制--为单片机编写(数据转换,并非单纯显示)
  • 除此之外, 这篇博客: C语言中:一些杂散但值得讨论的问题中的 六、运算中的临时匿名变量 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    1、C语言和汇编的区别(汇编完全对应机器操作,C对应逻辑操作)
    (1)C语言叫高级语言,汇编语言叫低级语言。

    (2)低级语言的意思是汇编语言和机器操作相对应,汇编语言只是CPU的机器码的助记符,用汇编语言写程序必须拥有机器的思维。因为不同的CPU设计时指令集差异很大,因此用汇编编程的差异很大。

    (3)高级语言(C语言)它对低级语言进行了封装(C语言的编译器来完成),给程序员提供了一个靠近人类思维的一些语法特征,人类不用过于考虑机器原理,而可以按照自己的逻辑原理来编程。譬如数组、结构体、指针····

    (4)更高级的语言如java、C#等只是进一步强化了C语言提供的人性化的操作语法,在易用性上、安全性上进行了提升。

    2、C语言的一些“小动作”
    (1)高级语言中有一些元素(如运算符等)是机器中没有的

    (2)高级语言在运算中允许我们大跨度的运算。意思就是低级语言中需要好几步才能完成的一个运算,在高级语言中只要一步即可完成。譬如C语言中一个变量i要加1,在C中只需要i++即可,看起来只有一句代码。但实际上翻译到汇编阶段需要3步才能完成:第1步从内存中读取i到寄存器,第2步对寄存器中的i进行加1,第3步将加1后的i写回内存中的i。

    3、使用临时变量来理解强制类型转换
    4、使用临时变量来理解不同数据类型之间的运算

    #include <stdio.h>
    
    int main(void)
    {
    	int b;
    	float a;
    	b = 10;
    	a = b / 3;		// 第一步先算 b/3,第二步将第一步的结果强制类型转换为float生成一个临时变量,第三步将第二步生成的临时变量赋值给a,第四步销毁临时变量。
    	printf("a = %f.\n", a);
    	
    	/*
    	int b;
    	float a, f;
    	b = 10;
    	f = 1.5;
    	a = b / f;
    	printf("a = %f.\n", a);
    	*/
    	
    	
    	/*
    	float a = 12.34;
    	int b = (int)a;			// a被强制类型转换后自己本身竟然没变
    	// (int)a强制类型转换并赋值在底层实际分了4个步骤:第一步先在另外的地方找一个内存构建一个临时变量x(x的类型是int,x的值等于a的整数部分),第二步将float a的值的整数部分赋值给x,第三步将x赋值给b,第四步销毁x。
    	// 最后结果:a还是float而且值保持不变,b是a的整数部分。
    	
    	printf("a = %f, b = %d.\n", a, b);
    	*/
    	
    	return 0;
    }
    
  • 您还可以看一下 CSDN讲师老师的C语言精髓之编译过程视频教程课程中的 计算机的组成部分,栈内存的特点;画出内存图,引入指针的概念小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    我认为您需要提供更具体的问题和相关代码,以便能够更好地理解和解决您的问题。具体来说,您需要提供所需的预期输出和结果,以及对哪些部分需要进一步理解和解决。同时,还需要使用明确的术语和语言来表达问题,以帮助 chat GPT 更好地理解并给出准确的解决方案。如果您需要优化您的问题,请在提供更多相关资料后再次提出问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

谁复杂的程序看流程图呀,最多都是简化成几个函数然后画流程图。只有新手才看流程图,你要学会不依靠流程图看代码。遇到不会或没见过的自己去看文档,要么就百度。这个应该是嵌入式开发的代码吧,人家硬件应该都有自己的文档或reference。