` 一个好的MCU还要配上一个好的人机交互方式才便于用户使用,由于PIC16F15324自身的引脚数就不算多,故为它配置一个数码管来做显示,或是使用LCD1602来做显示都不是最好的选择。而我们这里所选取的则是I2C接口的OLED屏,它只需占用2个I/O就能完成显示任务。 这里使用的是RA0和RA1,其与OLED屏的连接关系如下: RA0---SDA RA1---SCL 其引脚的配置图见图1所示。
图1 引脚配置 在生成程序框架后,可进行如下的输出高低电平定义: #defineOLED_SCLK_Set() SCL_SetHigh() #defineOLED_SCLK_Clr() SCL_SetLow() #defineOLED_SDIN_Set() SDA_SetHigh() #defineOLED_SDIN_Clr() SDA_SetLow() 而对OLED屏的初始化函数则是:
- void OLED_Init(void)
- {
- OLED_SCLK_Set();
- OLED_SDIN_Set();
- DELAY_milliseconds(800);
- OLED_WR_Byte(0xAE,OLED_CMD);//--display off
- OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
- OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
- OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
- OLED_WR_Byte(0x81,OLED_CMD); // contract control
- OLED_WR_Byte(0xFF,OLED_CMD);//--128
- OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
- OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
- OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
- OLED_WR_Byte(0x1F,OLED_CMD);//--1/32 duty
- OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
- OLED_WR_Byte(0x00,OLED_CMD);//
- OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
- OLED_WR_Byte(0xf0,OLED_CMD);//
- OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
- OLED_WR_Byte(0x22,OLED_CMD);//
- OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
- OLED_WR_Byte(0x02,OLED_CMD);//
- OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
- OLED_WR_Byte(0x49,OLED_CMD);//
- OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
- OLED_WR_Byte(0x14,OLED_CMD);//
- OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
- OLED_Clear();
- }
复制代码
实现字符串显示的函数为:
- 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)
- {
- // initialize the device
- SYSTEM_Initialize();
- OLED_Init();
- OLED_ShowString(0,0,"PIC16F15324 TEST",16);
- OLED_ShowString(0,2,"OLED Display",16);
- LED_SetHigh();
- while (1)
- {
- // Add your application code
- LED_Toggle();
- DELAY_milliseconds(1000);
- }
- }
复制代码
在编译下载程序后,其显示效果如图2所示。 图2运行效果图
`
|