📄 lcd.c
字号:
/*******************************************
-------头文件信息--------------------------
*******************************************/
//#include "config_LCD.H"
#include "c8051f020.h"
#include "intrins.h"
#include "lcd.h"
xdata unsigned short LCD_DATA1[64][8]={0};
unsigned char cc=0;
code unsigned char WindowsFronts[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
/***********************************************************/
extern unsigned char code tbl[10]={48,49,50,51,52,53,54,55,56,57};//0-9 ascii code
/**************************************************************
----------液晶配置子程序---------------------------------------
***************************************************************/
void LCD_Config (void)
{
WDTCN=0X07;
WDTCN=0XDE;
WDTCN=0XADL;
OSCXCN=0X00;
OSCICN=0x06;
}
/**************************************************************
------延时US子程序---------------------------------------------
***************************************************************/
void Delay1us(unsigned char us)
{
while (us)
{
_nop_();
--us;
}
}
/*****************************************************************
------延时MS子程序-----------------------------------------------
*****************************************************************/
void Delay1ms(unsigned char ms)
{
unsigned char i;
while (ms)
{ for(i=0;i<255;i++)
{ _nop_(); _nop_();}
for(i=0;i<255;i++)
{ _nop_(); _nop_();}
for(i=0;i<255;i++)
{ _nop_(); _nop_();}
for(i=0;i<255;i++)
{ _nop_(); _nop_();}
for(i=0;i<255;i++)
{ _nop_(); _nop_();}
for(i=0;i<25;i++)
{ _nop_(); _nop_();}
--ms;
}
}
/************************************************************************
------等待LCD空闲子程序--------------------------------------------------
*************************************************************************
说明:入口参数:无
出口参数:无
************************************************************************/
void LCD_WaitReady(void)
{
//while(!(LCD_State()&0x80));
Delay1us(40);
}
/************************************************************************
------向LCD发送控制命令子程序--------------------------------------------
*************************************************************************
说明:入口参数:命令值
出口参数:无
*************************************************************************/
void LCD_WriteCommand(char ch) //
{
LCD_WaitReady();
LCD_CMD=0x04; //LCD_RW=0,LCD_RS=0,LCD_E=0;
_nop_();
_nop_();
LCD_DATA=ch;
Delay1us(10);
Delay1us(10);
LCD_CMD=!LCD_CMD;
}
/*******************************************************************************
------向LCD发送数据命令子程序---------------------------------------------------
********************************************************************************
说明:入口参数:数据
出口参数:无
*******************************************************************************/
void LCD_WriteData(char ch) //向LCD发送
{
LCD_WaitReady();
LCD_CMD=0x05; //LCD_RW=0,LCD_RS=1,LCD_E=1;
_nop_();
_nop_();
LCD_DATA=ch;
Delay1us(10);
Delay1us(10);
LCD_CMD=!LCD_CMD;
}
/*
unsigned short LCD_ReadData(void)
{
unsigned char state_H,state_L;
LCD_WaitReady();
LCD_CMD=0xff; //LCD_RW=1,LCD_RS=1,LCD_E=1;
_nop_();
state_H=LCD_DATA;
Delay1ms(4);
state_L=LCD_DATA;
LCD_CMD=!LCD_CMD;
return state_H*256+state_L;
}
*/
/********************************************************************
------图形界面初始化子程序----------------------------------------------
********************************************************************/
void LCD_GRAPH_CLEAR(void)
{
unsigned char i,j;
for(i=0;i<0x20;i++)
{
for(j=0;j<0x10;j++)
{
LCD_WriteCommand(0x80+i);
LCD_WriteCommand(0x80+j);
//Delay1ms(1);
_nop_();
LCD_WriteData(0x00);
LCD_WriteData(0x00);
}
}
}
/********************************************************************
------向LCD初始化子程序----------------------------------------------
*********************************************************************
说明:入口参数:无
出口参数:无
*********************************************************************/
void LCD_Init(void) //初始化LCD
{
Delay1ms(60);
FUNCTION_BASIC(); //基本指令动作
Delay1us(150);
FUNCTION_BASIC();
Delay1us(60);
LCD_DISP_ON(); //开显示
Delay1us(150);
LCD_CLEAR(); //清屏
Delay1ms(20);
LCD_ENTRYMODE_INC(); //光标移动方式为增加
}
/**************************************************************************
------坐标变换子程序-------------------------------------------------------
***************************************************************************
说明:入口参数:坐标,坐标
出口参数:成功与否
**************************************************************************/
unsigned char LCD_Goto(unsigned char x,unsigned char y)
{unsigned char cur;
x=x-1;y=y-1;
if((y>=0)&&(y<8))
switch(x)
{case 0:
{
cur=y;
LCD_SETADD();
break;
}
case 1:
{
cur=16+y;
LCD_SETADD();
break;}
case 2:
{
cur=8+y;
LCD_SETADD();
break;
}
case 3:
{
cur=24+y;
LCD_SETADD();
break;
}
default:
{break;}
}
else
return ERR;
}
/**************************************************************************
------向指定坐标位置写字符子程序-------------------------------------------------------
***************************************************************************
说明:入口参数:坐标,坐标,字符
出口参数:成功与否
**************************************************************************/
void LCD_PutChar(unsigned char x,unsigned char y, unsigned char ch)
{LCD_Goto(x,y);
LCD_WriteData(ch);
}
/**************************************************************************
------向LCD指定位置写汉字子程序--------------------------------------------
***************************************************************************
说明:每次只能写一个汉字
入口参数:坐标,坐标,待写字符
出口参数:成功与否
***************************************************************************/
void LCD_PutHZ(unsigned char x,unsigned char y,unsigned int *ptr)
{
unsigned char *temp,i;
LCD_Goto(x,y);
_nop_();
temp=(unsigned char *)ptr;
for(i=0;*temp!=0;i++)
{
LCD_WriteData(*temp);
temp++;
LCD_WriteData(*temp);
temp++;
}
Delay1us(40);
}
/**************************************************************************
------向LCD指定位置写字符串子程序------------------------------------------
***************************************************************************
说明:入口参数:坐标,坐标,待写字符口串
出口参数:成功与否
***************************************************************************/
void LCD_Printf(unsigned char x,unsigned char y,char *ptr)
{unsigned char i;
LCD_Goto(x,y);
_nop_();
for(i=0;*(ptr+i)!=0;i++)
LCD_WriteData(*(ptr+i));
Delay1us(40);
}
//********************************************************************
//向lcd中连续写入半角字符,主要用于十进制数值的字符显示
//入口参数:x坐标,y坐标,半角(数字字符)
//*********************************************************************
void LCD_PutData(unsigned char x,unsigned char y, char *ch)
{static char chh[2];
if (cc==0)
{LCD_Goto(x,y);
LCD_WriteData(*ch);
chh[0]=*ch;
cc=1;
}
else
{chh[1]=*ch;
cc=0;
LCD_Goto(x,y);
LCD_WriteData(*chh);
LCD_WriteData(*(chh+1));
}
}
//***********************************************
//显示十进制数字
//入口参数:坐标,坐标,显示的数据
//由于定义的数据的限制,十进制数据长度最长为9位
//****************************
void LCD_PutDec(unsigned char x,unsigned char y, unsigned long decdata)
{unsigned char dat[Declenth];
unsigned char i,j;
for(i=0;i<Declenth;i++)
{dat[i]=decdata%10;
decdata=decdata/10;
}
for(i=Declenth;i>0;i--)
{if(dat[i-1]>0){j=i;break;}
}
for(i=Declenth;i>j;i--){LCD_PutData(x,(Declenth-i)/2+y,character+11);Delay1ms(1);
}
for(i=j;i>0;i--)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -