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

📄 320240.c

📁 金鹏电子320x240液晶屏驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	lcddata = regnada;   
	lcdcs1_L; // chip enable.   
	lcden_H ; //
	lcdrs_L ; // rs = 0;  
	lcdrw_L ; // rw = 0;   
	delay(3);
	//asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
	//asm("nop");asm("nop");asm("nop");asm("nop");
	lcdrw_H ; // rw = 1; 
	lcdrs_H ; // rs = 1;  
	lcdcs1_H; // chip disable. 
} 
/*****************************************************************************************/
void lcd_datawrite(uchar wrdata) //写资料到DDRAM 
{   
    delay(30);
	lcddata = wrdata;   
	lcdcs1_L; // chip enable. 
	lcden_H; //  
	lcdrs_H; // rs = 1;   
	lcdrw_L; // wr = 0;
	delay(3);   
	//asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
	//asm("nop");asm("nop");asm("nop");asm("nop");
	lcdrw_H; // wr = 1; 
	lcdrs_H; // rs = 1;   
	lcdcs1_H; // chip disable. 
	} 
/*****************************************************************************************/ 
uchar lcd_regread(uchar regname) //读缓存器
{                         
  uchar reg_rddata;
  lcd_regwr(regname);
 // DDRD  = 0x00;          	//定义D口为输出
  lcddata = 0xff;
  lcdcs1_L; //PORTA&=~(1<<5); PORTA&=~(1<<5);               // chip enable.
  lcdrw_H; //PORTA|=(1<<3); PORTA|=(1<<3);                // wr = 1;
  lcdrs_L;//PORTA&=~(1<<2);PORTA&=~(1<<2);               // rs = 0;
  lcden_L;//PORTA&=~(1<<4); PORTA&=~(1<<4);                // rd = 0;
  asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
  reg_rddata = PORTC;
  lcden_H;//PORTA|=(1<<4); PORTA|=(1<<4);                 // rd = 1;
  lcdrs_H; //PORTA|=(1<<2); PORTA|=(1<<2);                // rs = 1;
  lcden_H; //PORTA|=(1<<5); PORTA|=(1<<5);                // chip disable. 
  //DDRD  = 0x00;          	//定义D口为输入
  return(reg_rddata);
}
/******************************************************************************************
uchar ReadDataFromDDRAM(uchar addr_x,uchar addr_y)//读DDRAM
{   
   uchar i;  //uchar RDDRAM;
    gotoxy(addr_x,addr_y);       
   for(i=0;i<8;i++)
  { lcddata =i;//gotoxy(addr_x,addr_y); 
    lcdcs1_L; //cs1 =0; 
    lcdrw_H;//wr = 1; 
    lcdrs_H;//rs = 1; 
    lcden_L;//rd = 0; 
     
      asm("nop");
    A[i] = lcddata;
    lcden_H;//rd = 1; 
    lcdrs_H; //rs = 1;
    lcdcs1_H;//lcd_cs1 =1; 
    return(i);
 } 
}
*/ 
/*****************************************************************************************/
extern void gotoxy(uchar x,uchar y) //指定液晶光标坐标
{                                
  lcd_regwrite(0x60,x); 
  lcd_regwrite(0x70,y); 
}
/*****************************************************************************************/
void lcd_reset(void) //液晶复位函数
{               
 delayms(120); // delay 120ms 等待上电复位
  PORTF = 0xff; 
} 
/*****************************************************************************************/
void lcd_init (void) //液晶初始化函数
{ port_init();
  lcd_regwrite(0x00,0xc9); // lcd控制寄存器:       正常文字模式
  lcd_regwrite(0x01,0xf2); // 中断与忙碌寄存器:    8M的晶振高电平触发
  lcd_regwrite(0x02,0x10); // ORM、RAM寄存器:      字体大小,水平一倍,垂直2倍
  lcd_regwrite(0x03,0x80); // 光标显示寄存器:      光标平移动、不自动
  lcd_regwrite(0x10,0x6b); // 光标指针寄存器:      自动移位。正常字体显示
  lcd_regwrite(0x11,0x00); // 光标高度与宽度:      默认
  lcd_regwrite(0x12,0x91); // 图形显示寄存器:      先水平后垂直
  lcd_regwrite(0x21,0x27); // 窗口显示寄存器:      右边位置(320*240)=(320/8)-1=39=27H
  lcd_regwrite(0x31,0xef); // 窗口显示寄存器:      底边位置(320*240)=240-1=239=EFH
  lcd_regwrite(0x41,0x00); // 窗口显示寄存器:      左边位置
  lcd_regwrite(0x51,0x00); // 窗口显示寄存器:      顶边位置   
  lcd_regwrite(0x20,0x27); // 工作窗口显示寄存器:  右边 (320*240)=(320/8)-1=39=27H
  lcd_regwrite(0x30,0xef); // 工作窗口显示寄存器:  底边(320*240)=240-1=239=EFH
  lcd_regwrite(0x40,0x00); // 工作窗口显示寄存器:  左边
  lcd_regwrite(0x50,0x00); // 工作窗口显示寄存器:  顶边
  lcd_regwrite(0x60,0x00); // 光标地址移位寄存器:  CPXR=00H          
  lcd_regwrite(0x61,0x00); // begin segment position register(bgsg)
  lcd_regwrite(0x70,0x00); // 光标地址移位寄存器:  CPYR=00H 
  lcd_regwrite(0x71,0x00); // 光标滚动其始地址:    00H
  lcd_regwrite(0x72,0xef); // 光标滚动结束地址:    EFH
  lcd_regwrite(0x80,0xaa); // 光标闪烁时间设定:=Bit[7....0]*1/Frame_Rate
  lcd_regwrite(0x81,0x00); // 保留:设定00H
  lcd_regwrite(0x91,0x00); // 保留:设定00H
  lcd_regwrite(0x90,0x06); // 屏幕周期更新设定:SCCR=(SCLK*DBW)/(Column*ROW*FRS)=(8MHz*4)/(320*240*70)
  lcd_regwrite(0xa0,0x11); // 中断寄存器:
  lcd_regwrite(0xa1,0x00); // key scan control register(kscr)            
  lcd_regwrite(0xa2,0x00); // key scan data register(ksdr)
  lcd_regwrite(0xa3,0x00); // key scan data expand register(kser)
  lcd_regwrite(0xb0,0x27); // 中断缓存器(intx)与CPXR相同发生中断
  lcd_regwrite(0xb1,0xef); // 中断缓存器(inty)与CPYR相同发生中断
  lcd_regwrite(0xc0,0x00); // 触摸功能寄存器(C0):
  lcd_regwrite(0xc1,0x0a); 
  lcd_regwrite(0xc8,0x80); 
  lcd_regwrite(0xc9,0x80); 
  lcd_regwrite(0xca,0x00); 
  lcd_regwrite(0xd0,0x80); 
  lcd_regwrite(0xe0,0x00);          
  lcd_regwrite(0xf0,0xa0); 
  lcd_regwrite(0xf1,0x0f); 
  /*port_init();                  
  lcd_regwrite(0x00,0xc9); // lcd控制寄存器:       正常文字模式
  lcd_regwrite(0x01,0xf2); // 中断与忙碌寄存器:    8M的晶振高电平触发
  lcd_regwrite(0x02,0x10); // ORM、RAM寄存器:      字体大小,水平一倍,垂直2倍
  lcd_regwrite(0x03,0x80); // 光标显示寄存器:      光标平移动、不自动
  lcd_regwrite(0x10,0x6b); // 光标指针寄存器:      自动移位。正常字体显示
  lcd_regwrite(0x11,0x00); // 光标高度与宽度:      默认
  lcd_regwrite(0x12,0x91); // 图形显示寄存器:      先水平后垂直
  lcd_regwrite(0x21,0x27); // 窗口显示寄存器:      右边位置(320*240)=(320/8)-1=39=27H
  lcd_regwrite(0x31,0xef); // 窗口显示寄存器:      底边位置(320*240)=240-1=239=EFH
  lcd_regwrite(0x41,0x00); // 窗口显示寄存器:      左边位置
  lcd_regwrite(0x51,0x00); // 窗口显示寄存器:      顶边位置   
  lcd_regwrite(0x21,0x27); // 窗口显示寄存器:      右边位置(320*240)=(320/8)-1=39=27H
  lcd_regwrite(0x31,0xef); // 窗口显示寄存器:      底边位置(320*240)=240-1=239=EFH
  lcd_regwrite(0x41,0x00); // 窗口显示寄存器:      左边位置
  lcd_regwrite(0x51,0x00); // 窗口显示寄存器:      顶边位置
  lcd_regwrite(0x21,0x27); // 窗口显示寄存器:      右边位置(320*240)=(320/8)-1=39=27H
  lcd_regwrite(0x31,0xef); // 窗口显示寄存器:      底边位置(320*240)=240-1=239=EFH
  lcd_regwrite(0x41,0x00); // 窗口显示寄存器:      左边位置
  lcd_regwrite(0x51,0x00); // 窗口显示寄存器:      顶边位置
  lcd_regwrite(0x20,0x27); // 工作窗口显示寄存器:  右边 (320*240)=(320/8)-1=39=27H
  lcd_regwrite(0x30,0xef); // 工作窗口显示寄存器:  底边(320*240)=240-1=239=EFH
  lcd_regwrite(0x40,0x00); // 工作窗口显示寄存器:  左边
  lcd_regwrite(0x50,0x00); // 工作窗口显示寄存器:  顶边
  lcd_regwrite(0x20,0x27); // 工作窗口显示寄存器:  右边 (320*240)=(320/8)-1=39=27H
  lcd_regwrite(0x30,0xef); // 工作窗口显示寄存器:  底边(320*240)=240-1=239=EFH
  lcd_regwrite(0x40,0x00); // 工作窗口显示寄存器:  左边
  lcd_regwrite(0x50,0x00); // 工作窗口显示寄存器:  顶边
  lcd_regwrite(0x20,0x27); // 工作窗口显示寄存器:  右边 (320*240)=(320/8)-1=39=27H
  lcd_regwrite(0x30,0xef); // 工作窗口显示寄存器:  底边(320*240)=240-1=239=EFH
  lcd_regwrite(0x40,0x00); // 工作窗口显示寄存器:  左边
  lcd_regwrite(0x50,0x00); // 工作窗口显示寄存器:  顶边
  lcd_regwrite(0x20,0x27); // 工作窗口显示寄存器:  右边 (320*240)=(320/8)-1=39=27H
  lcd_regwrite(0x30,0xef); // 工作窗口显示寄存器:  底边(320*240)=240-1=239=EFH
  lcd_regwrite(0x40,0x00); // 工作窗口显示寄存器:  左边
  lcd_regwrite(0x50,0x00); // 工作窗口显示寄存器:  顶边
  lcd_regwrite(0x60,0x00); // 光标地址移位寄存器:  CPXR=00H          
  lcd_regwrite(0x61,0x00); // begin segment position register(bgsg)
  lcd_regwrite(0x70,0x00); // 光标地址移位寄存器:  CPYR=00H 
  lcd_regwrite(0x71,0x00); // 光标滚动其始地址:    00H
  lcd_regwrite(0x72,0xef); // 光标滚动结束地址:    EFH
  lcd_regwrite(0x80,0xaa); // 光标闪烁时间设定:=Bit[7....0]*1/Frame_Rate
  lcd_regwrite(0x81,0x00); // 保留:设定00H
  //lcd_regwrite(0x81,0x0c); // 保留:设定00H
  lcd_regwrite(0x91,0x00); // 保留:设定00H
  lcd_regwrite(0x90,0x06); // 屏幕周期更新设定:SCCR=(SCLK*DBW)/(Column*ROW*FRS)
                                               //   =(8MHz*4)/(320*240*70)            
  lcd_regwrite(0xa0,0x11); // 中断寄存器:
  lcd_regwrite(0xa1,0x00); // key scan control register(kscr)            
  lcd_regwrite(0xa2,0x00); // key scan data register(ksdr)
  lcd_regwrite(0xa3,0x00); // key scan data expand register(kser)
  lcd_regwrite(0xb0,0x27); // 中断缓存器(intx)与CPXR相同发生中断
  lcd_regwrite(0xb1,0xef); // 中断缓存器(inty)与CPYR相同发生中断
  lcd_regwrite(0xc0,0x00); // 触摸功能寄存器(C0):
  lcd_regwrite(0xc1,0x0a); 
  lcd_regwrite(0xc8,0x80); 
  lcd_regwrite(0xc9,0x80); 
  lcd_regwrite(0xca,0x00); 
  lcd_regwrite(0xd0,0x80); 
  lcd_regwrite(0xe0,0x00); 
  //lcd_regwrite(0xf0,0xa0); 
   lcd_regwrite(0xf0,0xa4); 
  lcd_regwrite(0xf1,0x0f); 
	 /*30---基本指令动作
	lcd_regwrite (0x00,0xE9); 
  lcd_regwrite (0x21,0x27);
  lcd_regwrite (0x31,0xEF);
  lcd_regwrite (0x01,0x2A);
  lcd_regwrite (0x10,0x74);
  lcd_regwrite (0x90,0x06);
  lcd_regwrite (0x41,0x00);
  lcd_regwrite (0x51,0x00);
  lcd_regwrite (0x60,0x00);
  lcd_regwrite (0x70,0x00);
  lcd_regwrite (0xF0,0XA6);
  lcd_regwrite (0x00,0xCD);  /*30---基本指令动作*/ 
}
/*****************************************************************************************/   
void lcd_clear(void) //清屏LCD
{
	/*uchar reg_rddata;
  lcd_regwrite(0xe0,0x00);
  reg_rddata = lcd_regread(0xf0);
  reg_rddata |= 0x08;
  lcd_regwrite(0xf0,reg_rddata);
  */
  lcd_regwrite(0xE0,0x00);
  //lcd_regwrite(0x00,);//clear LCD DDRAM   
  lcd_regwrite(0xF0,0xa8);
  //gotoxy(0,0);
  //lcd_regwrite(0xA8);
  delay(300); 
}
/*****************************************************************************************/     
void lcd_photo(uchar const  *pho)  //全屏显示图形 绘图模式,正常显示,不反白
{                        
  uchar i,j,k;
  uchar const *pp;
// gotoxy(0,0); 
 //lcd_regwrite(0x12,0x11); 
  for(k=0;k<1;k++)//显示张数
  {                                             
     pp=pho;
     for(j=0;j<60;j++)
      {
      for(i=0;i<40;i++)
        { 
       lcd_datawrite(*pp);
        ++pp;
        }
      }
  }
}  
void lcd_lattice(uchar data1,uchar data2)
{                                    //显示点阵
  uchar i,j;
  gotoxy(0,0);
  for(j=0;j<60;j++)
  {
    for(i=0;i<80;i++)
    {
      lcd_datawrite(data1);
    }
    for(i=0;i<80;i++)
    {
      lcd_datawrite(data2);
    }
  }
}
/*****************************************************************************************/ 
void lcd_character(uchar const  *cha, uint count) //显示汉字或字符
{                                   
  int i;
  for(i=0;i<count;i++)
  {
    lcd_datawrite(*cha);
    ++cha; 
   }
}
/**************************************************
函数名称:PrintStr()
功    能:显示汉字或字符
入口参数:*ptr
出口参数:无
*****************************************************/ 

void PrintStr(uchar const *ptr,uint delay_time)
{
    while(*ptr != '\0')
	{
    lcd_datawrite(*ptr);
    ++ptr;
    delayms(delay_time);
    }
} 

void lcdhanzi(uchar x,uchar y,uchar const *ptr)
{
	  lcd_regwrite(0x00,0xCD);//
    gotoxy(x,y);
    while(*ptr != '\0')
	{
    lcd_datawrite(*ptr);
    ++ptr;
    //delayms(delay_time);
    }
} 
/*******************************************************
* 名称: PutStr
* 功能: 显示单个字符函数
* 入口参数: x   坐标定位x
*           y   坐标定位y
*           CharByte    字符串指针*ptr
* 出口参数: 无
*******************************************************/
void PutStr(unsigned char x,unsigned char y,unsigned char *ptr)
{
    lcd_regwrite(0x00,0xCD);//
    gotoxy(x,y);
    while(*ptr != '\0')
    {
        lcd_datawrite(*ptr);
        ++ptr;
    }
}


void lcd_show(uchar x,uchar y,uint var)
{
	uint i,j;
	lcd_regwrite(0x00,0xCD);
	gotoxy(x,y);
	i=var%1000;
	j=i%100;
	lcd_datawrite(ASCIITable[var/1000]);
	lcd_datawrite('.');
	lcd_datawrite(ASCIITable[i/100]);
	lcd_datawrite(ASCIITable[j/10]);
  lcd_datawrite(ASCIITable[j%10]);
}

void lcd_show1(uchar x,uchar y,uint var)
{
	uint i,j;
	lcd_regwrite(0x00,0xCD);
	gotoxy(x,y);
	i=var%1000;
	j=i%100;
	lcd_datawrite(ASCIITable[var/1000]);
	lcd_datawrite(ASCIITable[i/100]);
	lcd_datawrite('.');
	lcd_datawrite(ASCIITable[j/10]);
  lcd_datawrite(ASCIITable[j%10]);
}
/**************************************************
函数名称:PutBCD()
功    能:显示汉字或字符
入口参数:*p
出口参数:无
*****************************************************/ 
void PutBCD(unsigned char x,unsigned char y,unsigned char var)
{
    lcd_regwrite(0x00,0xCD);//
    gotoxy(x,y);			//坐标
    lcd_datawrite(ASCIITable[var / 10]);
    var = var%10;
    lcd_datawrite(ASCIITable[var]);
}
/*******************************************************
* 名称: PutBCDONE
* 功能: 在某位置显示数字函数
* 入口参数: x   坐标定位x
*           y   坐标定位y
*           var     单个数字asc码
* 出口参数: 无
*******************************************************/
void PutBCDONE(unsigned char x,unsigned char y,unsigned char var)
{
    lcd_regwrite(0x00,0xCD);//change to GB/ASCII mode
    gotoxy(x,y);
    lcd_datawrite(ASCIITable[var]);
}

⌨️ 快捷键说明

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