📄 lcd.c
字号:
#include "config.h"
/*********************************
**定义坐标
**********************************/
#define LCD_X1 0x80 //X坐标第一行
#define LCD_X2 0x88 //X坐标第二行
#define LCD_Y 0x80 //Y坐标
/*********************************
**定义传送格式
**********************************/
#define LCD_READ 1 //读
#define LCD_WRITE 0 //写
#define LCD_DATA 1 //传数据
#define LCD_COMM 0 //传命令
/*********************************
**定义接线口
**********************************/
#define LCD_CS PORTE.0 //使能
#define LCD_STD PORTE.1 //串行数据
#define LCD_SCLK PORTE.2 //串行时钟
#define LCD_PSB PORTE.5 //高为并行模式,低为串行模式
#define LCD_RST PORTE.7 //复位
#define Float_Dpl_Total 6
//#define Clear_Screen(); Post_Com(0x01);
/***********************
* 函数名称: LcdWrite
** 功能描述: 对LCD写命令或者数据
** 输 入: uint8 read_write:选择read或者write
uint8 data_comm:选择data或者comm
** uint8 content:内容
** 输出 : 无
** 全局变量: 无
** 调用模块:
** 说明:
** 注意:
********************/
void LcdWrite(char data_comm,char content)
{
char a,i,j,k;
delay_us(10);
a=content;
LCD_SCLK=0;
LCD_CS=1;
LCD_STD=1;
for(i=0;i<5;i++)//5个连续的“1”
{
LCD_SCLK=1;
LCD_SCLK=0;
}
//传输方向,读或写
/*if(0)
LCD_STD=LCD_READ;
else
LCD_STD=LCD_WRITE;*/
LCD_STD=LCD_WRITE;
LCD_SCLK=1;
LCD_SCLK=0;
if(data_comm)//命令或数据
LCD_STD=LCD_DATA;
else
LCD_STD=LCD_COMM;
LCD_SCLK=1;
LCD_SCLK=0;
LCD_STD=0;//第八位为“0”
LCD_SCLK=1;
LCD_SCLK=0;
for(j=0;j<2;j++)
{
for(k=0;k<4;k++)
{
a=a<<1;
LCD_STD=SREG.0;//依位写入content
LCD_SCLK=1;
LCD_SCLK=0;
}
LCD_STD=0;
for(k=0;k<4;k++)
{
LCD_SCLK=1;
LCD_SCLK=0;
}
}
}
/***********************
* 函数名称: LcdInit
** 功能描述: 初始化LCD
** 输 入: 无
** 输出 : 无
** 全局变量: 无
** 调用模块:
** 说明:
**04:光标左移,DDRAM为读
**05:光标左移,DDRAM为写
**06:光标右移,DDRAM为读
**07:光标右移,DDRAM为写
**08:整体显示OFF,光标显示OFF,光标位置不反白闪烁
**0C:整体显示ON ,光标显示OFF,光标位置不反白闪烁
**0D:整体显示ON ,光标显示OFF,光标位置反白闪烁
**0E:整体显示ON ,光标显示ON,光标位置不反白闪烁
**0F:整体显示ON ,光标显示ON,光标位置反白闪烁
** 注意:
********************/
void LcdInit (void)
{
LCD_RST=1;
LCD_PSB=0;
LcdWrite (LCD_COMM,0x30); //30---基本指令动作
LcdWrite (LCD_COMM,0x01); //清屏,地址指针指向00H
delay_us(100);
LcdWrite (LCD_COMM,0x06); //光标的移动方向
LcdWrite (LCD_COMM,0x0f); //开显示,关游标
}
/***********************
* 函数名称: LcdClear
** 功能描述: 清屏
** 输 入: 无
** 输出 : 无
** 全局变量: 无
** 调用模块:
** 说明:
** 注意:
********************/
void LcdClear(void)
{
LcdWrite(LCD_COMM,0x30);//八位控制接口 基本指令
LcdWrite(LCD_COMM,0x01);//清除显示 将DDRAM填满“20H”(空格),把DDRAM地址计数器调整为“00H”
delay_us(250); //重新进入点设定将I/D设为“1”,光标右移AC加1
}
/***********************
* 函数名称: LcdSetCursor
** 功能描述: 设置光标
** 输 入: 无
** 输出 : 无
** 全局变量: 无
** 调用模块:
** 说明:
** 注意:
********************/
/*void LcdSetCursor(char x,char y)
{
LcdWrite(LCD_COMM,)
} */
/***********************
* 函数名称: LcdDisplayChn
** 功能描述: 显示汉字或者字符
** 输 入: 无
** 输出 : 无
** 全局变量: 无
** 调用模块:
** 说明:
** 注意:
********************/
void LcdDisplayChn(flash unsigned int *chn)//程序区存放指针变量
{
char i,j;
LcdWrite(LCD_COMM,0x30);//基本指令
LcdWrite(LCD_COMM,0x80);//设定DDRAM地址80H——9FH
/********************
LcdWrite(LCD_DATA,0x55); //调试用
********************/
for(i=0;i<4;i++)//4行
{
for(j=0;j<16;j++)//16列
LcdWrite(LCD_DATA,chn[j*16+i]);//逐字写入
}
}
/***********************
* 函数名称: LcdDisplayString
** 功能描述: 显示字符串
** 输 入: 无
** 输出 : 无
** 全局变量: 无
** 调用模块:
** 说明:
** 注意:
********************/
void LcdDisplayString(flash unsigned char *da)
{
LcdWrite(LCD_COMM,0x30);
LcdWrite(LCD_COMM,0x0f);
for(;*da!='\0';da++)
{
LcdWrite(LCD_DATA,*da);
delay_ms(250);
delay_ms(250);
}
}
void LcdDisplayFloat(float da)
{
LcdWrite(LCD_COMM,0x30);
LcdWrite(LCD_COMM,0x0f);
LcdWrite(LCD_DATA,da);
delay_ms(250);
delay_ms(250);
}
/***********************
* 函数名称: LcdDisplayNumber
** 功能描述: 显示数字
** 输 入: float fNum数字
char i整数位数
char j小数位数
** 输出 : 无
** 全局变量: 无
** 调用模块:
** 说明:
** 注意:
********************/
void LcdDisplayNumber(float fNum,char i,char,j)
{
char n=0;
float b=1;
if(i!=1)
{
n=i;
n--;
while(n)
{
b=10*b;
n--;
}
}
for(n=0;n<(j+i);n++)
{
float a=0;
a=(fNum/b);
if(a!=0)
fNum=fNum-a*b;
LcdWrite(LCD_COMM,0x30);
LcdWrite(LCD_COMM,0x0c);
LcdWrite(LCD_DATA,a+0x30);
if(1==b&j!=0)
{
wr_lcd(comm,0x30);
wr_lcd(comm,0x0c);
wr_lcd(dat,0x23);
}
b=b/10;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -