应广单片机实现跑马灯

这篇具有很好参考价值的文章主要介绍了应广单片机实现跑马灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        应广单片机处处体现其mini的特性,非常适合做各种方案开发,特别是点灯,什么跑马灯,氛围灯,遥控灯,感应灯,拍拍灯等,用应广都OK。

       跑马灯是基础中的基础,我搭了一个框架,要进行扩展或是修改也很容易。不多说,上代码。
#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;
    if(Intrq.T16)
    {    
        STT16    Reload_T16;
        
        Intrq.T16 = 0;

      
       ucUsCnt++;
       if(ucUsCnt>9)
       {
              ucUsCnt=0;
           /*100us*10=1ms*/
           msFlag=1;
       }
        /*100u task,紧急任务放这边,但这里的任务尽量少,
        心脏部位,尽量减少干扰,需要保证tick精准*/
#ifdef DEBUG
     
       if(US100_OUT)
       {
              US100_OUT=0;
       }
       else
       {
             US100_OUT=1;
       }
#endif

    }    
    popaf;
}


/*T16设置*/
Void   Timer16_Init(void)
{
    /*向上计数 1600就发生中断 1600/16M=0.0001s=100us,理论设计*/
    //Reload_T16 = 32768 - 1600;
    
    /*根据测算(示波器校准),除去误差(约为20个sysclk周期),设置1580这个值可能更准确,
    SYSCLK越快,误差越小.从进入中断开始,到重新设置计数器,中间大概需要20个sysclk周期*/
    Reload_T16 = 32768 - 1580;
    
    /*设置计数器值*/
    STT16    Reload_T16;

    /*配置T16 控制寄存器*/
    $ T16M    IHRC,/1,BIT15;
    
    INTRQ.T16 = 0;
    INTEN.T16 = 1;

    
    msFlag=0;
    ucUsCnt=0;

    

    
}


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;

    
    /*初始化T16*/
    Timer16_Init();
    
#ifdef DEBUG    
    $ US100_OUT out,low;
    $ MS_OUT out,low;
    $ MS10_OUT out,low;
#endif
    ucLedst=0;
    Engint;

    while (1)
    {
    
        
        /*1ms标记*/
        if(msFlag)
        {
            ucMsCnt++;
            if(ucMsCnt>250)
            {
                /*1ms*10=10ms*/
                ucMsCnt=0;


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

                  ShowBatSt();
                /*10mstask 放这里*/
            #ifdef DEBUG

                   if(MS10_OUT)
                   {
                          MS10_OUT=0;
                   }
                   else
                   {
                         MS10_OUT=1;
                   }
             #endif
                
            }
           /*1ms task*/
          #ifdef DEBUG
           if(MS_OUT)
           {
                  MS_OUT=0;
           }
           else
           {
                 MS_OUT=1;
           }
           #endif

            msFlag=0;
        }

    }
}
/*creat by zhongvv QQ85547259*/文章来源地址https://www.toymoban.com/news/detail-708966.html

到了这里,关于应广单片机实现跑马灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 实现跑马灯效果

    Android中实现跑马灯效果有多种方式,本篇简单介绍下: 1: TextView属性实现 这里需要注意下: 需要限制textview的宽度,不能设置为wrap_content 启动跑马灯效果需要获取焦点requestFocus(). 2: 代码实现 3: 自定义 view实现 这里可以使用动画的效果实现. 4: 实现竖直效果的跑马灯

    2024年01月18日
    浏览(45)
  • JavaFx 实现水平滚动文本(跑马灯效果)

    原文地址: JavaFx 实现水平滚动文本(跑马灯效果) - Stars-One的杂货小窝 本文是以TornadoFx框架进行编写,各位使用JavaFx可以参考 代码已经封装在common-controls库中 实现原理就是利用了JavaFx里的动画效果去修改scrollpane的translateX属性,原本想在text上改造的,发现文字过多就不行了,最终还

    2023年04月27日
    浏览(40)
  • CSS中如何实现文字跑马灯效果?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月09日
    浏览(36)
  • 使用Vue.js实现文字跑马灯效果

    实现文字跑马灯效果,首先用到 substring()截取 和 setInterval计时器 clearInterval()清除计时器 效果如下: 实现代码如下: 以上是实现文字跑马灯效果,如有不足的地方,欢迎在评论区留言。

    2023年04月19日
    浏览(33)
  • 纯CSS实现边框流光效果(跑马灯效果)

    首先上一个效果图 有木有发现和夜晚街上的广告牌很像,接下来让我们看看如何使用css实现的吧 首先很明显应该使用一个盒子将文字装起来,并且将文字进行了居中,然后我们看到这盒子的周围围绕了两条光带,那么这两条光带是怎么实现的呢? 其实这是用四个小盒子实现

    2024年02月07日
    浏览(39)
  • 探究前端的跑马灯效果是如何用css实现的

    💖 作者简介:大家好,我是阿牛,全栈领域优质创作者😜 📝 个人主页:馆主阿牛🔥 🎉 支持我:点赞👍+收藏⭐️+留言📝 📣 系列专栏:前端实用小demo🍁 💬格言:迄今所有人生都大写着失败,但不妨碍我继续向前!🔥 无意见看到了一个网站的一个动画的跑马灯效果

    2024年04月10日
    浏览(32)
  • flutter开发实战-实现marquee根据文本长度显示文本跑马灯效果

    flutter开发实战-实现marquee文本跑马灯效果 最近开发过程中需要marquee文本跑马灯效果,这里使用到了flutter的插件marquee 效果图如下 1.1 引入marquee 在pubspec.yaml中引入marquee 1.2 marquee使用 marquee使用也是非常方便的。比如直接指定文本text 或者设置更多属性值 根据Text文本的大小判断

    2024年02月13日
    浏览(36)
  • Qt+C++实现灯带动画运动位置变换移动跑马灯图片轮播

     程序示例精选 Qt+C++实现灯带动画运动位置变换移动跑马灯图片轮播 如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助! 这篇博客针对Qt+C++实现灯带动画运动位置变换移动跑马灯图片轮播编写代码,代码整洁,规则,易读。 学习与应用推荐首

    2024年02月13日
    浏览(26)
  • 跑马灯实验

             1.熟悉龙芯实验开发板、熟悉 VIVADO 的编译环境及操作流程。         2.掌握 FPGA 编程入门知识、利用门级方法实现简单逻辑电路。         3.继续学习 Verilog HDL 语法、掌握跑马灯的设计、熟悉调试过程。          本次实验用 Verilog HDL 语言来描述 6 个不

    2024年02月04日
    浏览(31)
  • Android --- 跑马灯效果

    跑马灯效果主要使用的控件为TextView,其中涉及的几个标签如下所示: android:ellipsize If set, causes words that are longer than the view is wide to be ellipsized instead of broken in the middle. You will often also want to set scrollHorizontally or singleLine as well so that the text as a whole is also constrained to a single line in

    2023年04月08日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包