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

2019-04-15 17:37发布

皮毛的学习了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<               Delay.delayMs(400);   //延时显示500ms
              PB_ODR |= 1<
   //关闭对应的灯
      }
}
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