2597|0

3

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

LCD液晶显示 [复制链接]

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老有错误,本人菜鸟,希望大虾给予帮助~~~
此帖出自51单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表