//**************************************************************************************** //*以下是OLED屏测试函数* //**************************************************************************************** //**************************************************************************************** void ExBusInit(void) //初始化P09702OLED显示屏总线 { uint32 temp; uint32 i;
PINSEL1 &= ~(3<<(2 * (DC_PIN_NUM-16))); PINSEL1 &= ~(3<<(2 * (WR_PIN_NUM-16))); PINSEL1 &= ~(3<<(2 * (RD_PIN_NUM-16))); PINSEL1 &= ~(3<<(2 * (CS_PIN_NUM-16)));// PINSEL1 &= ~(3<<(2 * (RES_PIN_NUM-16)));// // 设置引脚方向,所有相关引脚为输出 temp = 0xff<<AD0_PIN_NUM; IO1DIR|=LEDS8; IODIR=IODIR|(1<<WR_PIN_NUM)|(1 <<RD_PIN_NUM)|(1<<DC_PIN_NUM)|(1<<CS_PIN_NUM)|(1<<RES_PIN_NUM); // 设置引脚输出值,除CS_PIN_NUM输出为低电平外,其余均为高电平 IO0CLR = (1<<CS_PIN_NUM); IO0SET = (1<<DC_PIN_NUM)|(1<<WR_PIN_NUM)|(1<<RD_PIN_NUM); temp = 0xff<<AD0_PIN_NUM; IO1SET=IO1SET|temp; //复位 IO0CLR = (1<<RES_PIN_NUM); for(i=0; i<5000; i++); IO0SET = (1<<RES_PIN_NUM); for(i=0; i<5000; i++); }
/************************************************************************************/ // /************************************************************************************/ uint8 ReadData(void) //从P09702OLED显示屏读取数据 { uint32 temp,temp1; IRQDisable(); temp1 = IO1DIR; IO1DIR = temp1 & (~(0xff << AD0_PIN_NUM)); // 设置AD0_PIN_NUM为输入 IOCLR = 1 << RD_PIN_NUM; temp = IO1PIN; IOSET = 1 << RD_PIN_NUM; IO1DIR = temp1 | (0xff << AD0_PIN_NUM); temp = temp >> AD0_PIN_NUM; return (uint8) temp; IRQEnable(); } /************************************************************************************/ // /************************************************************************************/ void WriteCommand(uint8 Data) //写指令代码到P09702OLED显示屏 { IRQDisable(); IOCLR = 1 << DC_PIN_NUM; IO1SET = Data << AD0_PIN_NUM; Data = ~Data; IO1CLR = Data << AD0_PIN_NUM; IOCLR = 1 << WR_PIN_NUM; IOSET = 1 << WR_PIN_NUM; IOSET = 1 << DC_PIN_NUM; IRQEnable(); } /*************************************************************************************/ // /*************************************************************************************/ void WriteData(uint8 Data) //写参数及数据到P09702OLED显示屏 { IO1SET = Data << AD0_PIN_NUM; Data = ~Data; IO1CLR = Data << AD0_PIN_NUM; IOCLR = 1 << WR_PIN_NUM; IOSET = 1 << WR_PIN_NUM; } /*************************************************************************************/ // /*************************************************************************************/ void clr_oled(void) { int i,j; for(i=0;i<8;i++) { WriteCommand (0xB0+i); //设置显示位置—行 WriteCommand (0x02); //设置显示位置—列低地址 WriteCommand (0x10); //设置显示位置—列高地址 for(j=0;j<128;j++) WriteData(0x00); //屏幕显示,全亮 } } /*************************************************************************************/ // /*************************************************************************************/ void init_oled(void) { WriteCommand(0xAE); //Display off WriteCommand(0xAD); //Internal DC-DC off WriteCommand(0x8A); // Second byte WriteCommand(0xA8); //MUX Ratio WriteCommand(0x3F); //64 duty WriteCommand(0xD3); //Display offset WriteCommand(0x00); //Second byte WriteCommand(0x40); //Start line WriteCommand(0xA0); //Segment remap //a0 WriteCommand(0xC8); //COM remap WriteCommand(0xA6); //Set normal/inverse display (0xA6:Normal display) WriteCommand(0xA4); //Set entire display on/off (0xA4:Normal display) WriteCommand(0x81); //Contrast setting WriteCommand(0x5C); //Second byte WriteCommand(0xD5); //Frame rate WriteCommand(0x60); // 85 Hz WriteCommand(0xD8); //Mode setting WriteCommand(0x00); //Mono mode WriteCommand(0xD9); //Set Pre-charge period WriteCommand(0x84); // Second byte WriteCommand(0xAF); //Display on }
|