液晶显示第二种方法

#include   <reg52.H>
#include   <intrins.h>

#define uint  unsigned int
#define uchar unsigned char
/*****************************************************************************/
sbit LCM_psb  = P2^3;				//H=并口; L=串口;
sbit LCM_rst  = P2^4;				//Reset Signal 低电平有效
sbit LCM_cs   = P2^5;
sbit LCM_std  = P2^6;
sbit LCM_sclk = P2^7;
uchar code tab1[]={
"   xnian.com    "
"欢迎使用这个程序"
"    哈哈        "
"  这  是谁啊?  "
};
/*****************************************************************************/
//函数声明
void LCM_WriteString(unsigned char *str) ;	//写字符  例:LCM_WriteString("您好!");
void LCM_WriteDatOrCom(bit ,unsigned char );	//(0,指令) (1,数据)
void DelayM(unsigned int a);			//延时
void LCM_init(void);				//LCM初始化
void LCM_clr(void);				//清屏
void Delay(int num);
/*****************************************************************************/
//延时函数 1MS/次
void DelayM(unsigned int a)
{
	unsigned char i;
	while( --a != 0)
       {
		for(i = 0; i < 125; i++);		//一个 ; 表示空语句,CPU空转。
	}					//i 从0加到125,CPU大概就耗时1毫秒
}
/*****************************************************************************/
//初始化LCM
void LCM_init(void)
{
	LCM_rst=1;
	LCM_psb=0;
	LCM_WriteDatOrCom (0,0x30);		//30---基本指令动作
	LCM_WriteDatOrCom (0,0x01);		//清屏,地址指针指向00H
	Delay (100);
	LCM_WriteDatOrCom (0,0x06);		//光标的移动方向
	LCM_WriteDatOrCom(0,0x0c);		//开显示,关游标
}
/*****************************************************************************/
//写指令或数据  (0,指令) (1,数据)
void LCM_WriteDatOrCom(bit dat_comm,uchar content)
{
	uchar a,i,j;
	Delay(50);
	a=content;
	LCM_cs=1;
	LCM_sclk=0;
	LCM_std=1;
	for(i=0;i<5;i++)
	{
		LCM_sclk=1;
		LCM_sclk=0;
	}
	LCM_std=0;
	LCM_sclk=1;
	LCM_sclk=0;
	if(dat_comm)
		LCM_std=1;			//data
	else
		LCM_std=0;			//command
	LCM_sclk=1;
	LCM_sclk=0;
	LCM_std=0;
	LCM_sclk=1;
	LCM_sclk=0;
	for(j=0;j<2;j++)
	{
		for(i=0;i<4;i++)
		{
			a=a<<1;
			LCM_std=CY;
			LCM_sclk=1;
			LCM_sclk=0;
		}
		LCM_std=0;
		for(i=0;i<4;i++)
		{
			LCM_sclk=1;
			LCM_sclk=0;
		}
	}
}
/*****************************************************************************/
void chn_disp (uchar code *chn)
{
	uchar i,j;
	LCM_WriteDatOrCom  (0,0x30);
	LCM_WriteDatOrCom  (0,0x80);
	for (j=0;j<4;j++)
	{
		for (i=0;i<16;i++)
		LCM_WriteDatOrCom  (1,chn[j*16+i]);
	}
}
/*****************************************************************************/
//清屏函数
void LCM_clr(void)
{
	LCM_WriteDatOrCom (0,0x30);
	LCM_WriteDatOrCom (0,0x01);
	Delay (180);
}
/*****************************************************************************/
//向LCM发送一个字符串,长度64字符之内。
//应用:LCM_WriteString("您好!");
void LCM_WriteString(unsigned char *str)
{
	while(*str != '\0')
       {
		LCM_WriteDatOrCom(1,*str++);
        }
	*str = 0;
}
/*****************************************************************************/
//延时函数
void Delay(int num)
{
	while(num--);
}
/*****************************************************************************/
//主程序
main() {
	LCM_init();				//初始化液晶显示器
	LCM_clr();//清屏
	chn_disp(tab1);				//显示欢迎字
	DelayM(5);
	LCM_WriteString("您好!");
	while(1){
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值