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

📄 0741.c

📁 nec的lcd,点阵为120x82,ic为:S6B0741X01-BOCY.驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************/
/*         MAIN PROGRAM FOR DEMOTOOL FOR SHARP          */
/*                1.01stn rohm         REVION A            */
/********************************************************/

#include <reg52.H>

#define tft19LCD 1
//#define atn13LCD 1

#define tft19LCDb8ud12
//#define tft19LCDb8ud17

#define baudrate38400
//#define baudrate19200
//#define baudrate9600

sfr FST    = 0xb6;
sfr T2MOD  = 0xc9;
sfr IP0    = 0xb8;
sfr IP0H   = 0xb7;
sfr IP1    = 0xf8;
sfr IP1H   = 0xf7;
sfr IEN0    = 0xa8;
sfr IEN1   = 0xe8;
sfr CCAP1H    = 0xfb;
sfr CCAP1L    = 0xeb;
sfr CCAPM1    = 0xdb;
sfr CCON    = 0xd8;
sfr CH      = 0xf9;
sfr CL    = 0xe9;
sfr CMOD    = 0xd9;
sfr AUXR    =0x8e;

#define true 1
#define false 0
#define key_mask 0x0f
#define block_mask 0x07
#define key_up 0x0e
#define key_down 0x0d
#define key_shift 0x0b
#define key_playpause 0x07
#define key_poweroff 0x0c
#define setup_sector 0x07
#define BLOCK_ADDR_MASK 0xf8
#define FLASH_START 0x00

char xdata LCDREG _at_ 0xDC00;
char xdata LCDDATA _at_ 0xDD00;
char xdata LCDREG_SUB _at_ 0xDA00;  //RS=L
char xdata LCDDATA_SUB _at_ 0xDB00;
char xdata LCDHBYTE _at_ 0xEF00;
char xdata AUXOUT _at_ 0xF700;
char xdata FLASH_5555 _at_ 0x5555;
char xdata FLASH_2AAA _at_ 0x2aaa;

sbit LCDcs=P1^6;
sbit Flashcs=P1^7;
sbit Led=P3^5;
sbit Dtr=P3^3;
sbit Dsr=P3^4;
sbit Bl1=P1^4;

unsigned char idata Auxdata;
unsigned char idata Bl_brightness;
unsigned char idata Block_addr;
unsigned char idata Contrast;
unsigned char idata Download_x;
unsigned char idata Picno;
bit Shift;
bit Power;
bit Partial;
bit DIP_TCK_STRING_FLAG;
bit pause;
bit chip_copy;
unsigned int  DPTR0; 
unsigned char PressKEY_counter;

void Cpu_init();
void Init_LCD();
void Init_SUB();
void Poweroff_main();
void Poweroff_sub();
void Key_int();
void Display_SUB(unsigned char block_addr);
void Pcam1_init();
void Hardreset();
void Chip_select_LCD();
void Chip_select_flash();
void Led_light(bit led);
void Led_flash(unsigned char cycle);
void Key_up_server();
void Key_down_server();
void Key_shift_server();
void Key_playpause_server();
void Auxdata_write(unsigned char data_mask,unsigned char auxa_data);
void Delayus(int value);
void Delayms(int value);
void CLR_Screen();
void black_Screen();
void poweroff();
void poweron();
void sleep_off();
void sleep_on();
void partial_display_on();
void partial_display_off();
void System_init();
void DIP_TCK_STRING();
void START4();
void START2();
void START3();
unsigned char code Image_Code1[];
unsigned char code Image_Code2[];


void main()
{
	FST=0X08;				//clock double disable
	AUXR=0x02;
	Bl_brightness=0;		//init bightlight
	Shift=1;
	Contrast=0x25;
    pause=0;

	Auxdata=0x08;
    //Power =1;
    //Partial=1;
	//PressKEY_counter=0;

	IEN0=0;
	Led_light(false);
	Init_LCD();
	System_init();
	Bl_brightness=255;		//init bightlight
	CCAP1H=255-Bl_brightness;     //set duty

 mloop1:
a1:while(pause==1) goto a1;	  
 DIP_TCK_STRING_FLAG=1;
   DIP_TCK_STRING(); 
	     Delayms(600);

a2:while(pause==1) goto a2;  			 
	     DIP_TCK_STRING_FLAG=0;
       DIP_TCK_STRING();

		 Delayms(500);	



a3:while(pause==1) goto a3;		 
START2();
         Delayms(600);
a0:while(pause==1) goto a0;	
CLR_Screen(); 	 
START3();
         Delayms(600);
a4:while(pause==1) goto a4;
 CLR_Screen(); 
START4();
   Delayms(600);
a5:while(pause==1) goto a5;
 CLR_Screen(); 

         Delayms(600);

a6:while(pause==1) goto a6;
          
black_Screen();
 
         Delayms(600);


	goto mloop1;
	
       //while(1);
 }


void System_init() 
{	
	unsigned char key;

	P1=P1|key_mask;
	key=P1&key_mask;
	switch (key)
    {    
		case key_mask:				//demonstation
		{						 
			Pcam1_init();
			IP0=0x01;              //proitity setup :external i0
			EX0=1;                 //open the io interrupt
			EA=1;
		IT0=1;	
		}
		break;
		default:                             //Block data receiver
		{									
		}
		break;
	}
}





//============================================================================================================



void Auxdata_write(unsigned char data_mask,unsigned char auxa_data)
{
	Chip_select_LCD();
	Auxdata=(Auxdata&data_mask)+auxa_data;
	AUXOUT=Auxdata;
}




//*****************************



void Pcam1_init()
{
	TMOD=0x02;            //timer 0 auto-loadmode
	TH0=256-8950000/6/51200;  //timer0=51.2kHz=50us
	TR0=true;
	CMOD=0x04;			//PCA's input :timer0:20kHz;pwm :51.2k/256=200Hz
    CCON=0x40;          //RUN the pca
	CCAPM1=0x42;		//PWM mode
	CCAP1H=255-Bl_brightness;     //set duty
}


//===========================================keyboard server begin
void Key_int() interrupt 0
{
	unsigned char key;
	EA=false;
	EX0=false;
	Delayms(10);
	P1=P1|key_mask;
	key=P1&key_mask;
	Delayms(5);
	if(key!=(P1&key_mask)) goto keyend;
	Delayms(5);
	if(key!=(P1&key_mask)) goto keyend;
   	switch(key)
	{
		case key_up: 
			break;
		case key_down: 
			break;
		case key_shift: 
			break;
		case key_playpause: Key_playpause_server();
			break;
		default: ;
	 }
keyend: Delayus(10);
	EA=true;
	EX0=true;
} 


void Key_playpause_server()
{
	pause=!pause;
	
}




/*void Key_playpause_server()
{
	unsigned int i;
	i = 0;
	PressKEY_counter++;
	if(PressKEY_counter==1)
	{
         Bl1=0;	poweroff();	  
	}
	else if(PressKEY_counter==2)
	{
        poweron();	
	}
    else if(PressKEY_counter==3)
	{
        sleep_on();
	}
    else if(PressKEY_counter==4)
	{
        sleep_off();
	}
    else if(PressKEY_counter==5)
	{
        partial_display_on();
	}
    else if(PressKEY_counter==6)
	{
       partial_display_off();
       PressKEY_counter=0;
	}

}*/


//===========================================keyboard server end

void Chip_select_flash()
{
	LCDcs=true;
    Flashcs=false;
} 



void Chip_select_LCD()
{	Flashcs=true;
    LCDcs=false;
} 

void Led_light(bit led)
{	
	Led=led;
}

void Led_flash(unsigned char cycle)
{	
ledflash:
	Led=true;
	Delayms(cycle*100);
	Led=false;
	Delayms(cycle*100);
	goto ledflash;
}
void Hardreset()                  /*lcd hardware reset*/
{
	Chip_select_LCD();
	Auxdata_write(0xf7,0x00);
	Delayms(10);
	Auxdata_write(0xf7,0x08);
	AUXOUT=Auxdata;
} 



void Delayus(int value)
{   
 	while(value)  value--;      /*delay 1us*/
}   
    
void Delayms(int value)
{   
 	int i;
 	for(i=0;i<value/2;i++)
 		{
  			Delayus(1000);         /*delay 1ms*/
 		}
}   
//=============================================================================================
void Init_LCD()              /*Initialize  LCD;Driver IC:*/
{
/************user application set up by internal instructions********/

      Hardreset();                   				//Lcd hardware reset
   	  Delayms(10);
	  Chip_select_LCD();	
   	  LCDREG=0xE2;   // ;SOFT RESET               
      LCDREG=0x48;         
      LCDREG=0x52;   //SET 82 DUTY       
      LCDREG=0xA0;    //;set adc=0 normal direction (seg0-->seg119)      
      LCDREG=0xC8;    //   ;set shl=1 reverse direction(com112-->com30)      
      LCDREG=0x44;    
      LCDREG=0x1e;    // set initial COM,  from com30       

/********set the LCD operating voltage by internal instructions********/           
      LCDREG=0xAB;      //  osciliator on     
      LCDREG=0x65;      //DC-DC set up regoster set 4 times boosting     
      LCDREG=0x25/*0x25*/;     //regulator resistor set  1+(Rb/Ra)=5.8   
      LCDREG=0x81; 
      LCDREG=0x18/*0x18*/;     // SET VALUE VOP=10.5V     
      LCDREG=0x54;     // LCD bias register set  bias=1/9     
      LCDREG=0x93;     // 4 FRC / 15 PWM 
      LCDREG=0x88;     // SET WHITE 1/2
      LCDREG=0x00;    
      LCDREG=0x89;     // SET WHITE 3/4
      LCDREG=0x00;    
      LCDREG=0x8A;     // SET LIGHT GRAY 1/1 
      LCDREG=0x55;   
      LCDREG=0x8B;     // SET LIGHT GRAY 3/4
      LCDREG=0x55;    
      LCDREG=0x8C;     // SET DARK GRAY 1/2
      LCDREG=0xAA;    
      LCDREG=0x8D;     // SET DARK GRAY 3/4
      LCDREG=0xAA;  
      LCDREG=0x8E;     // SET BLACK GRAY 1/2 
      LCDREG=0xFF;    
      LCDREG=0x8F;     // SET BLACK GRAY 3/4
      LCDREG=0xFF;      
	/********power control *******/
      LCDREG=0x2C;  // ;internal voltage convertor circuit is on          
      Delayms(5);
	  LCDREG=0x2E;  // ;internal voltage regulator circuit is on        
      Delayms(5);
	  LCDREG=0x2F;  // ;internal voltage follower circuit is on     
      Delayms(5);

      LCDREG=0xaf;  //display on
      CLR_Screen();	
 
}







 void display_Address_initial_set()
 {
    LCDREG=0x40; //set display line
	LCDREG=0x10; //set display line
	LCDREG=0x10; //----COLUMN ADDRESS HIGHER---//
	LCDREG=0x00; //----COLUMN ADDRESS HIGHER---//
	LCDREG=0x44; //set initial COM  
    LCDREG=0x1e; //set initial COM  

⌨️ 快捷键说明

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