📄 lcd.c
字号:
/*********************************************************************************************************
** 320240ALCD控制
**
**
**--------------当前版本信息----------------------------------------------------------------------------
** 文件名: lcd.c
** 创建人: 刘明宇
** 日 期: 2005年10月11日
** 描 述: LCD320240A控制的主文件
** 硬件连接
** 51 lcd
** P0~7-------->D0~7
** P2.7-------->cs
** P2.6-------->A0
** P1.0-------->Res
** wr -------->wr
** rd -------->rd
**
**--------------历史版本信息----------------------------------------------------------------------------
** 无
**------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include <REG52.H>
#include <stdio.h>
#include <INTRINS.H>
#include <ABSACC.H>
#include "lcd.h"
#include "disdata.h"
/*LCD initial parameters*/
/*
在下面的数据里面,第四个0x27对应是显示的横向范围,8位除去
-------------------240128的SYSTEM SET 参数-------------------------------
unsigned char SYSTAB[8]={0x30,0x87,0x09,0x1d,0x64,0xa0,0x1e,0x00};
unsigned char SCRTAB[10]={0x00,0x00,0xa0,0x00,0x00,0xa0,0x00,0x80,0x00,0x00};
Uchar code ParaSysTable8[]= {
0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00 // P1-P8参数
};
*/
BYTE code SYSTAB[8]={0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};
//BYTE code SYSTAB[8]={0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};
BYTE code SCRTAB[10]={0x00,0x00,0xf0,0x00,0x40,0xf0,0x00,0x80,0x00,0x00};
/****************************************************************************
* 名称:main
* 功能:主函数
* 入口参数:无
* 出口参数:无
****************************************************************************/
void main(void)
{
BYTE i;
serial_init();
Lcd_res=0;
Lcd_res=1;
test_serial();
INITLCD();
CLRSCREEN();
FULLSCREEN();
while(1)
{
sam1();
delaylong(50000);
CLRSCREEN();
delaylong(10000);
FULLSCREEN();
delaylong(10000);
}
}
/*************************SBUROUTINES OF LCD DRIVE**************************/
/****************************************************************************
* 名称:WLCDCOM
* 功能:写LCD控制命令
* 入口参数:com
* 出口参数:无
****************************************************************************/
void WLCDCOM(BYTE com )
//写LCD控制命令
{
SEDWRCOM=com;
_nop_();
}
/****************************************************************************
* 名称:WLCDDATA
* 功能:写LCD控制参数和显示字符数据
* 入口参数:ref
* 出口参数:无
****************************************************************************/
void WLCDDATA(BYTE ref )
//写LCD控制参数和显示字符数据
{
SEDWRDAT=ref;
_nop_();
}
/****************************************************************************
* 名称:CLRVRAM
* 功能:显示存储器清零
* 入口参数:无
* 出口参数:无
****************************************************************************/
void CLRVRAM(void)
//显示存储器清零
{
WORD i,j;
WLCDCOM(CSRRGT);
WLCDCOM(CSRW);
WLCDDATA(0x00);
WLCDDATA(0x00);
WLCDCOM(MWRITE);
for(i=0;i<=0xff;i++)
{
for(j=0;j<=0xff;j++)
{
WLCDDATA(0x00);
}
}
}
/****************************************************************************
* 名称:CLRSCREEN
* 功能:清除显示屏幕
* 入口参数:无
* 出口参数:无
****************************************************************************/
void CLRSCREEN(void)
//清除显示屏幕
{
WORD i,j;
//BYTE a;
WLCDCOM(CSRRGT);
WLCDCOM(CSRW);
WLCDDATA(0X00);
WLCDDATA(0X00);
WLCDCOM(MWRITE);
/*
for(i=0;i<0xa0;i++)
{
for(j=0;j<0x1e0;j++)
{
WLCDDATA(0x00);
}
}*/
for(i=0;i<9600;i++)
{
WLCDDATA(0x00);
}
}
/****************************************************************************
* 名称:WNUMBER
* 功能:显示0~9等10个数字
* 入口参数:...
* 出口参数:无
****************************************************************************/
void WNUMBER(BYTE x,BYTE y,BYTE (*p)[16],BYTE num )
//功能:显示0~9等10个数字,num为要显示的数字的值(16×8)
//x坐标寄存器(字节),y坐标寄存器(点行)
{
WORD temp;
BYTE hi,lo;
BYTE a,b,c;
temp=y*AP;
hi=HIBYTE(temp);
lo=LOBYTE(temp);
lo=x+lo;
if(CY==1) {hi+=0x01;CY=0;}
WLCDCOM(CSRDOWN);
WLCDCOM(CSRW);
WLCDDATA(lo);
WLCDDATA(hi);
WLCDCOM(MWRITE);
for(c=0;c<16;c++)
{
WLCDDATA(*(*(p+num)+c));
}
lo=lo+0x01;
if(CY==1) {hi+=0x01;CY=0;}
}
/****************************************************************************
* 名称:WBLOCK
* 功能:显示16×8点字符
* 入口参数:...
* 出口参数:无
****************************************************************************/
void WBLOCK(BYTE x,BYTE y,BYTE (*p)[16],BYTE num )
//功能:显示16×8点字符,num为要显示的字符块长度
//x坐标为低8位寄存器(字节),y坐标寄存器(点行)
{
WORD temp;
BYTE hi,lo;
BYTE a,b,c;
temp=y*AP;
hi=HIBYTE(temp);
lo=LOBYTE(temp);
lo=x+lo;
if(CY==1) {hi+=0x01;CY=0;}
WLCDCOM(CSRDOWN);
WLCDCOM(CSRW);
WLCDDATA(lo);
WLCDDATA(hi);
WLCDCOM(MWRITE);
for(c=0;c<16;c++)
{
WLCDDATA(*(*(p+num-1)+c));
}
lo=lo+0x01;
if(CY==1) {hi+=0x01;CY=0;}
}
/****************************************************************************
* 名称:FILLBLOCK
* 功能:显示16×16字符
* 入口参数:...
* 出口参数:无
****************************************************************************/
void FILLBLOCK(BYTE x,BYTE y,BYTE len )
//功能:显示16×16字符,len为要显示的字符块的长度
//x坐标为低8位寄存器(字节),y坐标寄存器(点行)
{
WORD temp;
BYTE hi,lo;
BYTE a,b;
temp=y*AP;
hi=HIBYTE(temp);
lo=LOBYTE(temp);
lo=x+lo;
if(CY==1) {hi+=0x01;CY=0;}
for(b=0;b<0x10;b++)//**************************************************************这里要改
{
WLCDCOM(CSRDOWN);
WLCDCOM(CSRW);
WLCDDATA(lo);
WLCDDATA(hi);
WLCDCOM(MWRITE);
for(a=0;a<16;a++)
{
WLCDDATA(0xff);
}
lo=lo+0x01;
if(CY==1) {hi+=0x01;CY=0;}
}
}
/****************************************************************************
* 名称:CLRBLOCK
* 功能:清除16×8字符快
* 入口参数:...
* 出口参数:无
****************************************************************************/
void CLRBLOCK(BYTE x,BYTE y,BYTE len )
//清除16×8字符快,len为要清除的字符块的长度
//x坐标寄存器(字节),y坐标寄存器(点行)
{
WORD temp;
BYTE hi,lo;
BYTE a,b;
temp=y*AP;
hi=HIBYTE(temp);
lo=LOBYTE(temp);
lo=x+lo;
if(CY==1) {hi+=0x01;CY=0;}
for(b=0;b<0x10;b++)//**********************************************************这里要改
{
WLCDCOM(CSRDOWN);
WLCDCOM(CSRW);
WLCDDATA(lo);
WLCDDATA(hi);
WLCDCOM(MWRITE);
for(a=0;a<16;a++)
{
WLCDDATA(0x00);
}
lo=lo+0x01;
if(CY==1) {hi+=0x01;CY=0;}
}
}
/****************************************************************************
* 名称:WLCDCHR
* 功能:显示16×32字符
* 入口参数:...
* 出口参数:无
****************************************************************************/
void WLCDCHR(BYTE x,BYTE y,BYTE (*p)[32],BYTE num )
//功能:显示16×32字符,num为要显示字符数组的第一维的值
//x坐标寄存器(字节),y坐标寄存器(点行)
{
WORD temp;
BYTE hi,lo;
BYTE a,b,c;
temp=y*AP;
hi=HIBYTE(temp);
lo=LOBYTE(temp);
lo=x+lo;
if(CY==1) {hi+=0x01;CY=0;}
WLCDCOM(CSRDOWN);
for(a=0;a<0x10;a++)//**********************************************************这里要改
{
WLCDCOM(CSRW);
WLCDDATA(lo);
WLCDDATA(hi);
WLCDCOM(MWRITE);
for(c=0;c<0x20;c+=2)
{
WLCDDATA(*(*(p+a)+c));
}
lo=lo+0x01;
if(CY==1) {hi+=0x01;CY=0;}
WLCDCOM(CSRW);
WLCDDATA(lo);
WLCDDATA(hi);
WLCDCOM(MWRITE);
for(c=1;c<0x20;c+=2)
{
WLCDDATA(*(*(p+a)+c));
}
lo=lo+0x01;
if(CY==1) {hi+=0x01;CY=0;}
}
}
/****************************************************************************
* 名称:INITLCD
* 功能:初始化LCD显示参数以及界面
* 入口参数:...
* 出口参数:无
****************************************************************************/
void INITLCD(void)
//初始化LCD显示参数以及界面
{
WORD a,b,c;
WLCDCOM(SYSSET);
for(b=0;b<8;b++)
{
WLCDDATA(SYSTAB[b]);
}
WLCDCOM(SCROLL);
for(b=0;b<10;b++)
{
WLCDDATA(SCRTAB[b]);
//WLCDDATA(0x00);
}
WLCDCOM(HDOTSCR);
WLCDDATA(0X00);
WLCDCOM(OVLAY);
WLCDDATA(0X1c);
WLCDCOM(DISPOFF);
WLCDDATA(0X56);
CLRVRAM();
WLCDCOM(CSRFORM);
WLCDDATA(0X07);
WLCDDATA(0X8f);
WLCDCOM(DISPON);
WLCDDATA(0X16);
}
/****************************************************************************
* 名称:FULLSCREEN
* 功能:清除显示屏幕
* 入口参数:无
* 出口参数:无
****************************************************************************/
void FULLSCREEN(void)
//清除显示屏幕
{
//WORD i,j;
WORD i;
//BYTE a;
WLCDCOM(CSRRGT);
WLCDCOM(CSRW);
WLCDDATA(0X00);
WLCDDATA(0X00);
WLCDCOM(MWRITE);
/*
for(i=0;i<320;i++)
{
for(j=0;j<30;j++)
{
WLCDDATA(0xff);
}
}*/
for(i=0;i<9600;i++)
{
WLCDDATA(0xff);
}
}
/****************************************************************************
* 名称:FULLSCREEN
* 功能:清除显示屏幕
* 入口参数:无
* 出口参数:无
****************************************************************************/
void sam1(void)
{
WORD i;
WLCDCOM(CSRRGT);
WLCDCOM(CSRW);
WLCDDATA(0X00);
WLCDDATA(0X00);
WLCDCOM(MWRITE);
for(i=0;i<320*5*2;i++)
{
WLCDDATA(Bmp1[i]);
}
for(i=0;i<320*5*2;i++)
{
WLCDDATA(Bmp1[i]);
}
for(i=0;i<320*5*2;i++)
{
WLCDDATA(Bmp1[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -