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

📄 jlx12864g-0088-1.c

📁 单片机课设液晶资料
💻 C
字号:
#include <iom128v.h>
#include <macros.h>
#define unsingt int u8

#define CS		PA0//片选
#define RESET	PA1//复位
#define RS		PA2//寄存器操作选择(0-传送命令  1-传送数据)
#define SCLK	PA3//时钟
#define SID		PA4//数据


#define SET_CS		PORTA|=BIT(PA0)
#define SET_RESET	PORTA|=BIT(PA1)
#define SET_RS		PORTA|=BIT(PA2)
#define SET_SCLK	PORTA|=BIT(PA3)
#define SET_SID		PORTA|=BIT(PA4)
#define CLR_CS		PORTA&=~BIT(PA0)
#define CLR_RESET	PORTA&=~BIT(PA1)
#define CLR_RS		PORTA&=~BIT(PA2)
#define CLR_SCLK	PORTA&=~BIT(PA3)
#define CLR_SID		PORTA&=~BIT(PA4)

char quan[];
char tao[];
char ye[];
char jing[];
char jie[];
char jue[];
char fang[];
char an[];
char lian[];
char xun[];
char mo[];
char kuai[];
char chang[];
char num0[];
char num1[];
char num2[];
char num3[];
char num4[];
char num5[];
char num6[];
char num7[];
char num8[];
char num9[];


void LCM_Delay(int time)  /*LCM延时,用于LCM显示输出时序控制*/
{
 	long int j;
	for(j=0;j<time;j++)
	;
}

void LCM_DelayLong(long int i)
{
	int j,k;
	for(k=0;k<i;k++)
	{
		for(j=0;j<0xff;j++)
		;
	}
}

void LCM_DelayShort(int i)
{
	int j=0;

	while(i--)
	{
		for(j=0;j<10;j++);
	}
}

void LCM_WrCmd(char cmd) /*向LCM写命令*/
{
	int i;
	CLR_RS;
	CLR_CS;		
	for(i=0;i<8;i++)  /*从高到低取位*/
	{
		CLR_SCLK;
		if(cmd & 0x80)
		{
			SET_SID;
		}
		else
		{
			CLR_SID;
		}
		SET_SCLK;
		cmd <<= 1;
	}
}

void LCM_WrData(int data)/*向LCM写数据*/
{
	int i;
	CLR_CS;		
	SET_RS;/*传送数据*/
	for(i=0;i<8;i++)/*从高到低取位*/
	{
		CLR_SCLK;
		if(data & 0x80)
		{
			SET_SID;
		}
		else
		{
			CLR_SID;
		}
		SET_SCLK;
		data <<= 1;
	}
}

void LCM_Init(void)/*LCM初始化*/
{
	CLR_RESET;
	LCM_DelayLong(20);
	SET_RESET;
	LCM_DelayLong(20);
	
	LCM_WrCmd(0xE2);/*软件复位*/
	LCM_DelayLong(5);

	LCM_WrCmd(0x2C);	
	LCM_WrCmd(0x2E);	
	LCM_WrCmd(0x2F);	
	LCM_DelayLong(20);
	LCM_WrCmd(0x23);/*粗调对比度(0x20-0x27)(即设置内部调压电阻值)*/
	LCM_WrCmd(0x81);/*微调对比度*/
	LCM_WrCmd(0x28);/*微调对比度的值(0x00-0x3F)*/

	LCM_WrCmd(0xA2);/*偏压比(0xA2 - 1/9;  0xA3 - 1/7)*/
	LCM_WrCmd(0xA0);/*列扫描顺序(0xA0-常规(从左到右); 0xA1-反转(从右到左))*/
	LCM_WrCmd(0xC8);/*行扫描顺序(0xC0-普通(从下到上); 0xC8-反向(从上到下))*/

	LCM_WrCmd(0xAF);/*开启LCD显示(0xAF-开; 0xAE-关)*/
	
}

void clear_screen(void)/*全屏填充(data:  0x00-清屏;  0xFF-黑屏;  其他-间距不同的黑白相间的图案)*/
{
	int i=0, j=0;

	for(i=0;i<8;i++)
	{
		CLR_CS;
		LCM_WrCmd(0xB0+i);/*设置页地址*/
		LCM_WrCmd(0x10);
		LCM_WrCmd(0x00);
		for(j=0;j<128;j++)
		{
			LCM_WrData(0x00);
		}
	}
}
/*在指定行和列位置显示指定的汉字(16*16点阵的汉字)*/
void disp_grap(int line,int column,char *dp)
{
        int i,j,k,col_l,col_h;
 		for(i=0;i<2;i++)
        {
        CLR_CS;
		LCM_WrCmd(0xb0+i+2*(line-1));   //set page address,
		k=column-1;
		k=k*0x10;
		col_h=k&0xf0;
		col_h=col_h>>4;
		col_l=k&0x0f;
		LCM_WrCmd(0x10+col_h);
		LCM_WrCmd(0x00+col_l);
		for(j=0;j<16;j++)
		{
	     LCM_WrData(*dp);    
			dp++; 		
		}
          }
}

/*在指定行和列位置显示指定的字母、数字(8*16点阵的)*/
void disp_char(int line,int column,char *dp)
{
        int i,j,k,col_l,col_h;
 		for(i=0;i<2;i++)
        {
        	CLR_CS;
			LCM_WrCmd(0xb0+i+2*(line-1));   //set page address,
			k=column-1;
			k=k*0x08;
			col_h=k&0xf0;
			col_h=col_h>>4;
			col_l=k&0x0f;
			LCM_WrCmd(0x10+col_h);
			LCM_WrCmd(0x00+col_l);		
			for(j=0;j<8;j++)
			{
	        	LCM_WrData(*dp);    
				dp++; 		
			}
        }
}
void main(void)
{
 	DDRA = 0xff;
	LCM_Init();
	while(1)
        {
        	
			   clear_screen();    //clear all dots
 	        disp_grap(1,1,quan);  /*在第1行第1列显示一个 16*16 点阵汉字:全*/
	        //delay(20);
 	        disp_grap(1,2,tao);  /*在第1行第2列显示一个 16*16 点阵汉字:套*/	        
			   //delay(20);
 	        disp_grap(1,3,ye);  /*显示一个 16*16 点阵汉字:液*/
			   //delay(20);
 	        disp_grap(1,4,jing);  /*显示一个 16*16 点阵汉字:晶*/
			   //delay(20);		
 	        disp_grap(1,5,jie);  /*显示一个 16*16 点阵汉字:解*/
			   //delay(20);
 	        disp_grap(1,6,jue);  /*显示一个 16*16 点阵汉字:决*/
			   //delay(20);
 	        disp_grap(1,7,fang);  /*显示一个 16*16 点阵汉字:方*/
			   //delay(20);
 	        disp_grap(1,8,an);  /*显示一个 16*16 点阵汉字:案*/
			   //delay(20);
 	        disp_grap(2,1,jing);  /*显示一个 16*16 点阵汉字:晶*/
	        //delay(20);
 	        disp_grap(2,2,lian);  /*显示一个 16*16 点阵汉字:联*/	        
			   //delay(20);
 	        disp_grap(2,3,xun);  /*显示一个 16*16 点阵汉字:讯*/
			   //delay(20);
 	        disp_grap(2,4,ye);  /*显示一个 16*16 点阵汉字:液*/
			   //delay(20);		
 	        disp_grap(2,5,jing);  /*显示一个 16*16 点阵汉字:晶*/
			   //delay(20);
 	        disp_grap(2,6,mo);  /*显示一个 16*16 点阵汉字:模*/
			   //delay(20);
 	        disp_grap(2,7,kuai);  /*显示一个 16*16 点阵汉字:块*/
			   //delay(20);
 	        disp_grap(2,8,chang);  /*显示一个 16*16 点阵汉字:厂*/
			   LCM_DelayLong(1000);
			clear_screen();    //clear all dots		
			disp_char(1,1,num0);  /*在第1行第1列显示一个 8*16 点阵数字:0*/
			disp_char(1,2,num1);  /*在第1行第2列显示一个 8*16 点阵数字:1*/
			disp_char(1,3,num2);  /*在第1行第3列显示一个 8*16 点阵数字:2*/
			disp_char(1,4,num3);  /*在第1行第4列显示一个 8*16 点阵数字:3*/		
			disp_char(1,5,num4);  /*在第1行第5列显示一个 8*16 点阵数字:4*/
			disp_char(1,6,num5);  /*以下类同*/
			disp_char(1,7,num6);  
			disp_char(1,8,num7);  
			disp_char(1,9,num8);  
			disp_char(1,10,num9); 
			disp_char(1,11,num0); 
			disp_char(1,12,num1); 
			disp_char(1,13,num2); 
			disp_char(1,14,num3); 
			disp_char(1,15,num4); 
			disp_char(1,16,num5); 
			disp_char(2,1,num0);  /*在第2行第1列显示一个 8*16 点阵数字:0*/
			disp_char(2,2,num1);  /*在第2行第2列显示一个 8*16 点阵数字:1*/
			disp_char(2,3,num2);  /*在第2行第3列显示一个 8*16 点阵数字:2*/
			disp_char(2,4,num3);  /*在第2行第4列显示一个 8*16 点阵数字:3*/		
			disp_char(2,5,num4);  /*在第2行第5列显示一个 8*16 点阵数字:4*/
			disp_char(2,6,num5);  /*以下类同*/
			disp_char(2,7,num6);  
			disp_char(2,8,num7);  
			disp_char(2,9,num8);  
			disp_char(2,10,num9); 
			disp_char(2,11,num0); 
			disp_char(2,12,num1); 
			disp_char(2,13,num2); 
			disp_char(2,14,num3); 
			disp_char(2,15,num4); 
			disp_char(2,16,num5);	
			LCM_DelayLong(1000);	
		}
	
	
	
	
}



char quan[]={
/*--  文字:  全  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x80,0x40,0x60,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x70,0x60,0x20,0x00,0x00,
0x00,0x40,0x40,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x46,0x44,0x60,0x40,0x00
};

char tao[]={
/*--  文字:  套  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x44,0x24,0x24,0xF4,0x5C,0x57,0x54,0x54,0x5C,0x54,0x24,0x64,0xC4,0x44,0x00,
0x04,0x04,0x44,0x64,0x57,0x4D,0x45,0x65,0x25,0x25,0x35,0xE4,0x44,0x04,0x04,0x00
};

char ye[]={

/*--  文字:  液  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x61,0x06,0xE0,0x18,0x84,0xE4,0x1C,0x84,0x65,0xBE,0x24,0xA4,0x64,0x04,0x00,
0x04,0x04,0xFF,0x00,0x01,0x00,0xFF,0x41,0x21,0x12,0x0C,0x1B,0x61,0xC0,0x40,0x00
};
char jing[]={
/*--  文字:  晶  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0x00,0x7E,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x7E,0x00,0x00,0x00,0x00,
0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00
};

char jie[]={
/*--  文字:  解  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0xF4,0x57,0x54,0xFC,0x54,0xF0,0x42,0xA2,0x1E,0x02,0xA2,0x62,0x3E,0x00,0x00,
0x80,0x7F,0x02,0x02,0x5F,0x82,0x7F,0x0A,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x00
};
char jue[]={
/*--  文字:  决  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x02,0x04,0xD8,0x08,0x00,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,
0x02,0xFE,0x01,0x80,0x41,0x21,0x11,0x0D,0x03,0x05,0x09,0x11,0x31,0x61,0x21,0x00
};
char fang[]={

/*--  文字:  方  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0x08,0x08,0x08,0x08,0x08,0xF9,0x4A,0x4C,0x48,0x48,0xC8,0x08,0x08,0x08,0x00,
0x40,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x20,0x40,0x40,0x3F,0x00,0x00,0x00,0x00
};

char an[]={
/*--  文字:  案  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x20,0x2C,0x24,0x64,0x74,0xAD,0xA6,0xE4,0x34,0x24,0x24,0x2C,0x24,0x00,0x00,
0x00,0x24,0x24,0x25,0x15,0x15,0x0D,0xFE,0x04,0x0D,0x17,0x14,0x24,0x64,0x24,0x00
};

char lian[]={
/*--  文字:  联  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x02,0xFE,0x92,0x92,0x92,0xFE,0x12,0x11,0x12,0x1C,0xF0,0x18,0x17,0x12,0x10,0x00,
0x08,0x1F,0x08,0x08,0x04,0xFF,0x05,0x81,0x41,0x31,0x0F,0x11,0x21,0xC1,0x41,0x00
};
char xun[]={
/*--  文字:  讯  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x21,0x2E,0xE4,0x00,0x42,0x42,0xFE,0x42,0x42,0x42,0x02,0xFE,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x7F,0x00,0x00,0x00,0x00,0x3F,0x40,0x38,0x00
};
char mo[]={
/*--  文字:  模  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0xD0,0xFF,0x50,0x90,0x04,0xF4,0x54,0x5F,0x54,0x54,0x5F,0xF4,0x04,0x00,0x00,
0x03,0x00,0xFF,0x00,0x00,0x84,0x85,0x45,0x35,0x0F,0x15,0x25,0x65,0xC4,0x44,0x00
};

char kuai[]={
/*--  文字:  块  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x10,0xFF,0x10,0x10,0x00,0x08,0x08,0xFF,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,
0x08,0x18,0x0F,0x04,0x85,0x41,0x31,0x0D,0x03,0x05,0x09,0x11,0x31,0x61,0x21,0x00
};


char chang[]={
/*--  文字:  厂  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
char num0[]={
/*--  文字:  0  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00
};
char num1[]={
/*--  文字:  1  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00
};
char num2[]={
/*--  文字:  2  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00
};
char num3[]={
/*--  文字:  3  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00
};
char num4[]={
/*--  文字:  4  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00
};

char num5[]={
/*--  文字:  5  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00
};

char num6[]={
/*--  文字:  6  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00
};
char num7[]={
/*--  文字:  7  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00
};
char num8[]={
/*--  文字:  8  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00
};

char num9[]={
/*--  文字:  9  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00
};

⌨️ 快捷键说明

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