作者 | strongerHuang
微信公众号 | 嵌入式专栏

在技术交流群经常会看到,有些刚参加工作的粉丝说:

  • 自己写的很垃圾......

  • 初学者的代码是什么水平......

  • 想看看菜鸟写的代码是怎样的?



说句实话,那些所谓的大佬、大神、高级工程师,谁不是从初级的菜鸟阶段走过来的?


谁都有过“稚嫩”的时候,包括我! 这里我不怕大家笑话,给你们翻出我当年写的那些垃圾代码,让你们看看!

我找了一下,在我刚毕业参加工作不久时候的一些小项目的代码(大概在2013~15年左右)。

1、xxx治疗仪:“点灯项目(2013年)
这个项目很简单,通过触摸屏控制“点灯”,调节灯的亮度......

用的STC8051单片机做控制,触摸屏都是现成的模块,通过串口指令进行控制。

main.c 主函数代码:
int main(void){  Delay(20);             //等待LCD复位完成  P1M0 = 0x03;           //端口模式配置(强上拉)  P10 = 0;               //关闭继电器(LED)  UART_Init();           //UART串口初始化  TIMER_Init();          //定时器初始化  DA_Init();             //DA初始化  LCD_Init();            //液晶模块初始化(含界面、触摸控制等)
  while(1)  {   PCON |= 0x01;       //进入空闲模式(待机)  }  return 0;}
这里只展示主函数这段“看起来相对好一点的代码”,其他代码过于垃圾,不便展示。

2、xxxIC卡项目(2014年)
这个项目就是一个很简单的IC模块,都谈不上项目,用51单片机做的控制。

main.c 主函数代码:
void main(void){  uint8_t status;  uint8_t password[6] = {0xFF0xFF0xFF0xFF0xFF0xFF};  uint8_t addr_block = 0;                          //块地址(扇区 == 4块)
  Sys_Initializes();
  /* 开机状态, LED闪烁 */  LED1_ON;  DelaySoftware(0xFF0);  LED1_OFF;  LED2_ON;
  FM17xx_Initializes();
  while(1)  {    status = Request(RF_CMD_REQUEST_ALL);    if(status == FM1715_OK)    {      DelaySoftware(0x10);
      status = AntiColl();      if(status == FM1715_OK)      {        SendStrings(UID, 4);      }
      status = Select_Card();      if(status == FM1715_OK)      {        status = Load_keyE2_CPY(password);        if(status == TRUE)        {          status = Authentication(UID, addr_block/4, RF_CMD_AUTH_LA);  //验证x扇区keyA          if(status == FM1715_OK)          {            LED2_OFF;            status=MIF_READ(buffer, addr_block);                       //读取x扇区x-x块数据            SendStrings(buffer, 16);            addr_block++;            if(40 == addr_block)            {              addr_block = 0;            }          }        }      }    }
    LED1_ON;    DelaySoftware(0x1F0);    LED1_OFF;    LED2_ON;    DelaySoftware(0x1F0);  }}
很垃圾的地方,就是while循环里面的“阻塞延时”,今天来看,真的......

3、xxx智能锁项目(2014年)
这个项目通过指纹、密码、IC卡等方式做的智能锁,用PIC16单片机做主控(当时PIC单片机功耗和稳定性在行业还是很不错)。

main.c 主函数代码:
void main(void){  uint8_t  key_val;  uint8_t  succeed_id;  uint64_t cnt_wakeup= 0;
  Sys_Initializes();  PERIP_POWER_ON;

  LED_BACK_ON;  LED_R_OFF;  LED_G_ON;  BEEP_Normal(1);  BEEP_OFF;  LED_BACK_OFF;  LED_G_OFF;
  /* 电机反转 */  MOTO_OUT;  MOTO_RIGHT;  delayms(200);  MOTO_CLOSE;
  if(0 == BATTERY_READ)  {                                                //<电量低、请更换电池>    NY3P_Play(NY3P_VID2, DELAY_MS_VID2, VOICE_WAIT);  }
  while(1)  {    /* 1.IC卡扫描 */    if(search_card_op() == M1_OK)                  //寻卡    {      CLRWDT();      SWDTEN = 0;      if(set_pcd_picc_link() == M1_OK)      {        PERIP_POWER_ON;        NY3P_Reset();        BEEP_Short(1);        PcdHalt();                                 //RC523进入停机模式
        if(FLAG_N_RESTORE == Restore_Check(TYPE_NONE))        {                                          //处于非出厂状态下,验证IC卡开门          if(CARD_OK == APP_Card_Verify(MLastSelectedSnr, &succeed_id, TYPE_CARD))          {            Verify_Dual(SUCCEED_TYPE_CARD, succeed_id, gFlag_OpenWay);            }        }      }    }    else    {        if(1 == gFlag_IRQ)      {        cnt_wakeup++;        if(0x400 < cnt_wakeup)        {          cnt_wakeup = 0;          gFlag_IRQ = 0;        }      }      else        Sys_Sleep();    }  
    if(1 == gFlag_IRQ)    {      CLRWDT();      SWDTEN = 0;      PERIP_POWER_ON;
      /* 2.触摸键盘扫描 */      if(KEY_NULL != (key_val = TouchKey_Scan(KEYVOICE_ON)))      {        LED_BACK_ON;        Respond_Key_Fp(key_val);                   //响应键盘        LED_BACK_OFF;      }
      /* 3.独立信号扫描 */      if(KEY_NULL !=  (key_val = Independ_Signal_Scan(KEYVOICE_OFF)))      {        switch(key_val)        {#if 1          /* 3.1验证指纹 */          case WAKEUP_VAL:          {            INFOR_Music(DO3,300);            LED_BACK_ON;            Respond_Key_Fp(KEY_NULL);            LED_BACK_OFF;          }break;#endif
          /* 3.2恢复出厂 */          case RESTORE_VAL:          {            INFOR_Music(DO3,300);            Restore();          }break;#if 0          /* 3.3一键开锁 */          case YKAJ_VAL:          {            INFOR_Music(DO3,300);            moto_ctr();          }break;#endif        }      }    }  }}
这个main函数的代码相对有点长,现在来看,吐槽的地方有点多......

这里我都看不下去了,你们留言吐槽一下吧。

4、xxx智能锁项目(2015年)
这个项目在之前(好几个)项目的基础上升级改用STM32做主控,迭代以前的项目。

但是,把以前的一些“垃圾代码”也同步过来了。

main.c 主函数代码:
int main(void){  uint8_t key_val;
  System_PowerOn_Initializes();
  Led_Off();  LED2_OFF;
  DCT_CLOSE;                                     //电磁铁-关闭
  //检测语音顺序#if 0  for(key_val=1; key_val<43; key_val++)    Ny3p_Play(key_val, 2000, VOICE_DELAY_WAIT, VOICE_ON);#endif
  Display_CurrentBattery();  TIMTiming1_Ns(8);  TIMTiming2_Nms(10);
  while(1)  {    if(FLAG_VALID == gTIMTiming2_FlagOver)    {      Display_CurrentTime();                     //显示当前时间      TIMTiming2_Nms(500);    }
    if((key_val = KEY_Scan(KEYVOICE_OFF)) != KEY_NONE)    {      if(KEY_BACK != key_val)      {        /* 密码 */        Led_Key();        Verify_PW();      }      else      {        KEY_VOICE();      }      LED1_OFF;      OLED_Clear_Sel(0,6);      Display_Sign();      Display_CurrentTime();      TIMTiming1_Ns(8);      TIMTiming2_Nms(10);    }
    if((key_val = Independ_Signal_Scan(KEYVOICE_ON)) != KEY_NONE)    {      switch(key_val)      {        /* 指纹 */        case KEY_BLH1_WEAKUP:        {          Led_Fun();          Verify_FP1();        }break;
        /* 设置 */        case KEY_SET:        {          Led_Fun();          Menu_Fun();        }break;
        /* 复位 */        case KEY_RESTORE:        {          Restore();        }break;
        /* 防撬(小偷) */        case KEY_THIEF:        {          Warning_Thief();        }break;      }      LED1_OFF;      OLED_Clear_Sel(0,6);      Display_Sign();      Display_CurrentTime();      TIMTiming1_Ns(8);      TIMTiming2_Nms(10);    }
    if(FLAG_VALID == gTIMTiming1_FlagOver)    {      Low_Power();    }  }}
这个改用STM32做主控,但吐槽点依然很多......

篇幅有限,就分享这么多吧,翻看之前的一些项目,真的有很多吐槽点。
毕业做项目有十多年了,大大小小也做了几十个项目,如果包括大学、以及工作后外包私活项目,可能有上百个项目了。

回看以前写的代码,有时候会有很多感慨......

最后,你写过哪些“垃圾代码”,欢迎留言分享!

END




最后提一句,21ic论坛(bbs.21ic.com)正在招募原创作者,单篇文章奖励最高500元,欢迎广大网友踊跃投稿! 点击了解活动详情

往期精选:

扫描二维码,关注视频号

请点下【♡】给小编加鸡腿