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

📄 lcd.txt

📁 用mega128 驱动的320*240 程序。可移植性强。
💻 TXT
字号:
// Crystal: 8.0000Mhz
#include <iom128v.h>
#include <macros.h>

#define xtal  8  
/********************************************************
液晶控制管脚;
CS1-PC0;RS-PC1;RD-PC2;
WR-PC3;BUSY-PG0;DB0~DB7--PB0-PB7; 
*////////////////////////////////////////////////////////
//定义分频比256
#define BUSY   0
#define uint unsigned int
#define uchar unsigned char

//LCD 初始化定义
#define WLCR 0X00
#define MISC 0X01
#define ADSR 0X03
#define WCCR 0X10
#define CHWI 0X11
#define AWRR 0X20
#define DWWR 0X21
#define	AWBR 0X30
#define	DWHR 0X31
#define AWLR 0X40
#define AWTR 0X50
#define	CURX 0X60
#define	BGSG 0X61
#define	EDSG 0X62
#define	FVHT 0XF1
#define	FNCR 0XF0
#define PNTR 0XE0
#define CURY 0X70
#define MAMR 0X12
#define MWCR 0XB0
#define INTR 0X0F
#define BTMR 0X80
#define KSCR1 0XA0
//函数声明
void delay_1ms(void);   //延时1ms
void delay_1us(void); //延时1us
void delay_nms(uint n); //延时n ms
void delay_nus(uint n);//延时n us
void LcdDataWrite(uint data);
void CLRVRAM(void);
void CLRSCREEN(void);
void INITLCD(void);
void SetCursor(uchar X,uchar Y);
void WLCDCHR(uchar x,uchar y,uchar *p );
void init_sys(void);

void init_sys(void)
{
 DDRA=0XF8;
 PORTA=0XFF;
 DDRB=0XFF;
 PORTB=0X00;
 DDRD=0XFF;
 PORTD=0X00; 
 DDRC=0X0F;
 PORTC=0X00;
 DDRE=0X00;
 PORTE=0XFF;
}

void delay_1ms(void)   //延时1ms
{
uint i;
for (i=1;i<(8*143-2);i++);
}
//////////////////////////////////////////////
void delay_1us(void) //延时1us
{asm("nop");
}
///////////////////////////////////////////////////////
void delay_nms(uint n) //延时n ms
{uint i=0;
for (i=0;i<n;i++)
delay_1ms();
}

//////////////////////////////////////////////////////
void delay_nus(uint n)//延时n us
{ 
   uint i=0;
  for (i=0;i<n;i++)
       delay_1us();
}
///////////////////////////////////////////////////
/****************************************************************************
* 名称:WLCDCOM
* 功能:写LCD控制命令
* 入口参数:com
* 出口参数:无
****************************************************************************/
void LcdCommand(uint com) 
//写LCD控制命令
{
	
	PORTC|=0X02;   //RS=1
	PORTC&=0XFE;  //CS=0
	
	//PORTC|=0X08;  //WR=1
	PORTC|=0X04;  //RD=1
	//asm("nop");
	PORTB=com;
	PORTC&=0XF7;  //WR=0
	asm("nop");
	PORTC|=0X08;  //WR=1
	asm("nop");
	PORTC|=0X01;  //CS=1
}

/****************************************************************************
* 名称:WLCDDATA
* 功能:写LCD控制参数和显示字符数据
* 入口参数:ref
* 出口参数:无
****************************************************************************/
void LcdDataWrite(uint data)
//写LCD控制参数和显示字符数据
{
	//SEDWRDAT=ref;
	//_nop_();	
	//DDRC|=0X0F;
	//DDRD==0XFF;
	PORTC&=0XFD;   //RS=0
	PORTC&=0XFE;  //CS=0
	PORTC|=0X04;  //RD=1
	PORTB=data;
	PORTC&=0XF7;  //WR=0
	asm("nop");
	PORTC|=0X08;  //WR=1
	asm("nop");
	PORTC|=0X01;  //CS=1
}



/****************************************************************************
* 名称:CLRSCREEN
* 功能:清除显示屏幕
* 入口参数:无
* 出口参数:无
****************************************************************************/
void CLRSCREEN(void)
//清除显示屏幕
{
	uint i,j;
	//BYTE a;
	LcdCommand(FNCR);
	LcdDataWrite(0X08);
	LcdCommand(PNTR);
	LcdDataWrite(0x00);
	LcdCommand(MWCR);
	for(i=0;i<4500;i++)   //9600
	{   //LcdCommand(PNTR);
		LcdDataWrite(0x00);
	}
}

void CLRVRAM(void) 
//显示存储器清零
{
	int i,j;
	
	LcdCommand(FNCR);
	LcdDataWrite(0x88);
	LcdCommand(PNTR);
	LcdDataWrite(0x00);
	LcdCommand(MWCR);
	for(i=0;i<=0xff;i++)
	{
		for(j=0;j<=0xff;j++)
		{   //LcdCommand(PNTR);
			LcdDataWrite(0x00);
		}
	}
}


//LCD初始化函数
//#define LcdCommand XBYTE[0x7f01]    //1335CS--->P2.7,   A0=1
//#define LcdDataWrite XBYTE[0x7f00]  //1335A0--->ADDR0   A0=0

////////////////初始化LCD函数/////////////////////
void INITLCD(void) 
//初始化LCD显示参数以及界面
{
	
	//}
	LcdCommand(WLCR);
	LcdDataWrite(0X0D);
	LcdCommand(MISC);
	LcdDataWrite(0X84);
	LcdCommand(ADSR);
	LcdDataWrite(0X80);
    //CLRVRAM();
	LcdCommand(WCCR);
	LcdDataWrite(0X16);
	//CLRVRAM();
	LcdCommand(CHWI);
	LcdDataWrite(0X50);
    //CLRVRAM();
	//LcdCommand(AWRR);
	//LcdDataWrite(0X00);
	//LcdCommand(DWWR);
	//LcdDataWrite(0X27);
	//LcdCommand(AWBR);
	//LcdDataWrite(0X00);

    //LcdCommand(DWHR);
	//LcdDataWrite(0XEF);
	//LcdCommand(AWLR);
	//LcdDataWrite(0X00);
	//LcdCommand(AWTR);
	//LcdDataWrite(00);
    LcdCommand(FNCR);
	LcdDataWrite(0X8B);
    LcdCommand(FVHT);
	LcdDataWrite(0X00);
    //LcdCommand(PNTR);
	//LcdDataWrite(0X00);
    LcdCommand(CURY);
	LcdDataWrite(0X00);
    LcdCommand(MAMR);
	LcdDataWrite(0X17);
    //LcdCommand(PNTR);
	//LcdDataWrite(0X00);
    LcdCommand(BTMR);
	LcdDataWrite(0X10);
    LcdCommand(KSCR1);
	LcdDataWrite(0X00);
}
//在对LCD进行初始化之后,即可在任意指定位置显示任意图形或字符,下面是一段在指定位置显示汉字的程序:
////////设定光标,允许显示///////
void SetCursor(uchar X,uchar Y)
{        uchar x[]={0,20,40,60,80,100,120,140,160,180,200,220};
	     //uchar y[]={0,2.5,5,7.5,10,12.5,15,17.5,20,22.5,25,27.5,30,32.5,
		  //             35,37.5};
		//LcdDataWrite(0X0D); 
        //delay_nus(0x09);
        LcdCommand(0X70);
		LcdDataWrite(x[X]);//设定光标y坐标;X<224
		LcdCommand(0x60);         // 设定光标位置命令
        LcdDataWrite(Y-1);           //设定光标x坐标; Y<39
        LcdCommand(0xB1);
}

/****************************************************************************
* 名称:WLCDCHR
* 功能:显示32×32字符
* 入口参数:...
* 出口参数:无
****************************************************************************/
void WLCDCHR(uchar x,uchar y,uchar *p )
//功能:显示32 ×32字符,num为要显示字符数组的第一维的值
//x坐标寄存器(字节),y坐标寄存器(点行)
{ 
	   
	    //delay_nms(50);
		while(y<39&&((*p)!='\0'))
		{
		
		SetCursor(x,y-1);
		LcdCommand(MWCR);
			LcdDataWrite(*p++);
		    //LcdDataWrite(*p++);
		    delay_nus(2);
			//*p++;
			y++;
		   }
}

void main()
{                                                                                                      
    uchar *num[]={"00","01","02","03","04","05","06","07","08","09","10",
	"11","12","13","14","15","16","17","18","19","20","21","22",
	"23","24","25","26","27","28","29","30","31","32","33","34",
	"35","36","37","38","39","40","41","42","43","44","45","46",
	"47","48","49","50","51","52","53","54","55","56","57","58",
	"59"}; 
  
  init_sys();
  INITLCD();
  //CLRVRAM(); 
  CLRSCREEN();
  //delay_nms(50);
  delay_nus(10);
  //LcdCommand(MWCR);
  //SetCursor(0,39);
  //WLCDCHR(4,15,"张" );

 WLCDCHR(0,3,num[25]);
  WLCDCHR(1,0,"测试人员编号:" );
 WLCDCHR(2,0,"测试阀号:" );
 WLCDCHR(3,0,"测试阀编号: " );
 WLCDCHR(4,0,"阀初始电压设定: " );
  WLCDCHR(5,0,"未定义内容:" );
 WLCDCHR(6,0,"未定义内弄:" );
 WLCDCHR(7,0,"未定义显示内容:" );
 WLCDCHR(8,0,"未定义显示内容:" );
 WLCDCHR(9,0,"未定义显示内容:" );
  WLCDCHR(10,0,"未定义显示内容:" );
 //WLCDCHR(11,0,"未定义显示内容:" );
 //SetCursor(0,13);

//WLCDCHR(0,0,"未定义" );
SetCursor(0,7.5);
}

⌨️ 快捷键说明

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