?? 4506_8bit_ok.c
字號:
MRE=0;
MRE=0;
soop=P1;
MRE=1;
P1MDOUT=0xff;
return(soop);
}
//==============整塊擦除1塊=32pages 共2048塊====
uchar blockerase(uint block)
{
unsigned char result;
writecomd(0x60);
block=block*32;
P1=block&0x00ff;
MCLE=0;
MALE=1;
MWE=0;
MWE=0;
MWE=0;
MWE=1;
MWE=1;
MWE=1;
P1=(block&0xff00)>>8;
MWE=0;
MWE=0;
MWE=0;
MWE=1;
MWE=1;
MWE=1;
MCLE=0;
MALE=0;
writecomd(0xd0);
while(MR_B==0)
{
;
}
writecomd(0x70);
result=readsta();
if((result&0x01)== 1)
{
return(1);
}//出錯處理
else
return(0);
}
//==============整頁寫入的詳細代碼======
uchar pagewrite(uchar raddrl,uchar raddrh)
{
int i;
unsigned char result;
pointer = &buffer;
writecomd(0x00);//必須指出開始地址
writecomd(0x80);
writeaddr(raddrl,raddrh);
for(i=0;i<512;i++)
{
writedata();
}
writecomd(0x10);
while(MR_B==0)
{
;
}
writecomd(0x70);
result=readsta();
if((result&0x01) == 1)
{
return(1);
}//出錯處理
else
return(0);
}
//===============
//-----------------------------------------------------------------------------
// SYSCLK_Init
//-----------------------------------------------------------------------------
//
// This routine initializes the system clock to use the internal 24.5MHz / 8
// oscillator as its clock source. Also enables missing clock detector reset.
//
void SYSCLK_Init (void)
{
OSCICN = 0x80; // IOSCEN IFRDY 0 0 0 0 IFCN1 IFCN0 (sfr OSCICN=0xB2;內部振蕩器控制寄存器)
// IOSCEN=1 內部振蕩器使能;IFRDY=0/1 內部振蕩器未運行在編程頻率/內部振蕩器按編程頻率運行.
// IFCN1 IFCN0=00~11 8分頻 4 2 1分頻.
RSTSRC = 0x04; // 0 FERROR C0RSEF SWRSF WDTRSF MCDRSF PORSF PINRSF (sfr RSTSRC=0xEF;復位源寄存器)
// MCDRSF=0/1 禁止時鐘丟失檢測器/使能時鐘丟失檢測器;檢測到時鐘丟失條件時觸發復位.
}
//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------
//
// Configure the Crossbar and GPIO ports.
//
//
void PORT_Init (void)
{
//PCA0MD &= ~0xc0; // CIDL WDTE WDCLK 0 CPS2 CPS1 CPS0 ECF (sfr PCA0MD=0xD9;PCA0 MODE)
// CIDL=0/1 當系統控制器處于空閑方式時,PCA 繼續正常工作/當系統控制器處于空閑方式時,PCA 停止工作.
// WDTE=0/1 看門狗定時器被禁止/PCA 模塊4 被用作看門狗定時器.
// WDCLK=0/1 對看門狗定時器使能位解鎖/鎖定看門狗定時器使能位(當WDCLK 被置‘1’時,在發生下一次系統復位之前將不能禁止WDT).
// CPS2-CPS0=000 系統時鐘的12分頻 001 系統時鐘的4 分頻 010 定時器0 溢出 011 ECI 負跳變(最大速率= 系統時鐘頻率/4)100 系統時鐘 101 外部時鐘的8 分頻.
// ECF=0/1 禁止CF中斷/當CF(PCA0CN.7)被置位時,允許PCA 計數器/定時器溢出的中斷請求.
// disable watchdog timer
// WDTE = 0 (clear watchdog timer enable)
PCA0MD = 0x00;
//============================================================
XBR0 = 0x00; // CP1AE CP1E CP0AE CP0E SYSCKE SMB0E SPI0E URT0E (sfr XBR0=0xE1;端口I/O 交叉開關寄存器0)
// no digital peripherals selected
XBR1 = 0x40; // WEAKPUD XBARE T1E T0E ECIE PCA0ME(3位) (sfr XBR1=0xE2;端口I/O 交叉開關寄存器1)
// WEAKPUD=0 弱上拉使能;XBARE=1 交叉開關使能;T1E=0 T1不連到端口引腳;T0E=0 T0不連到端口引腳.
// ECIE(PCA0 外部計數輸入使能位)=0 ECI不連到端口引腳;PCA0ME=000 所有的PCA I/O 都不連到端口引腳.
// Enable crossbar and weak pull-ups
P3MDOUT |= 0x1e; // 000 P3MDOUT[4:0](P3.4–P3.0 輸出方式配置位) (sfr P3MDOUT=0xA7;端口3輸出方式寄存器)
// P3MDOUT[4:0]=0/1 對應的P3.n 輸出為漏極開路/對應的P3.n 輸出為推挽方式.
// enable LED as a push-pull output
P2MDOUT |= 0xff;
P1MDOUT |= 0xff;
P0MDOUT |= 0x01;
}
//-----------------------------------------------------------------------------
/*初始化*/
//========================================
uchar code ini[]={
0x10, //Driver Output Mode Set============================================(10h)
0x02, //00 DLN 0 SDIR SWP 0(DLN=00 1/132Duty 01 1/144Duty 10 1/162Duty 11 1/96Duty)(SDIR=0 SEG0->SEG131 1 SEG131->SEG0)(SWP=0 RGB(SEGA~SEGC) 1 BGR)
0x20, //DC-DC Select======================================================(20h)
0x0a, //0000 DC(2) DC(1)(DC(2)=00 x1.0 01 x1.5 10 x2.0 11 x2.0/In partial mode1)(DC(1)=00 x1.0 01 x1.5 10 x2.0 11 x2.0/In normal mode,partial mode0)
//0x05,
0x22, //Bias Set==========================================================(22h)
0x02, //00 Bias(2) 00 Bias(1)(Bias(2)=00 1/4 x(-3) 01 1/5 x(-4) 10 1/6 x(-4) 11 1/7 x(-5)/In partial mode1 2nd boosting step)(Bias(1)=00 1/4 x(-3) 01 1/5 x(-4) 10 1/6 x(-4) 11 1/7 x(-5)/In normal mode,partial mode0 2nd boosting step)
//0x11,
0x24, //DCDC Clock Division Set===========================================(24h)
0x11, //00 DIV(2) 00 DIV(1)(DIV(2)=00 fPCK=fOSC/4 01 fOSC/8 10 fOSC/16 fOSC/32/In partial mode1)(DIV(1)=00 fPCK=fOSC/4 01 fOSC/8 10 fOSC/16 fOSC/32/In normal mode,partial mode0)
0x2a, //Contrast Control(1)In normal mode,partial mode0===================(2ah)
0x93, //0x00~0xff(2.0V~4.0V)
0x2b, //Contrast Control(2) In partial mode1==============================(2bh)
0x0e, //0x00~0xff(2.0V~4.0V)
0x2e, //DDRAM Burst Mode OFF/ON(2fh)======================================(2eh)
0x30, //Addressing Mode Set===============================================(30h)$$$$$$$$$$0x10
0x10, //0 GSM DSG SGF SGP SGM(GSM=00 65k color 01 4k color)(DSG=0 Dummy subgroup is one subgroup 1 none/Duty Adjust Set)(SGF=0 SG Frame inversion OFF 1 ON/Sub Group Frame Inversion mode Set)(SGP=00 Same phase in all pixels 01 Different phse by 1pixel-unit 10 2pixel-unit 11 4pixel-unit/Sub Group Phase mode Set)(SGM=0 SG inversion OFF 1 ON/Sub Group inversion mode Set)
0x32, //Row Vector Mode Set===============================================(32h)
0x00, //0000 INC VEC(INC=000 Every subgroup 001 Every 2subgroup 010 4 8 16 16 16 111 Every subframe/Row Vector Increment Mode)(VEC=0 R1->R2->R3->R4->R1 1 R1->R3->R2->R4->R1/ROW Vector Sequence Mode)
0x34, //N-block inversion Set=============================================(34h)$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
0x83, //FIM FIP 0 N-block inversion(FIM=0 Forcing Inversion OFF 1 ON)(FIP=0 Forcing Inversion Period if one frame 1 two frames)(N-block=00000 every frame 00001 every 1 blocks .................)
0x36, //Frame Frequency Control===========================================(36h)
0x00, //0000000 LFS(LFS=0 Low Frequency set OFF 1/ON)
0x40, //Entry Mode Set====================================================(40h)
0x00, //0000 HL MDI X/Y RMW(HL=0 Not exchanged status 1 exchanged /16-bit in display data write/read)(MDI=0 Memory data inversion OFF 1 ON)(X/Y=0 SEG address counter mode 1 COM)(RMW=0 Read modify write OFF 1 ON)
0x42, //X(COM)Address Area Set============================================(42h)
0, //x(COM) start address set(0~161)
127, //x(COM) end address set(0~161)
0x43, //Y(SEG)Address Area Set============================================(43h)
0, //y(SEG) start address set(0~131)
127, //y(SEG) end address set(0~131)
0x45, //RAM Skip Area Set=================================================(45h)
0x00, //0000000 RSK(RSK=00 No Skip 01 Y address 40h-43h skip 10 Y address 3ch-47h skip 11 Reserved)
0x53, //Specified Display Pattern Set=====================================(53h)
0x00, //000000 SDP(SDP=00 Normal display 01 Reverse display 10 Whole display OFF 11 Whole display ON)
0x55, //Partial Display Mode Set==========================================(55h)
0x00, //000000 PDM PT(PDM=0 Partial mode0 Duty is same normal display mode PDM=1 Partial mode1 DSG=0 69 lines DSG=1 66 lines)(PT=0 Partial display OFF 1 ON)
0x56, //Partial Display Start Line Set====================================(56h)
0,
0x57, //Partial Display End Line Set======================================(57h)
60,
0x59, //Area scroll Set===================================================(59h)
0x00, //000000 SCM(SCM=00 Entire display 01 Upper scroll display 10 Lower scroll displya 11 Center scroll display)
0, //Scroll area start line
127, //Scroll area end line
0, //Lower fixed number
0x5a, //Scroll Start Line Set=============================================(5ah)
0, //Scroll start line
0x61, //Data Format Select(0110000 DFS)===================================(60h)
};
//==================================================
void format(void)
{
uchar i;
for(i=0;i<47;)
{
wr_com8080(ini[i]);
i=i+1;
}
coordinate(0,0);
}
//===========================================================
void donghua1(void)
{
//=========================
for(kk=0;kk<8;kk++)
{
for(jj=0;jj<64;jj++)
{
writecomd(0x00);//必須指出開始地址
writeaddr(((kk*64+jj)&0x00ff),((kk*64+jj)&0xff00)>>8);
P1=0xff;
while(MR_B==0)
{
;
}
for(ii=0;ii<256;ii++)
{
MRE=0;
WR=0;
WR=1;
MRE=1;
MRE=0;
WR=0;
WR=1;
MRE=1;
}
}
pic_wait(1000);
}
}
//===========================================================
void donghua2(void)
{
for(kk=0;kk<922;kk++)
{
for(jj=0;jj<64;jj++)
{
writecomd(0x00);//必須指出開始地址
writeaddr(((kk*64+512+jj)&0x00ff),((kk*64+512+jj)&0xff00)>>8);
P1=0xff;
while(MR_B==0)
{
;
}
for(ii=0;ii<256;ii++)
{
MRE=0;
WR=0;
WR=1;
MRE=1;
MRE=0;
WR=0;
WR=1;
MRE=1;
}
}
key_wait(wait_value);
}
}
//===========================================================
void donghua3(void)
{
for(kk=0;kk<8;kk++)
{
for(jj=0;jj<32;jj++)
{
writecomd(0x00);//必須指出開始地址
writeaddr(((kk*32+60288+jj)&0x00ff),((kk*32+60288+jj)&0xff00)>>8);
P1=0xff;
while(MR_B==0)
{
;
}
for(ii=0;ii<256;ii++)
{
MRE=0;
MRE=1;
WR=0;
WR=1;
MRE=0;
WR=0;
WR=1;
MRE=1;
}
}
key_wait(wait_value);
}
}
//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
void main (void)
{
autorun0=0;
SYSCLK_Init (); // Initialize system clock to 24.5MHz
PORT_Init (); // Initialize crossbar and GPIO
//==========================
LED=1;
CS1=0;
otp_value=0x8f;
wait_value=60;
//=========================================================================================
DelayX1ms(50);
wr_com8080(0x00);
//================OTP_MODE OFF==============
//wr_com8080(0xea);
//==============================
//wr_com8080(0xed);
//wr_com8080(0x0f);
//================Temp.====================
wr_com8080(0x28);
wr_com8080(0x02);
//================Standby mode off===========
wr_com8080(0x2c); //All common and segment output:VSS or V1
DelayX1ms(20);
//================OSC ON ===========
wr_com8080(0x02); //Oscillation Mode Set
wr_com8080(0x01); //000000 EXT OSC(EXT=0 Internal clock)(OSC=1 Internal oscillator ON)
DelayX1ms(20);
//================DCDC1 ON=====
wr_com8080(0x26); //DC/DC and AMP ON/OFF Set
wr_com8080(0x01); //0000 AMP DCDC3 DCDC2 DCDC1
//================AMP ON=====
wr_com8080(0x26); //DC/DC and AMP ON/OFF Set
wr_com8080(0x09); //0000 AMP DCDC3 DCDC2 DCDC1
//================DCDC2 ON=====
wr_com8080(0x26); //DC/DC and AMP ON/OFF Set
wr_com8080(0x0b); //0000 AMP DCDC3 DCDC2 DCDC1
//================DCDC3 ON=====
wr_com8080(0x26); //DC/DC and AMP ON/OFF Set
wr_com8080(0x0f); //0000 AMP DCDC3 DCDC2 DCDC1
//================
format();
DelayX1ms(20);
//================Diaplay ON===============
wr_com8080(0x51); //Turns the display ON
//=====================================
reset();
//======初始化完畢加快運行速度=========
OSCICN = 0x83; // IOSCEN IFRDY 0 0 0 0 IFCN1 IFCN0 (sfr OSCICN=0xB2;內部振蕩器控制寄存器)
DelayX10ms(100);
while(1)
{
//=========================
wr_com8080(0x42);
wr_com8080(0); //page(row)
wr_com8080(127);
wr_com8080(0x43);
wr_com8080(0); //colomn
wr_com8080(127);
autorun0=0;
RS=1;
while(1)
{
donghua2();
if(kk==1001)
goto nexta;
}
nexta:
RS=1;
autorun0=0;
while(1)
{
donghua1();
if(kk==1001)
goto nextb;
}
nextb:
/*for(jj=0;jj<64;jj++)
{
P1=0x00;
for(ii=0;ii<256;ii++)
{
WR=0;
WR=1;
WR=0;
WR=1;
}
}
//=========================
wr_com8080(0x42);
wr_com8080(32); //page(row)
wr_com8080(95);
wr_com8080(0x43);
wr_com8080(0); //colomn
wr_com8080(127);
autorun0=0;
RS=1;
while(1)
{
donghua3();
if(kk==1001)
goto nextc;
}
nextc:*/
;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -