📄 pmlcd.c
字号:
}
}
/********************************************************
* 功能: 判断LCM的左半屏或右半屏是否处于忙状态 *
* 当LCM不忙时函数返回 *
* 输入: choe1为左半屏选择标志 *
* choe2为右半屏选择标志 *
*********************************************************/
void chk_busy (uchar choe1,uchar choe2)
{
if(choe1==1)
{
lck = 0;//a0=0;
P1 = 0x09;//rw=1;
lck = 1;//e1=0;
while(P0&0x80==1)
delay(2);
/*cs1=1;
cs2=1;
cs3=0;
e1=1;*/
lck = 0;
P1 = 0x00;
lck = 1;
}
if(choe2==1)
{
lck = 0;//a0=0;
P1 = 0x0a;//rw=1;
lck = 1;//e2=1;
while(P0&0x80==1)
delay(2);
lck = 0; //e2=0;
P1 = 0x00;
lck = 1;
}
}
/********************************************************
* 功能: 根据输入的参数进行延时 *
* 输入: us为延时多少微秒 *
* 晶振为11.0592M,执行一条指令的时间约为1us *
*********************************************************/
void delay (unsigned int us) //delay time
{
while(us--);
}
/********************************************************
* 功能: 根据输入的参数进行延时 *
* 输入: us为延时多少毫秒 *
* 晶振为11.0592M,执行一条指令的时间约为1us *
* 1ms = 1000 * 1us *
*********************************************************/
void delay1 (unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<1000;j++)
;
}
/********************************************************
* 功能: 初始化LCM *
* 输入: 无须输入参数 *
*********************************************************/
void init_lcd (void)
{
wr_lcd (1,1,comm,0xe2);
wr_lcd (1,1,comm,0xa4);
wr_lcd (1,1,comm,0xa9);
wr_lcd (1,1,comm,0xa0);
wr_lcd (1,1,comm,0xee);
wr_lcd (1,1,comm,0xaf);
}
/********************************************************
* 功能: 向LCM送16*16的汉字 *
* 输入: *chn为存放汉字点阵的起始地址 *
*********************************************************/
void disphz (uchar code *chn)
{
uchar i,j,k;
for(k=0;k<3;k++)
{
for(j=0;j<4;j++)
{
wr_lcd (1,0,comm,f_page+j);
wr_lcd (1,0,comm,f_row);
wr_lcd (1,0,comm,f_line+12+k*16);
for(i=0;i<16;i++)
wr_lcd (1,0,dat,chn[k*64+j*16+i]);
}
}
for(k=3;k<6;k++)
{
for(j=0;j<4;j++)
{
wr_lcd (0,1,comm,f_page+j);
wr_lcd (0,1,comm,f_row);
wr_lcd (0,1,comm,f_line+k*16-48);
for(i=0;i<16;i++)
wr_lcd (0,1,dat,chn[k*64+j*16+i]);
}
}
}
/********************************************************
* 功能: 向LCM送8*16的字符 *
* 输入: *img为存放字符点阵的起始地址 *
*********************************************************/
void dispzf (uchar code *eng)
{
uchar i,j,k;
for(k=0;k<7;k++)
{
for(j=0;j<4;j++)
{
wr_lcd (1,0,comm,f_page+j);
wr_lcd (1,0,comm,f_row);
wr_lcd (1,0,comm,f_line+5+k*8);
for(i=0;i<8;i++)
wr_lcd (1,0,dat,eng[k*32+j*8+i]);
}
}
for(k=7;k<14;k++)
{
for(j=0;j<4;j++)
{
wr_lcd (0,1,comm,f_page+j);
wr_lcd (0,1,comm,f_row);
wr_lcd (0,1,comm,f_line+k*8-56);
for(i=0;i<8;i++)
wr_lcd (0,1,dat,eng[k*32+j*8+i]);
}
}
}
//************显示一幅图象************
void disptu (uchar code *img)
{
uchar i,j;
for(j=0;j<4;j++)
{
wr_lcd (1,1,comm,f_page+j);
wr_lcd (1,1,comm,f_row);
wr_lcd (1,1,comm,f_line);
for(i=0;i<122;i++)
{
if(i<61)
{wr_lcd (1,0,comm,f_line+i);
wr_lcd (1,0,dat,img[j*122+i]);}
else
{wr_lcd (0,1,comm,f_line+i-61);
wr_lcd (0,1,dat,img[j*122+i]);}
}
}
}
/********************************************************
* 功能: 向LCM的左半屏和右半屏送点阵数据 *
* 输入: data1,data2为待显示数据 *
*********************************************************/
void wrlattice (uchar data1,uchar data2)
{
uchar i,j;
for(j=0;j<4;j++)
{
wr_lcd (1,1,comm,f_page+j);
wr_lcd (1,1,comm,f_row);
wr_lcd (1,1,comm,f_line);
for(i=0;i<61;i=i+2)
{
wr_lcd (1,1,dat,data1);
wr_lcd (1,1,dat,data2);
}
}
}
//**************清除数码管显示***********
/*void clr79disp()
{ unsigned char i;
cmd8279 = 0xd1;//清除8279
delay(2);
cmd8279 = 0x00;//左边输入 八位字符显示,外部译码键扫描方式,双键互锁
delay(2);
cmd8279 = 0x2A;//10分频,(ALE = 1/6 OSC)
delay(2);
cmd8279 = 0x60;//读8279RAM不自动加1
delay(2);
cmd8279 = 0x90;//写显示RAM自动加1
delay(2);
for(i=0;i<8;i++)
dat8279 = 0x00;//缓冲区内容送数码管显示
}
*/
//*************主程序*************
void main ()
{
init_lcd (); //初始化LCD
// BUZ = 0;//关蜂鸣器
/* clr79disp();//关数码管显示
P0 = 0xff;
P2=0x00;
;
P2=0x08; //关跑马灯*/
while (1)//主循环
{
wrlattice (0x00,0x00);
disphz (tab1);
delay1 (600);
wrlattice (0xff,0x00);
delay1 (600);
wrlattice (0x00,0x00);
dispzf (tab2);
delay1 (600);
wrlattice (0x33,0x33);
delay1 (600);
disptu (tab3);
delay1 (600);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -