gy1206f6.c

来自「STN ST7920 TEST CODE AND SPEC.」· C语言 代码 · 共 195 行

C
195
字号
// ST7920 128*64 2003.3.25 
#include <reg52.h>
#include <delay.c>

#define Uchar unsigned char

sbit RS=P3^6;
sbit RW=P3^0;
sbit E =P3^5;
sbit RES=P3^7;
void ComWrite(Uchar com);
void DatWrite(Uchar dat);
void Initial(void);
void Disp(Uchar,Uchar); 
void DispChar(Uchar,Uchar);
void DispBmp(Uchar *); 
void DispRow(Uchar,Uchar);
Uchar c1=0xb0;
Uchar c2=0xa0; 
extern char code w[];                                                                            
void main(void)
 {
   Initial();
  
   while(1)
   { 
     ComWrite(0x01);  //DDRAM clear
     delay(200);   
     DispRow(0x0ff,0);//display com line
     delay(200);
     DispRow(0x00,0x0ff);//display com line
     delay(200);
     Disp(0xaa,0xaa);//display seg line
     delay(200);
     Disp(0x55,0x55);//display seg line
     delay(200);
     DispRow(0xaa,0x55);//display snower
     delay(200);
     DispRow(0x55,0xaa);//display snower
     delay(200);
     Disp(0x00,0x00);//no display
     delay(200);
     DispChar(0xb0,0xc0);//display Chinese
     delay(200);
     DispChar(0xc0,0xbc);//display Chinese
     delay(200);
     DispChar(0xb7,0xe6);//display Chinese
     delay(200);
     DispChar(0xc3,0xf7);//display Chinese
    
   }

}
 
void DispBmp(Uchar *p)
{
   Uchar HorAdd=0x80;
   Uchar VerAdd=0x80;
   ComWrite(0x04);    // I/D =0
     for(;VerAdd<0x80+32;VerAdd++)
   { 
      ComWrite(0x34);    // RE=1;
      ComWrite(0x36);    // Graphics=1;

      ComWrite(VerAdd);
      ComWrite(0x80);
      ComWrite(0x32);    // RE=0;                       
    
      for(HorAdd = 0; HorAdd <0x0f; HorAdd++) 
      {DatWrite(*p++);DatWrite(*p++);}//{DatWrite(Updat);DatWrite(Dndat);}
   } 

   delay(10000);
   ComWrite(0x30);    // RE=0;

 }

void Disp(Uchar dot1,Uchar dot2)
 {
  Uchar HorAdd=0x80;
  Uchar VerAdd=0x80;

  for(;VerAdd<0x80+32;VerAdd++)
   { 
      ComWrite(0x34);    // RE=1;
      ComWrite(0x36);    // Graphics=1;

      ComWrite(VerAdd);
      ComWrite(0x80);
      ComWrite(0x32);    // RE=0;
    
      for(HorAdd = 0; HorAdd <0x0f; HorAdd++)
        {
        DatWrite(dot1);DatWrite(dot1);
        DatWrite(dot2);DatWrite(dot2);
        }
   } 

   delay(10000);
   ComWrite(0x30);    // RE=0;
}
void DispRow(Uchar dot1,Uchar dot2)
 {
 Uchar HorAdd=0x80;
 Uchar VerAdd=0x80;
 Uchar Temp=0;
 bit flag=1;

  for(;VerAdd<0x80+32;VerAdd++)
   { 
      ComWrite(0x34);    // RE=1;
      ComWrite(0x36);    // Graphics=1;

      ComWrite(VerAdd);
      ComWrite(0x80);
      ComWrite(0x30);    // RE=0;
     
     if (flag==1)
     { 
       Temp = dot1;
       flag=0;
     }
     else 
     {
       Temp = dot2;
       flag=1;
     }
      for(HorAdd = 0; HorAdd <0x0f; HorAdd++)
        {
        DatWrite(Temp);DatWrite(Temp);
        DatWrite(Temp);DatWrite(Temp);
        }
   } 

   delay(10000);
   ComWrite(0x30);    // RE=0;
 } 
void DispChar(Uchar Updat,Uchar Dndat) 
 {                   
   Uchar cnt=0;
   ComWrite(0x04);    // I/D =0
//   ComWrite(0x02);
   ComWrite(0x9f);     // SET DDRAM  00  TO AC 
   for(c1++,cnt=0;c1<0xf7,cnt<32;cnt++) 
   {DatWrite(c1);DatWrite(c2++);}
   {DatWrite(Updat);DatWrite(Dndat);}
   delay(10000);
 } 

void Initial()
{  
  delay(500);
  RES  =0;
  delay(100);
  RES  =1;
  delay(500);

  ComWrite(0x30);	//Function set  00 1 DL : x RE G 0 	 
  ComWrite(0x30);	//Function set  00 1 DL : x RE G 0
  ComWrite(0x0c);    // 0000 : 1 D C B ;display on
  
  ComWrite(0x34);  // RE=1  Function set
  
  ComWrite(0x0c);	// sleep mode off 
  ComWrite(0x02);	// enable CGRAM 	 

  ComWrite(0x30);  // RE =0;Function set
  ComWrite(0x06);	// I/D=1
  delay(150);	
	  
 }
  
void DatWrite(Uchar dat)
{
 
 RS  =1;
 RW =0;
 E   =1; 
  P1  =dat;
 delay(0);
 E   =0;
 delay(0);
}
void ComWrite(Uchar com)
{

 RS  =0;
 RW =0;
 E   =1;
 P1  =com;
 delay(0);
 E   =0;
 delay(0);
}                    

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?