本帖最后由 jinglixixi 于 2021-3-6 18:35 编辑
前面在实现OLED屏显示的时候遇到的小问题,现在终于解决了,该显示屏是I2C接口的0.91寸的单色OLED屏。 OLED与MCU的连接关系为: SCL ---PTE3 SDA ---PTE1 定义相关引脚输出高低电平语句为: #define SCL_high PORT_PTED_PTED3 = 1 #define SCL_low PORT_PTED_PTED3 = 0 //PTE3 #define SDA_high PORT_PTED_PTED1 = 1 #define SDA_low PORT_PTED_PTED1 = 0 //PTE1 模拟I2C发送字节的函数为: - void Write_IIC_Byte(unsigned char IIC_Byte)
- {
- unsigned char i;
- unsigned char m,da;
- da=IIC_Byte;
- SCL_low;
- DelayUS(1);
- for(i=0;i<8;i++)
- {
- m=da;
- m=m&0x80;
- if(m==0x80)
- {
- SDA_high;
- }
- else SDA_low;
- DelayUS(1);
- da=(da<<1);
- SCL_high;
- DelayUS(1);
- SCL_low;
- DelayUS(1);
- }
- }
复制代码
显示字符串的函数为: - 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++;
- }
- }
复制代码
实现显示效果的主程序为: - void main(void)
- {
- Sys_Init();
- EnableInterrupts;
- MTIM1_Init();
- PORT_PTEOE_PTEOE1 = 1; //PTE1
- PORT_PTEOE_PTEOE3 = 1; //PTE3
- DelayMS(1);
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"+C9)08(*60",16);
- OLED_ShowString(0,2,"0.91' <;?>",16);
- //OLED_ShowString(0,2,"2021.3.6",16);
- //OLED_ShowString(0,2,"10:27:02",16);
- while(1);
- }
复制代码
经程序的编译下载,其显示效果如图1和图2所示。 图1 显示数字字符
图2 显示字符信息
若将SDA和SCL连接到PTA3和PTA2则可免去连线,其显示效果如图3所示。 图3 直接使用Arduino接口
只所以如此测试是因为,当字符库较大时会导致程序下载的失败,在只显示数字时证明程序的正确性,当字符库延伸到字符C时,程序仍然依然可下载,而伸到字符E时,就影响程序下载了,为了达到图示的效果,采用了部分字模的替代处理。后面打算将字符库移到W25Q32中,以便达到全字符集及汉字的显示。
|