皮毛的学习了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