去了新公司看到源代码,看到这些时,我无法理解.

2020-01-23 14:30发布

        最近跳槽,新进一家公司有两个月了,然后今天上头弄了一份代码给我看,说熟悉下。
        我在程序里面看到了这些,以下是示例
        void keyscan()
        {
        if(K1==0)
          {       
           delayms(20);
           if(K1==0)//确认动作,执行程序
                {
                动作程序;
                }
        }
        }

        main()
        {
        delayms(100);//等上电稳定,时钟稳定
        各种初始化;
        while()
        {
        清看门狗;
        各种子程序;
        delayms(300);
        }
        }
       
       我看到的表情是 ,不过比起我在上一家公司好多了,上一家公司是这么写的。
        void ISR()//中断服务子程序,中断法(按键接在中断脚上)
        {
        if(K1==0)
          {       
           delayms(20);
           if(K1==0)//确认动作,执行程序
                {
                while(!K1);//等待按键松开
                动作程序;
                }
        }
        }
     那是我的表情是 ,这也能行。。。,后来我改掉了那个公司所有子程序。
       
    其实我看到这些,我现在更大的不知何去何从.  我无法理解,目前看到的代码,除了唯一看到一个采用定时器轮询法扫按键(本坛的状态机法等不包括在内),其它一律用delay();甚至中断while()等待松键
   有时庆兴自己啊,在这里泡了两年。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
99条回答
viq505
1楼-- · 2020-02-04 19:01
一个初中的单片机爱好者同楼上同求高水平的代码
qlb1234
2楼-- · 2020-02-04 19:43
本帖最后由 qlb1234 于 2014-7-3 10:57 编辑
68336016 发表于 2014-7-2 15:17
给大家讲解下第一段代码怎么反复运行?


確實是有可能的。
  1. bool key_scan(void)
  2. {
  3.     if(PIN_A1 == 1)
  4.     {
  5.         delay_ms(20);
  6.         if(PIN_A1 == 1)
  7.         {
  8.             return true;
  9.         }
  10.     }
  11.     return false;
  12. }

  13. void work(void);

  14. void main(void)
  15. {
  16.     while(1)
  17.     {
  18.         bool key = key_scan();
  19.         if(key == true)
  20.         {
  21.             work();
  22.         }
  23.     }
  24. }
复制代码

假如work()的執行時間衹需要1us,可以忽略,那麼,如果用戶按下40ms或更長的時間,work()就會重複執行了。
68336016
3楼-- · 2020-02-05 01:02
qlb1234 发表于 2014-7-3 10:55
確實是有可能的。

也是,代码使用键值后没有立即清除。

一周热门 更多>