美文网首页
C++在单片机上面的啪啪啪

C++在单片机上面的啪啪啪

作者: 程序爱好者 | 来源:发表于2019-07-31 14:44 被阅读0次

    皮毛的学习了C++,接触之后感觉棒棒哒,爱不释手,但C++又表现出其高深莫测。各种封装编程爽歪歪,最近想去了IAR编译软件支持C++,支持对MSP430,ARM,STM8等单片机编程。有种想用C++来单片机的开发,小试牛刀了下,但是IAR软件没有自动补全的功能,这对于编程来说有点不爽,效率也不高。但是单片机每个模块的封装接口并不是很多,因而编程上面也要求不是很高。封装体现出来的是只要实例化一个模块,很方便即可对里面应用层面接口的调用,而设备资源的初始化已交给构造函数执行,只要一实例化对象,即会完成初始。这个都不用开发者去初始化,也不用再担心忘记了对设备资源的初始化。下面是我的一个小试牛刀模块,关于LED灯模块。(开发平台IAR)

    这是点C源文件

    #include "DX_led.h"

    DX_Led::DX_Led()

    {

        initGpio();

    }

    DX_Led::~DX_Led()

    {

    }

    /**********************

      LED引脚设置函数

    ***********************/

    void DX_Led::initGpio(void)

    {

          PB_DDR |= 0x0F;

          PB_CR1 |= 0x0F;

          PB_ODR |= 0x0F; //先全部关灯

    }

    /**********************

         falsh led

    ***********************/

    void DX_Led::flashLed()

    {

          for(unsigned char i=0; i<4; i++)

          {

                  PB_ODR &= ~(1<<i);    //点亮对应的灯

                  Delay.delayMs(400);   //延时显示500ms

                  PB_ODR |= 1<<i;    //关闭对应的灯

          }

    }

    void DX_Led::switchLed0()

    {

          LED0 = ~LED0;

    }

    void DX_Led::switchLed1()

    {

          LED1 = ~LED1;

    }

    void DX_Led::switchLed2()

    {

          LED2 = ~LED2;

    }

    void DX_Led::switchLed3()

    {

          LED3 = ~LED3;

    }

    void DX_Led::switchAllLed()

    {

          switchLed0();

          switchLed1();

          switchLed2();

          switchLed3();

    }

    void DX_Led::lightLed0(bool Status)

    {

       if(Status)

          LED0 = 0;

       else 

          LED0 = 1;

    }

    void DX_Led::lightLed1(bool Status)

    {

       if(Status)

          LED1 = 0;

       else 

          LED1 = 1;  

    }

    void DX_Led::lightLed2(bool Status)

    {

       if(Status)

          LED2 = 0;

       else 

          LED2 = 1;  

    }

    void DX_Led::lightLed3(bool Status)

    {

       if(Status)

          LED3 = 0;

       else 

          LED3 = 1; 

    }

    头文件

    /* **************************************************

    *描述:本实验用操作寄存器位定义的方法点亮 LED0

    *硬件连接:

    *LED0 -> PB0

    *LED1 -> PB1

    *LED2 -> PB2

    *LED3 -> PB3

    ******************************************************/

    #ifndef __DX_LED_H__

    #define __DX_LED_H__

    #include "iostm8s105c6.h"

    #include "DX_led.h"

    #include "DX_delay.h"

    #define   LED0    PB_ODR_ODR0 //将PB口的bit0定义为led0

    #define   LED1    PB_ODR_ODR1

    #define   LED2    PB_ODR_ODR2

    #define   LED3    PB_ODR_ODR3

    class DX_Led

    {

    private:

        DX_Delay Delay;

        void initGpio();

    public:

        void flashLed();

        void lightLed0(bool Status);

        void lightLed1(bool Status);

        void lightLed2(bool Status);

        void lightLed3(bool Status);

        void switchLed0();

        void switchLed1();

        void switchLed2();

        void switchLed3();

        void switchAllLed();

        DX_Led();

        ~DX_Led();

    };

    #endif

    交流群728483370,一起学习加油!

    交流群728483370,一起学习加油!

    相关文章

      网友评论

          本文标题:C++在单片机上面的啪啪啪

          本文链接:https://www.haomeiwen.com/subject/ztftdctx.html