📄 lcd.c
字号:
//[LCD.c]液晶显示----------------------------------------------------------*
//本文件包含: *
// (1)LCDInit:液晶显示初始化 *
// (2)LCDShow:在HD44780显示屏上显示数据 *
// (3)LCD_Command:执行给定的cmd命令 *
//硬件连接: *
// (1)LCD的DB0-7与MCU的B口的PTB0-7连接 *
// (2)LCD的RS,R/W,E与MCU的PTM2,PTM3,PTM6连接 *
//-------------------------------------------------------------------------*
//头文件
#include "LCD.h" //液晶显示头文件
//LCDInit:初始化LCD函数----------------------------------------------------*
//功 能:初始化Lcd(HD44780),设置显示方式,清屏,AC自动+1 *
//参 数:无 *
//返 回:无 *
//内部调用函数:LCD_Command *
//-------------------------------------------------------------------------*
void LCDInit(void)
{
INT16U i;
//定义数据口(PTB0-7)为输出
LCDData_D = 0xFF; //数据口为输出
//定义控制口(PTC0-2)为输出
LCDCtrl_D |= (1<<LCDE);
LCDCtrl_D |= (1<<LCDRS);
LCDCtrl_D |= (1<<LCDRW);
//设置指令
LCDCtrl &= ~(1<<LCDRS); //RS、R/W=00,写指令
LCDCtrl &= ~(1<<LCDRW);
LCD_Command(0x38);
//||||||||____ 可设任意值(0/1)
//||||||______ F = 0,5*7点阵模式
//|||||_______ N = 1,2行显示
//||||________ DL = 1,8位数据总线
//|||_________ 固定为001
LCD_Command(0x08); //关显示,关光标显示,不闪烁
LCD_Command(0x01); //清屏
for (i=0; i<20000; i++); //延时>1.6ms
LCD_Command(0X06);
LCD_Command(0x14); //光标右移一个字符位,AC自动加1
LCD_Command(0x0C); //开显示,关光标显示,不闪烁
}
//LCDShow:在HD44780显示屏上显示数据----------------------------------------*
//功 能:在HD44780显示屏显示str所指向的32个数据 *
//参 数:str=待显示的数组 *
//返 回:无 *
//内部调用函数:LCD_Command *
//-------------------------------------------------------------------------*
void LCDShow(INT8U str[])
{
INT8U i;
//1. LCD初始化
LCDInit();
//2. 显示第1行16个字符
//2.1设置显示首地址
LCDCtrl &= ~(1 << LCDRS); //RS,R/W = 00(写的是指令)
LCDCtrl &= ~(1 << LCDRW);
LCD_Command(0x80); //后7位为DD RAM地址(0x00)
//2.2写16个数据到DD RAM
LCDCtrl |= 1 << LCDRS; //RS,R/W = 10(写的是数据)
LCDCtrl &= ~(1 << LCDRW);
//将要显示在第1行上的16个数据逐个写入DD RAM中
for (i = 0;i < 16;i++)
{
LCD_Command(str[i]);
}
//3. 显示第2行16个字符
//3.1设置显示首地址
LCDCtrl &= ~(1 << LCDRS); //RS,R/W = 00(写的是指令)
LCDCtrl &= ~(1 << LCDRW);
LCD_Command(0xC0); //后7位为DD RAM地址(0x40)
//3.2再写16个数据到DD RAM
LCDCtrl |= 1 << LCDRS; //RS,R/W = 10(写的是数据)
LCDCtrl &= ~(1 << LCDRW);
//将要显示在第2行上的16个数据逐个写入DD RAM中
for (i = 16;i < 32;i++)
{
LCD_Command(str[i]);
}
}
//LCD_Command:执行给定的cmd命令--------------------------------------------*
//功 能:执行给定的cmd命令,且延时 *
//参 数:cmd=待执行的命令 *
//返 回:无 *
//-------------------------------------------------------------------------*
void LCD_Command(unsigned char cmd)
{
INT8U i;
//1.等待 > 40us
for (i=0; i<200; i++);
for (i=0; i<200; i++);
for (i=0; i<200; i++);
for (i=0; i<200; i++);
//2.数据送到LCD的数据线上
LCDData = cmd;
//3.给出E信号的下降沿,使数据写入LCD
LCDCtrl |= (1<<LCDE);
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
LCDCtrl &= ~(1<<LCDE); //Lcd结束接收数据
//4.等待 > 40us
for (i=0; i<200; i++);
for (i=0; i<200; i++);
for (i=0; i<200; i++);
for (i=0; i<200; i++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -