標(biāo)題:
我的OLED點(diǎn)不亮,有大神幫我看看是程序出問(wèn)題了嗎?
[打印本頁(yè)]
作者:
DYQ_DYQ
時(shí)間:
2018-10-23 18:06
標(biāo)題:
我的OLED點(diǎn)不亮,有大神幫我看看是程序出問(wèn)題了嗎?
/**OLED驅(qū)動(dòng)腳***/
#define rse P0_4
#define sda P0_2
#define sck P0_1
/**********************************************
//
//IIC通信開(kāi)始函數(shù)
//
**********************************************/
void ICC_Start()
{
sda=1;
sck=1;
_nop_();
sda=0;
_nop_();
_nop_();
sck=0;
}
/**********************************************
//
//IIC通信停止函數(shù)
//
**********************************************/
void ICC_Dtop()
{
sda=0;
_nop_();
sck=1;
_nop_();
_nop_();
sda=1;
}
/**********************************************
//
//向IIC寫(xiě)數(shù)據(jù)函數(shù)
//返回值為acknowledgement位信號(hào)
//
**********************************************/
bit write_IIC_Data(unchar Data)
{
uchar i;
bit ack_bit; //應(yīng)答型號(hào)
for(i=0;i<8;i++)
{
if(Data&0x80)
{
sda=1;
}
else
{
sda=0;
}
_nop_();
sck=1;
_nop_();
_nop_();
sck=0;
Data=Data<<1;
}
sda=1; //釋放IIC SDA總線(xiàn)為主器件接收從器件產(chǎn)生應(yīng)答信號(hào)
_nop_();
_nop_();
sck=1; //第9個(gè)時(shí)鐘周期
_nop_();
_nop_();
ack_bit=sda; //讀取應(yīng)答信號(hào)
sck=0;
return ack_bit;
}
/**********************************************
//
//寫(xiě)命令函數(shù)
**********************************************/
//
//
void Write_Command(unchar command)
{
ICC_Start();
write_IIC_Data(0x78); //Salve Adress 從機(jī)地址為0,設(shè)置為寫(xiě)模式
write_IIC_Data(0x00); //寫(xiě)命令
write_IIC_Data(command);
ICC_Dtop();
}
/**********************************************
//
//寫(xiě)數(shù)據(jù)函數(shù)
//
**********************************************/
//
//
void Write_Data(unchar date)
{
ICC_Start();
write_IIC_Data(0x78); //Salve Adress 從機(jī)地址為0,設(shè)置為寫(xiě)模式
write_IIC_Data(0x40); //寫(xiě)數(shù)據(jù)
write_IIC_Data(date);
ICC_Dtop();
}
/**寫(xiě)數(shù)據(jù)還是寫(xiě)命令***/
void OLED_WR_Byte(unchar dat,bit cmd)
{
if(cmd)
{
Write_Data(dat);
}
else
{
Write_Command(dat);
}
}
/********************************************
// 寫(xiě)滿(mǎn)屏
********************************************/
void fill_picture(unsigned char fill_Data)
{
unsigned char m,n;
for(m=0;m<8;m++)
{
OLED_WR_Byte(0xb0+m,0); //page0-page1
OLED_WR_Byte(0x00,0); //low column start address
OLED_WR_Byte(0x10,0); //high column start address
for(n=0;n<128;n++)
{
OLED_WR_Byte(fill_Data,1);
}
}
}
void Init_IC()
{
rse=0;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
rse=1;
Write_Command(0xAE); //Set Display Off 這個(gè)是關(guān)閉顯示
Write_Command(0xd5); //display divide ratio/osc. freq. mode 分頻比/振蕩器頻率模式設(shè)置
Write_Command(0x80); ////分頻比/振蕩器頻率數(shù)據(jù)設(shè)置(80H:+15%,??50H:0%)
Write_Command(0xA8); //multiplex ration mode:63 //多路復(fù)用率數(shù)據(jù)設(shè)置?(1:00H,??2:02H,?3:03H,?······??63:3EH,?64:3FH
Write_Command(0x3F);
Write_Command(0xD3); //Set Display Offset //顯示偏移數(shù)據(jù)設(shè)置?(COM0:00H,?COM1:02H,?COM2:03H,?······?COM62:3EH,?COM63:3FH)
Write_Command(0x00);
Write_Command(0x40); //Set Display Start Line 設(shè)置顯示開(kāi)始的行
Write_Command(0xAD); //DC-DC Control Mode Set 直流轉(zhuǎn)換器電源控制方式設(shè)置(打開(kāi))
Write_Command(0x8A); //DC-DC ON/OFF Mode Set 直流轉(zhuǎn)換器電源開(kāi)/關(guān)模式設(shè)置(直流轉(zhuǎn)換禁用:8AH,顯示是直流打開(kāi):8BH)
Write_Command(0x32); //Set Pump voltage value
Write_Command(0xA1); //Segment Remap 設(shè)置段重新映射(ADC)(正向:A0H,??反向A1H)
Write_Command(0xC8); //Sst COM Output Scan Direction 設(shè)置公用邊輸出掃面的方向(從COM0向COM(N-1)掃描:C0H,從com(N-1)向COM0掃描:C8H)
Write_Command(0xDA); //common pads hardware: alternative 常見(jiàn)的引腳硬件配置模式設(shè)置
Write_Command(0x12); //順序/替代(順序:02H。替代:12H)
Write_Command(0x81); //contrast control 對(duì)比度控制模式設(shè)置
Write_Command(0x6A); //對(duì)比度控制模式設(shè)置(ISEG small:00H,Large:FFH,不使用此功能:80H)
Write_Command(0xD9); //set pre-charge period 預(yù)充電周期模式設(shè)置
Write_Command(0x22); //無(wú)充電周期數(shù)據(jù)設(shè)置
Write_Command(0xDB); //VCOM deselect level mode VCOM取消級(jí)別模式設(shè)置
Write_Command(0x18); //40 VCOM取消級(jí)數(shù)據(jù)設(shè)置(VCOM=0.430*VREF:00H,VCOM=0.77*VREF:35H ,VCOM=1*VREF:40H)
Write_Command(0xA4); //Set Entire Display On/Off //設(shè)置全屏顯示關(guān)/開(kāi)(正常顯示:A4H,全屏顯示:A5H)
Write_Command(0xA6); //Set Normal Display //設(shè)置正常/反白顯示(正常顯示:A6H,反白顯示:A7H)
Write_Command(0xAF); //Set Display On //這個(gè)開(kāi)顯示
OLED_Clear();
}
void All_Screen()
{
uchar page_number,column_number;
for(page_number=0;page_number<8;page_number++)
{
Write_Command(0xb0+page_number); //設(shè)置頁(yè)面地址(1頁(yè):B0H,2頁(yè):B1H,3頁(yè):B2H,4頁(yè):B3H,5頁(yè):B4H,6頁(yè):B5H,7頁(yè):B6H)
Write_Command(0x10);//Set?Column?Address?4?lower?bits??設(shè)置列地址低4位(00H--0FH)(0,0,0,0,A3?A2?A1?A0 這兩個(gè)反過(guò)來(lái),懶得換
Write_Command(0x02);//Set?Column?Address?4?higher?bits??設(shè)置列地址高4位(10H--17H)(0,0,0,1,A7?A6?A5?A4
for(column_number=0;column_number<128;column_number++)
{
Write_Data(0xff);
}
}
}
void OLED_Clear(void)
{
u8 i,n;
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,0); //設(shè)置頁(yè)地址(0~7)
OLED_WR_Byte (0x00,0); //設(shè)置顯示位置—列低地址
OLED_WR_Byte (0x10,0); //設(shè)置顯示位置—列高地址
for(n=0;n<128;n++)OLED_WR_Byte(0,1);
} //更新顯示
}
void Timer0_Initial(void)
{
TCON1 = 0x00; //Tx0定時(shí)器時(shí)鐘為Fosc
TMOD = 0x00; //16位重裝載定時(shí)器/計(jì)數(shù)器
//Tim0計(jì)算時(shí)間 = (65536 - 0xFACB) * (1 / (Fosc /Timer分頻系數(shù)))
// = 1333 / (16000000 / 12)
// = 1 ms
//定時(shí)1ms
//反推初值 = 65536 - ((1/1000) / (1/(Fosc / Timer分頻系數(shù))))
// = 65536 - ((1/1000) / (1/(16000000 / 12)))
// = 65536 - 1333
// = 0xFACB
TH0 = 0xff;
TL0 = 0xde; //T0定時(shí)時(shí)100us ,一個(gè)數(shù)走3us
IE |= 0x02; //打開(kāi)T0中斷
TCON |= 0x10; //使能T0
EA = 1; //打開(kāi)總中斷
}
void main()
{
POWER_INITIAL();
Init_IC();
All_Screen();
while(1)
{
fill_picture(0xaa);
}
}
void TIMER0_Rpt(void) interrupt TIMER0_VECTOR
{
}
作者:
mengzhixinheng
時(shí)間:
2018-10-24 10:28
如果你確定IIC通信沒(méi)有問(wèn)題,那么初始化序列有可能不對(duì),這個(gè)是可以proteus仿真的,你可以仿真一下就知道了
作者:
thl4508
時(shí)間:
2018-10-24 19:11
先確認(rèn)外圍電路是否正確。
作者:
157359
時(shí)間:
2018-10-24 20:14
#include <stc15.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int void delayms(uint z) { uint i,j; for(i=z;i>0;i--) for(j=115;j>0;j--); } void main() { P2 = 0x01; while(1) { P2 = _cror_(P2,1); delayms(3000); } }
作者:
victory66666666
時(shí)間:
2018-10-25 12:34
如果你確定IIC通信沒(méi)有問(wèn)題,那么初始化序列有可能不對(duì),這個(gè)是可以proteus仿真的,你可以仿真一下就知道了。
作者:
726434632
時(shí)間:
2018-10-25 15:10
OLED模塊后面有幾個(gè)電阻是用來(lái)選擇通信方式的。你確認(rèn)是選中的IIC通信嗎???有的默認(rèn)是SPI通信
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1