- 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 字符串显示