#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){
}
}
液晶显示第二种方法
最新推荐文章于 2022-10-17 07:47:27 发布