本帖最后由 芯圣电子官方QQ 于 2023-7-20 11:14 编辑
由于HC89F003仅有20个引脚,加上板载资源的占用,再要为开发板配置一个供人机交互的显示器就需要花些心思了,要求它不能占用过多的I/O引脚,且显示的信息要尽可能地多一些。 一款采用I2C接口的双色OLED屏就较符合这个要求,除电源外,它只需占用2个I/O口,且能显示多行信息,详细效果如图所示。
OLED屏显示效果
通过对HC89F003开发板原理图的观察,使用P07和P06与OLED屏连接比较好,其中由 P07来提供SCL时钟信号,P06来提供SDA数据信号。 为了便于高低电平信号的输出,所定义的输出引脚如下: #define OLED_SCLK_Clr() GPIO_WriteLow(GPIOT0,GPIO_PIN_7); //SCL P07 #define OLED_SCLK_Set() GPIO_WriteHigh(GPIOT0,GPIO_PIN_7); #define OLED_SDIN_Clr() GPIO_WriteLow(GPIOT0,GPIO_PIN_6) //SDA P06 #define OLED_SDIN_Set() GPIO_WriteHigh(GPIOT0,GPIO_PIN_6);
对应的OLED屏初始化函数为: void OLED_Init(void)
{
mDelaymS(800);
OLED_WR_Byte(0xAE,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD);
OLED_WR_Byte(0x10,OLED_CMD);
OLED_WR_Byte(0x40,OLED_CMD);
OLED_WR_Byte(0xB0,OLED_CMD);
OLED_WR_Byte(0x81,OLED_CMD);
OLED_WR_Byte(0xFF,OLED_CMD);
OLED_WR_Byte(0xA1,OLED_CMD);
OLED_WR_Byte(0xA6,OLED_CMD);
OLED_WR_Byte(0xA8,OLED_CMD);
OLED_WR_Byte(0x3F,OLED_CMD);
OLED_WR_Byte(0xC8,OLED_CMD);
OLED_WR_Byte(0xD3,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD);
OLED_WR_Byte(0xD5,OLED_CMD);
OLED_WR_Byte(0x80,OLED_CMD);
OLED_WR_Byte(0xD8,OLED_CMD);
OLED_WR_Byte(0x05,OLED_CMD);
OLED_WR_Byte(0xD9,OLED_CMD);
OLED_WR_Byte(0xF1,OLED_CMD);
OLED_WR_Byte(0xDA,OLED_CMD);
OLED_WR_Byte(0x12,OLED_CMD);
OLED_WR_Byte(0xDB,OLED_CMD);
OLED_WR_Byte(0x30,OLED_CMD);
OLED_WR_Byte(0x8D,OLED_CMD);
OLED_WR_Byte(0x14,OLED_CMD);
OLED_WR_Byte(0xAF,OLED_CMD);
}
实现显示效果主函数如下: 实现显示效果主函数如下:void main(void)
{
System_init();
GPIO_Init(GPIOT0,GPIO_PIN_6, GPIO_MODE_OUT_PP);
GPIO_Init(GPIOT0,GPIO_PIN_7, GPIO_MODE_OUT_PP);
OLED_Init();
OLED_Clear();
OLED_ShowString(2,0,"holychip",16);
OLED_ShowString(2,2,"HC89F003",16);
OLED_ShowString(2,4,"0.96' OLED TEST",16);
OLED_ShowString(2,6,"2017-11-26",16);
while(1);
}
|