📄 lcd.c
字号:
/********************************************************************
created: 2005/11/02
created: 2:11:2005 20:48
filename: D:\astario\workspace\MCUcode\src\lcd.c
file path: D:\astario\workspace\MCUcode\src
file base: lcd
file ext: c
author: Astario
purpose: 液晶显示
最后修改: 2005/11/23 18:45:49
*********************************************************************/
#include "userdef.h"
#include "device.h"
#include "lcd.h"
#include "generalfunc.h"
#ifdef INCLUDE_lcd
/*==================================================*/
/*GDM12864E LCD */
/*==================================================*/
void LCD_Wr_Cmd(BYTE One_Byte)
{
delay_Nms(1);
ChipselNone();
_nop_();
//MPU 写指令到指令暂存器(IR)
LCD_RS=0;//DB7——DB0 为显示指令数据
LCD_RW=0;//写
PORTDATA=One_Byte;
ChipselLCD();
_nop_();
_nop_();
ChipselNone();//LCDCS高变低时写入,高时读取,其他无动作
_nop_();
LCD_Rd_Busy();
delay_Nms(1);
}
void LCD_Wr_Data(BYTE One_Byte)
{
ChipselNone();
_nop_();
//MPU 写入数据到数据暂存器(DR)
LCD_RS=1;//DB7——DB0 为显示数据
LCD_RW=0;//写
PORTDATA=One_Byte;
ChipselLCD();
_nop_();
_nop_();
ChipselNone();
_nop_();
LCD_Rd_Busy();
}
#if(0)
BYTE LCD_Rd_Data()
{
BYTE ret;
ChipselNone();
PORTDATA=0xff;
_nop_();
LCD_RS=1;//DB7——DB0 为显示数据
LCD_RW=1;//从内部RAM 读取数据D7——D0
ChipselLCD();
_nop_();
_nop_();
ret=PORTDATA;
ChipselNone();
_nop_();
return ret;
}
#endif
BYTE LCD_Rd_Cmd()
{
BYTE ret;
ChipselNone();
PORTDATA=0xff;
_nop_();
LCD_RS=0;//DB7——DB0 为显示指令数据
LCD_RW=1;//读出忙标志(BF)及地址记数器(AC)的状态
ChipselLCD();
_nop_();
_nop_();
ret=PORTDATA;
ChipselNone();
_nop_();
return ret;
}
//遇0返回
void LCD_Wr_Bytes(BYTE* str, BYTE n)
{
BYTE i;
for (i=0;i<n && str[i]!=0;i++)
{
LCD_Wr_Data(str[i]);
}
}
void LCD_Wr_String(BYTE* str)
{
BYTE i=0;
while (str[i])
{
LCD_Wr_Data(str[i]);
i++;
}
}
/*LCD initiate*/
void LCD_init()
{
LCD_Wr_Cmd(0x30); /*0x30 8bits , base function*/
delay_Nms(10);
LCD_Wr_Cmd(0x0C); /*0x0F Display on,无游标,无反白 */
delay_Nms(10);
//LCD_Wr_Cmd(0x03); //AC归0,不改变DDRAM内容
LCD_Wr_Cmd(0x01); /*0x01 clear display*/
delay_Nms(10);
LCD_Wr_Cmd(0x06); /* 0x06 cussor right move ,ACC+1*/
delay_Nms(10);
LCD_BACKLIGHT=!LCD_BACKLIGHT; //没有这一句背光点不亮,奇怪了
LCD_SetBGLight(1);
}
/*设置显示位置, row:1,2,3,4; position 1,2...8 */
code BYTE DDRAMEbase[4]={0x80,0x90,0x88,0x98};
void LCD_Wr_Num(WORD num,BYTE len)//按照固定长度显示数字,如果长度=0则正常在LCD上显示
{
BYTE i;
if(!len)
{
i=4;
while (!getdigi(num,i) && i>0)
{
i--;
}
len=i+1;
}
while(len)
{
len--;
LCD_Wr_Data(getdigi(num,len)+0x30);
}
}
void LCD_Wr_BCD(BYTE bcd)
{
BYTE tmp=0x30+Hhalf(bcd);
if (tmp>=0x3a)
tmp+=7;
LCD_Wr_Data(tmp);
tmp=0x30+Lhalf(bcd);
if (tmp>=0x3a)
tmp+=7;
LCD_Wr_Data(tmp);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -