本帖最后由 jinglixixi 于 2023-1-4 08:28 编辑
由于开发板是为控制电机而设计的,因此在开发板上除了电源指示灯外,并无其它可供观察的器件,故其上电效果十分简单,见图1所示。 图1 上电效果
其实,换个角度看还可见到功率底板上也有一个LED灯被点亮,见图2所示。 图2 上电效果
那么是否能点亮其它的LED灯来掌握GPIO口的使用呢?
方法倒是有,那就是为开发板外挂一个LED灯模块。为此,将一个LED模块的控制引脚连接到了P1.6以控制该LED模块的亮灭,详见图3所示。 图3 外挂LED模块
然后再为它编写一个控制LED灯的主程序,其内容如下: int main(void) {
SoftDelay(50000);
__disable_irq();
Hardware_init();
sys_init();
while(1)
{
GPIO_WriteBit(GPIO1, GPIO_Pin_6,0);
SoftDelay(500000);
GPIO_WriteBit(GPIO1, GPIO_Pin_6,1);
SoftDelay(500000);
}
}
经程序的编译下载,该LED模块就可以闪烁起来,GPIO口输出功能的测试也就解决了。
以此为基础,再来尝试一下I2C接口OLED屏的显示驱动。 该显示屏是一款0.96寸双色屏,其显示分辨率为128*64像素点,它与开发板的连接关系为: SCL---P1. 4 SDA---P1. 6 为这2个引脚输出高低电平的语句定义为: #define SCL_high GPIO_WriteBit(GPIO1, GPIO_Pin_4,1) #define SCL_low GPIO_WriteBit(GPIO1, GPIO_Pin_4,0) #define SDA_high GPIO_WriteBit(GPIO1, GPIO_Pin_6,1) #define SDA_low GPIO_WriteBit(GPIO1, GPIO_Pin_6,0) 相应的引脚功能配置引脚为: GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIO1, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIO1, &GPIO_InitStruct);
为了快速检测程序的驱动正确性,这里将清屏函数改造为一个显示水平线的函数,其程序内容如下: void OLED_ line(void)
{
uint8_t i,n;
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD);
OLED_WR_Byte (0x00,OLED_CMD);
OLED_WR_Byte (0x10,OLED_CMD);
for(n=0;n<128;n++) OLED_WR_Byte(0xf0,OLED_DATA);
}
}
相应的测试主程序为:
int main(void) {
SoftDelay(50000);
__disable_irq();
Hardware_init();
sys_init();
__enable_irq();
OLED_Init();
OLED_line();
while(1);
}
经下载测试,其显示效果如图4所示。 图4 显示水平线条
由此说明它是可以驱动OLED屏进行显示的,随后又对字符串的显示功能进行测试。
实现字符串显示的函数为: void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
{
unsigned char j=0;
while (chr[j]!='\0')
{
OLED_ShowChar(x,y,chr[j],Char_Size);
x+=8;
if(x>120){x=0;y+=2;}
j++;
}
}
实现字符串显示的主程序为: int main(void) {
SoftDelay(50000);
__disable_irq();
Hardware_init();
sys_init();
__enable_irq();
OLED_Init();
OLED_Clear();
OLED_ShowString(20,0,"0123456789",16);
while(1);
}
经程序的下载测试,其显示效果如图5所示。 图5 显示数字字符串
但稍感遗憾的是LKS32MC037E的存储空间只有32KB,所以在程序中存放字符库时,会提示已超出存储空间。为此,只好对字库进行裁剪,在使用6*8的字符库时,可通过程序编译。
相应的显示测试主程序为: int main(void) {
SoftDelay(50000);
__disable_irq();
Hardware_init();
sys_init();
__enable_irq();
OLED_Init();
OLED_Clear();
OLED_ShowString(20,0,"LKS32MC037E",8);
OLED_ShowString(20,2,"OLED Test",8);
OLED_ShowString(20,6,"jinglixixi",8);
while(1);
}
在程序下载后,其显示效果如图6所示。 图6 字符串显示
|