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

📄 lcd_screen_driver.c

📁 自己写的测试程序,调试已通过,可以直接使用, 而且有的还有详细的注释.红外测试软件
💻 C
字号:
#include<w78e58b.h>


sbit employ=P2^0; 
   sbit read_write=P2^7;
sbit data_injunction=P2^6;
sbit piece_left=P2^5;
 sbit piece_right=P2^4;
void write_byte(bit piece,unsigned char x,unsigned char y,unsigned char d[]);


/*************    write left lcd screen   **********************/
void write_left_injunction(unsigned char d)
{ 
  signed char x;
  piece_left=1;       
  read_write=1;                   // 1:read,0:write
  data_injunction=0;              // 1:data, 0:injunction
 loop1:
  lcd_data=0xff;
  employ=1;
  x=lcd_data;
  employ=0;
  if(x&0x80)
    { goto loop1;}
   read_write=0;
   lcd_data=d;
   employ=1;
   employ=0;
   piece_left=0;
   piece_right=0;
   }
/**************   write right lcd screen  ************************/
void write_right_injunction(unsigned char d)
{  
  signed char x;
  piece_right=1;       
  read_write=1;                   // 1:read,0:write
  data_injunction=0;              // 1:data, 0:injunction
 loop2:
  lcd_data=0xff;
  employ=1;
  x=lcd_data;
  employ=0;
  if(x&0x80)
    { goto loop2;}
   read_write=0;
   lcd_data=d;
   employ=1;
   employ=0;
   piece_left=0;
   piece_right=0;
   }
/**************  send left lcd screen dispaly data **************/
void write_left_data(unsigned char d)
{
 signed char x;
 piece_left=1;                   // employ left lcd screen
 read_write=1;                   // write data
 data_injunction=0;              // send injunction
 loop1:
    lcd_data=0xff;
    employ=1;
    x=lcd_data;
    employ=0;
   if(x&0x80)
      {goto loop1;}
  data_injunction=1;
  read_write=0;
  lcd_data=d;
  employ=1;
  employ=0;
  piece_left=0;
  piece_right=0;
  }
/**************  send right lcd screen dispaly data **************/
void write_right_data(unsigned char d)
{
 signed char x;
 piece_right=1;                   // employ left lcd screen
 read_write=1;                   // write data
 data_injunction=0;              // send injunction
 loop1:
    lcd_data=0xff;
    employ=1;
    x=lcd_data;
    employ=0;
   if(x&0x80)
      {goto loop1;}
  data_injunction=1;
  read_write=0;
  lcd_data=d;
  employ=1;
  employ=0;
  piece_left=0;
  piece_right=0;
  }
  
/***************  delay time ***********************************/
void delay_time(unsigned int i)
 {
   unsigned char j;
   for(;i>0;i--)
     { for(j=0;j<100;j++)
        {;}
	 }
}
/************   clear_lcd_screen  ********************************/
void clear_lcd_screen(void)
 {


unsigned char lcd_page;
  unsigned  char i,j;
  
  delay_time(0);                      //must delay time
  
  for(i=0;i<8;i++)
  { 
    lcd_page=i|0xb8;
       write_left_injunction(lcd_page);
       write_left_injunction(0x40|i);
    for(j=0;j<64;j++)
      {
	  
       write_left_data(0x00);
       
	   }
   }
  for(i=0;i<8;i++)
  {
    lcd_page=i|0xb8;
    write_right_injunction(lcd_page);
    write_right_injunction(0x40);
  for(j=0;j<64;j++)
     {
       write_right_data(0x00);
      }
   }
 }
 
/************   initialization led screen ************************/
void initialization_led_screen(void) 
{
 lcd_data=0x00;
 employ=0;
 read_write=0;
 data_injunction=0;
 piece_left=0;
 piece_right=0;
 write_left_injunction(0x3e);          // off lcd left screen
 write_right_injunction(0x3e);         // off lcd right screen
 write_left_injunction(0xc0);          // left part row address select 2^6
 write_right_injunction(0xc0);          // right part row address select 2^6
 clear_lcd_screen();
 write_left_injunction(0x3f);          // on lcd left screen
 write_right_injunction(0x3f);         // on lcd right screen
 }
/********************  write a Byte  ******************************************************/

void write_byte(bit piece,unsigned char x,unsigned char y,unsigned char d[])  // 0:left,1:right
 {
   unsigned char i,j,q;                                               // x less than or equal to 6
   unsigned char *da;                                               // y less than or equal to 56
       da=d;                               // x for even
       x|=0xb8;                              // page address
       y|=0x40;
   if(!piece)
   {                                   // row
   for(i=0;i<2;i++)
     {   
     q=0;
     for(j=0;j<8;j++)
	   {   
               if((y+j)<128)
			 {
                 write_left_injunction(x+i);     
                 write_left_injunction(y+j);
		         write_left_data(*da);}
				 
				 if((y+j)>=128)
				 {  
				 write_right_injunction(x+i);
				 write_right_injunction(q+64);
				 write_right_data(*da);q++;}
				 da++;
				 }
              }
	   }
   else
   {
   for(i=0;i<2;i++)
    {  
	 write_right_injunction(x+i);
     write_right_injunction(y);
     for(j=0;j<8;j++)
       {  
         write_right_data(*da);
	     da++;
        }   
     }
    }  
 }
/************** write a word    ***********************************************/
void write_word(bit piece,unsigned char x,unsigned char y,unsigned char d[])
{
  unsigned char *da;
  unsigned char i,j,p;
  unsigned char word[2][16];                                     
  da=d;  
 for(i=0;i<2;i++)
  { for(j=0;j<16;j++)
     {
	  word[i][j]=*da;
	  da++;
	  }
	 } 
 write_byte(piece,x,y,&word[0]);
    p=y+8;  if(p>=64)
	        {y=p-72;piece=1;p=0;}
 write_byte(piece,x,y+8,&word[1]);
 }


⌨️ 快捷键说明

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