📄 lcd.c
字号:
/*****************************************LCD 模块*****************************************
*功能描述:显示模块
*
*调用接口:先调用lcd_init(),然后调用lcd_display()显示lcd_line0和lcd_line1的内容
*
*作 者:廖聪慧
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
********************************************************************************************/
#include<ht46ru232.h>
#include"lcd.h"
/******************************************************************************************
* 函数名称 :lcd_wait_ready
* 功能描述 :判断lcd是否处于忙状态,并等待到其不忙
* 参数 : 参数名称:无 输入/输出 类型 描述
*
* 返回值 :无
* 创建日期 :2009-3-25
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
********************************************************************************************/
void lcd_wait_ready()
{
do
{
lcd_data_port_ctrl=0x00;
RS_CTRL=0;
RS=0;
RW_CTRL=0;
RW=1;
EN_CTRL=0;
EN=0;
_delay(3);
EN=1;
lcd_data_port=0xff;
lcd_data_port_ctrl=0xff;
}while(busy);
lcd_data_port_ctrl=0x00;
}
/******************************************************************************************
* 函数名称 :lcd_write_cmd
* 功能描述 :向lcm写入lcd_data_port的命令
* 参数 : 参数名称:无 输入/输出 类型 描述
*
* 返回值 :无
* 创建日期 :2009-3-25
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
********************************************************************************************/
void lcd_write_cmd()
{
RS_CTRL=0;
RS=0;
_delay(1);
RW_CTRL=0;
RW=0;
_delay(1);
EN_CTRL=0;
EN=0;
lcd_wait_ready();
EN=1;
}
/******************************************************************************************
* 函数名称 :lcd_write_data
* 功能描述 :向lcm写入lcd_data_port的数据
* 参数 : 参数名称:无 输入/输出 类型 描述
*
* 返回值 :无
* 创建日期 :2009-3-25
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
********************************************************************************************/
void lcd_write_data()
{
RS_CTRL=0;
RS=1;
_delay(1);
RW_CTRL=0;
RW=0;
_delay(1);
EN_CTRL=0;
EN=0;
lcd_wait_ready();
EN=1;
}
/******************************************************************************************
* 函数名称 :lcd_init
* 功能描述 :初始化lcd
* 参数 : 参数名称:无 输入/输出 类型 描述
*
* 返回值 :无
* 创建日期 :2009-3-25
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
********************************************************************************************/
void lcd_init()
{
lcd_data_port_ctrl=0;
lcd_data_port=0x01;
;
lcd_write_cmd();
lcd_data_port=0x38;
lcd_write_cmd();
lcd_data_port=0x0f;
lcd_write_cmd();
lcd_data_port=0x06;
lcd_write_cmd();
}
/******************************************************************************************
* 函数名称 :lcd_display
* 功能描述 :显示两行数据
* 参数 : 参数名称:无 输入/输出 类型 描述
*
* 返回值 :无
* 创建日期 :2009-3-25
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
********************************************************************************************/
void lcd_display()
{
unsigned char lcd_index;
//写控制口,显示第一行
lcd_data_port_ctrl=0x00;
lcd_data_port=0x00;
lcd_data_port|=0x80;
lcd_write_cmd();
//显示字符
for(lcd_index=0 ; lcd_index < 16 ; lcd_index++)
{
lcd_data_port_ctrl=0x00;
lcd_data_port=lcd_line0[lcd_index];
lcd_write_data();
}
//写控制口,显示第二行
lcd_data_port_ctrl=0x00;
lcd_data_port=0x40;
lcd_data_port|=0x80;
lcd_write_cmd();
//显示第二行字符
for(lcd_index=0 ; lcd_index < 16 ; lcd_index++)
{
lcd_data_port_ctrl=0x00;
lcd_data_port=lcd_line1[lcd_index];
lcd_write_data();
}
}
void main()
{
unsigned char i,j;
for(i=0 ; i < 16 ; i++)
{
lcd_line0[i]='a'+i;
lcd_line1[i]='z'-i;
}
lcd_init();
lcd_display();
for(i=0xff ; i > 0 ; i--)
{
for(j=0x20 ; j > 0 ; j--)
{
_delay(5000);
}
}
for(i=0 ; i < 16 ; i++)
{
lcd_line0[i]='z'-i;
lcd_line1[i]='a'+i;
}
lcd_display();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -