• 应广单片机跑马灯实现--阻塞式编程模式


           我这边再写了一个跑马灯程序,使用阻塞式编程模式,看起来会更简单直观。对于初学者来说,阻塞式编程比较直观好理解。在一些任务单一或是任务不多的程序来说,还是不错的选择。但是建议还是采用任务式/查询式编程,这样使程序会有更好的扩展性能,减少推倒重来的可能性。好像框架结构的房子,在框架范围内添砖加瓦就好了。非框架结构的房子,要改动就很麻烦了。

           好了,不多说,上代码!
    #include    "extern.h"

    /*调试输出开关,关闭之后测试端口不输出了*/
    //#define  DEBUG

    /*1m 标记*/
    //bit msFlag;

    /*us计数*/
    //byte ucUsCnt;
    /*ms 计数*/
    //byte ucMsCnt;


    //Word    Reload_T16;

    /*可以用示波器观察对应端口*/
    #ifdef DEBUG
    bit US100_OUT  :pa.7     
    bit MS_OUT     :pa.6 
    bit MS10_OUT   :pa.0  
    #endif


    byte ucLedst;

    BIT     COM1           :       PA.3;

    BIT     COM2           :       PA.4;

    BIT     COM3           :       PA.6;

    BIT     COM4           :       PA.7;


    #define  SEG_A  COM4 


    #define  SEG_B  COM3 


    #define  SEG_C  COM2


    #define  SEG_D  COM1

    /*中断服务程序*/
    void Interrupt(void)
    {
        pushaf;

        popaf;
    }

    void ShowBatSt(void)
    {
           if(ucLedst==0)
           {
               SEG_A=0;
               SEG_B=0;
               SEG_C=0;
               SEG_D=0;
               //ucFlashSegCnt=0;
           }
           else if(ucLedst==1)
           {
               SEG_A=1;
               SEG_B=0;
               SEG_C=0;
               SEG_D=0;
               //ucFlashSegCnt=0;
           }
           else if(ucLedst==2)
           {
               SEG_A=1;
               SEG_B=1;
               SEG_C=0;
               SEG_D=0;
               //ucFlashSegCnt=0;
             
           }

           else if(ucLedst==3)
           {
               SEG_A=1;
               SEG_B=1;
               SEG_C=1;
               SEG_D=0;
               //ucFlashSegCnt=0;
             
           }
           else if(ucLedst==4)
           {
                  SEG_A=1;
               SEG_B=1;
               SEG_C=1;
               SEG_D=1;
                  //ucFlashSegCnt=20;/*闪烁10s,关机*/
           }
           else if(ucLedst==6)
           {
               SEG_A=0;
               SEG_B=1;
               SEG_C=1;
               SEG_D=1;
               //ucFlashSegCnt=0;
           }
           else if(ucLedst==7)
           {
               SEG_A=0;
               SEG_B=0;
               SEG_C=1;
               SEG_D=1;
               //ucFlashSegCnt=0;
             
           }

           else if(ucLedst==8)
           {
               SEG_A=0;
               SEG_B=0;
               SEG_C=0;
               SEG_D=1;
               //ucFlashSegCnt=0;
             
           }
           else if(ucLedst==9)
           {
                  SEG_A=0;
               SEG_B=0;
               SEG_C=0;
               SEG_D=0;
                  //ucFlashSegCnt=20;/*闪烁10s,关机*/
           }
           else
           {
           }

          

        
    }

    void    FPPA0 (void)
    {
        /*注意,修改了sysclk,Reload_T16要做细微调整,可以试着改动sysclk,
        会发现Reload_T16误差变大*/
        
        .ADJUST_IC    SYSCLK=IHRC/8,IHRC=16MHz,init_ram,VDD=5V;        

        .delay 20*2000;
        //     $ SHOW_EN in ;

         $ COM1           OUT,low;

         $ COM2           OUT,low;

         $ COM3           OUT,low;

         $ COM4           OUT,low;

        


        while (1)
        {
        

                      ucLedst++;
                      if(ucLedst>10)
                      {
                           ucLedst=0;
                      }

                      ShowBatSt();

                      .delay 250*2000;
            

        }


    }
    /*creat by zhongvv QQ85547259*/
     

  • 相关阅读:
    Linxu Java环境配置Tomcat离线安装与启动
    这一次,称重软件查询功能完整了
    PyQt 定义控件SwitchButton 指南
    [BJDCTF2020]ZJCTF,不过如此1
    asp.net+sqlserver+c#学生作品展示及评分系统
    推挽输出和开漏输出-三极管-mos管
    LNMP编译安装
    笔试强训(三十八)
    markdown语法
    Linux系统启动过程---目录结构---文件系统超详解析
  • 原文地址:https://blog.csdn.net/zhongvv/article/details/132730174