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

📄 lcd.c

📁 智能家居系统。。。包括PS2键盘
💻 C
字号:
//////////////////////////////////////////
//创新实验室 LCD RT12864M 的串口通信程序//
//				2006/12/3				//
//				balisula				//
//////////////////////////////////////////
#include <REG52.H>
#include <intrins.h>

#define  uchar unsigned char
#define  command 1
#define  lcddata 0

sbit csl = P1^1;
sbit sid = P1^2;
sbit clkl = P1^3;
sbit rstl = P1^4; 
//sbit psb  =P3^2;
sbit lcd_bk =P1^5;

void delay_2us(unsigned char us);	//精确延时时间=2*us*T+5*T,	T为一个机器周期
void delay_ms(unsigned int ms);	//延时时间=8*ms*T(约等于,实际值比此值大,延时时间越长,误差越大,最大误差262*T)

void sent_com_bit(uchar sent_bit)
{	
	uchar temp,i;

	temp=sent_bit;
	csl=0;
	clkl=0;
	sid=0;
	csl=1;
	for(i=0;i<8;i++)
	{
		clkl=0;
		if((temp&0x80)==0x80)
			sid=1;
		else
			sid=0;
		temp<<=1;	
		clkl=1;
		_nop_ ();
	}
	csl=0;
	clkl=0;
}

void sent_com_3bit(uchar fun,uchar sent_data)
{
	uchar temp1,temp2,temp3;

	if(fun==1)
		temp1=0xF8;		//发送控制指令
	else if(fun==0)
		temp1=0xFA;		//发送数据显示指令
	temp2=(sent_data&0xF0);	//高4位
	temp3=((sent_data<<4)&0xF0);//低四位

	sent_com_bit(temp1);
	delay_2us(5);
	sent_com_bit(temp2);
	delay_2us(5);
	sent_com_bit(temp3);	
	delay_2us(5);
}

void sent_position(uchar x,uchar y)
{
    uchar address;
	switch(y)
	{
		case 0: 
		    address = 0x80 + x;
		    break; 
	    case 1: 
		    address = 0x90 + x;
			break; 
		case 2: 
			address = 0x88 + x;
			break; 
	    case 3: 
			address = 0x98 + x;
			break; 
		default:address = 0x80 + x;
	}
    sent_com_3bit( command,address );				
	
}

void sent_string(uchar x,uchar y,uchar *sent_data,uchar length)
{
	sent_position(x,y);
	while(*sent_data&&length)
	{
		sent_com_3bit( lcddata,*sent_data);
		sent_data++;
		length--;
	}
}

void sent_pic_position(uchar x,uchar y)
{
	if(y>31) 
	{
		x+=0x88;
		y=(y-32)+0x80;
	}
	else
	{
		x+=0x80;
		y+=0x80;
	}
	sent_com_3bit(command,0x34);
	sent_com_3bit(command,y);
	sent_com_3bit(command,x);
	sent_com_3bit(command,0x30);
}

void LCD_Convert(unsigned char x,unsigned char y,unsigned char weith,unsigned char mode)		//反白
{
	unsigned char flag=0;
	unsigned char px=0;
	unsigned char py=0;	
	if (mode) mode=0xff;
	if(x%2) 
	{
		flag=1;
	}
	x/=2;
	for(py=0;py<16;py++)
	{
		sent_pic_position(x,y*16+py);
		if(flag) sent_com_3bit(command,0);
		for (px=weith;px>0;px--)
		{
			sent_com_3bit (lcddata,mode);
		}
	}
	sent_com_3bit(command,0x36);
	sent_com_3bit(command,0x30);
}

void LCD_clr_pic()
{
	unsigned char i;
	for(i=0;i<4;i++) LCD_Convert(0,i,16,0);
}

void init_LCD()
{
	lcd_bk=1;
	rstl=0;
	delay_2us(50);
	rstl=1;
	delay_2us(50);
	//psb=0;
    sent_com_3bit(command,0x01);      //显示清屏
	delay_ms(30);
  	sent_com_3bit(command,0x0C);      //显示开,不显示光标(0x0C),显示光标(0x0F)
	delay_ms(30);
    sent_com_3bit(command,0x80);      //显示光标移动设置
	delay_ms(30);
	LCD_clr_pic();	
}

⌨️ 快捷键说明

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