LCD液晶显示

2019-03-24 19:19发布

LCD1604驱动模块
/*备注一:LCD1604只含有ASCII码表内字符的字库,无汉字字库,不能自行打点,不便画曲线*/
/*本模板功能一:在任意位置显示阿拉伯数字 */
/*本模板功能二:在任意位置显示字符及字符串 */

#include

#include "lcd1604.h" /*对一些变量宏定义及lcd.c文件中的函数声明 */

sbit RS= P2^0 ; /*指令数据控制口,RS为高为数据,为低则为指令 */
sbit RW= P2^1 ; /*RW位高为读状态,低为写状态 */
sbit EN= P2^2 ; /*EN信号下降沿锁存D7~D0,EN为高是DDRAM将数据读到D7~D0*/

/********************************************************************************************************
** 函数名称: void delay( uint ms )
** 函数功能: 软件延时
** 入口参数: uint ms
** 出口参数: 无
********************************************************************************************************/
void delay( uint ms )
{
uint j;
while(ms--)
for(j=0;j<200;j++) ;
}

/********************************************************************************************************
** 函数名称: uchar Read_LCD_State(void)
** 函数功能: 读数据函数,读取当前P0口的数据状态
** 入口参数: 无
** 出口参数: 无
********************************************************************************************************/
uchar Read_LCD_State(void)
{
uchar P0datastate;
RS=0;RW=1; /*将芯片设置为读数据状态,RS与RW配合使用 */
EN=1;
P0datastate=P0; /*E下降沿读出数据 */
delay(1); /*延时是必须的,根据其时序可知下降沿(下降沿时间要长)数据输出*/
EN = 0;
return P0datastate; /*返回P0口当前的数据 */
}

/********************************************************************************************************
** 函数名称: void LCD_Busy_Wait(void)
** 函数功能: 测忙函数,检测P0^7口的高低电平,为高电平则P0口忙
** 入口参数: 无
** 出口参数: 无
********************************************************************************************************/
void LCD_Busy_Wait(void)
{
while((Read_LCD_State()&0x80)==0x80); /*当P0^7为低电平时,P0口为空闲状态 */
delay(1);
}

/********************************************************************************************************
** 函数名称: void WriteCommand(uchar com)
** 函数功能: 写指令函数,对1604写入控制指令
** 入口参数: uchar com
** 出口参数: 无
********************************************************************************************************/
void WriteCommand(uchar com)
{
LCD_Busy_Wait();
RS=0;RW=0; /*将芯片设置为写指令状态,RS与RW配合使用 */
EN=1;
P0=com;
delay(1);
EN=0;
}

/********************************************************************************************************
** 函数名称: void WriteData(uchar data1)
** 函数功能: 写数据函数,对1604以数据的方式写入信息
** 入口参数: uchar data1
** 出口参数: 无
********************************************************************************************************/
void WriteData(uchar data1)
{
LCD_Busy_Wait();
RS=1;RW=0; /*将芯片设置为写数据状态,RS与RW配合使用 */
EN=1;
P0=data1;
delay(1);
EN=0;
}

/********************************************************************************************************
** 函数名称: void LCD_INIT(void)
** 函数功能: 对1604进行初始化,查阅lcd1604指令表
** 入口参数: 无
** 出口参数: 无
********************************************************************************************************/
void LCD_INIT(void)
{
WriteCommand(0x38); /* 显示模式设置 */
delay(1);
WriteCommand(0x01); /* 显示清屏 */
delay(1);
WriteCommand(0x06); /* 光标移动设置 */
delay(1);
WriteCommand(0x0c); /* 开及光标设置 */
delay(1);
}

/********************************************************************************************************
** 函数名称: void PutString(uchar row,uchar *str)
** 函数功能: 显示ASCILL 字符函数,其中row为要显示字符的行数
** 入口参数: uchar row,uchar *str
** 出口参数: 无
********************************************************************************************************/
void PutString(uchar row,uchar *str)
{
uchar i,address;
if(row==1) address=0x00; /*在第一行写字符*/
if(row==2) address=0x40; /*在第二行写字符*/
if(row==3) address=0x10; /*在第三行写字符*/
if(row==4) address=0x50; /*在第四行写字符*/
WriteCommand(address|0x80) ; /*写地址格式为最高位为1*/
for(i=0;i<16;i++)
{
WriteData(str);
delay(1);
}
}

我想最后输出4行字符
假如我想输出这样的字符串,怎么修改以上的程序,在程序末尾怎么修改?
第一行1 99 99 5 99 99
第二行2 99 99 6 99 99
第三行3 99 99
第四行4 99 99
意思是第一行输出1空格99空格99空格空格5空格99空格99
这样正好能用完16个字符
问题是你的程序结尾没有说明怎么修改添加这些字符。
QQ346031745 谢谢了。
大家能不能测试一下程序,我用Keil老有错误,本人菜鸟,希望大虾给予帮助~~~ 此帖出自小平头技术问答
0条回答

一周热门 更多>