⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4506_8bit_ok.c

📁 C8051F单片机应用和液晶显示器编程的例子
💻 C
📖 第 1 页 / 共 2 页
字号:
 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 + -