• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

51单片机驱动LCD1602只能显示单字符什么鬼?

hayden 2018-06-11 浏览量:1584

用51单片机驱动1602,结果只能这样显示单字符:


LCD1602_Write_Dat('O');
LCD1602_Write_Dat('K');
不能这样显示字符串:
uchar code table[]="I LOVE MCU!"
    for(n=0;n<=11;n++)
	{
      LCD1602_Write_Dat(table[n]);
	}

已解决:

把原有代码移植到新工程就好了,程序没问题,不知道是工程

出现了什么问题,编译没有问题。


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 你这样的现象建议你查看一下你对1602显示模块的初始化部分,是不是初始化的时候选择了显示完一个字符后光标不移动,如果你要显示一个或者几个单词的话,应该初始化为显示完一个字符后光标右移,显示地址+1!不然就会造成在一个地方显示,这样就只能显示最后一个字符了!如果你的初始化部分是没错的,那你应该检查一下你的字符串写入函数是否有没有做相应的判断!
    • 发布于 2018-06-11
    • 举报
    • 评论 6
    • 0
    • 0
hayden 回复了 奔跑的黑蚂蚁:LCD1602_Write_Cmd(0x06); //文字不动,地址自动+1 回复
奔跑的黑蚂蚁 回复了 奔跑的黑蚂蚁:那这句是没错的,你看看我的初始化代码:void lcdinit_1602() { rw_1602=0; e=0; write_byte_74hc595(0X02);//¹ØÁ÷Ë®µÆʹÄÜ ¹Ø·äÃùÆ÷ ¹â¼ÌµçÆ÷ ´ò¿ª1602±³¹â´ò¿ª write_order_1602(0x38); //Òº¾§ÉèÖò»ÅÐæģʽ write_order_1602(0x0c); //¿ªÏÔʾ ²»ÏÔʾ¹â±ê write_order_1602(0x06); //µ±Ð´Ò»¸ö×Ö·ûÊÇ£¬µØÖ·Ö¸Õë¼Ó 1 write_order_1602(0x01); //ÏÔʾÇåÆÁ } 回复
奔跑的黑蚂蚁 回复了 奔跑的黑蚂蚁:怎么都是乱码? 回复
奔跑的黑蚂蚁 回复了 奔跑的黑蚂蚁:void lcdinit_1602() { rw_1602=0; e=0; write_order_1602(0x38); write_order_1602(0x0c); write_order_1602(0x06); write_order_1602(0x01); } 回复
奔跑的黑蚂蚁 回复了 奔跑的黑蚂蚁:write_order_1602(0x38); write_order_1602(0x0c); write_order_1602(0x06); write_order_1602(0x01);这是初始化代码 回复
奔跑的黑蚂蚁 回复了 奔跑的黑蚂蚁:void writelcd(char *pt) { while(*pt) write(*pt++); }这显示一个字符串数组的函数。 回复

其他答案 数量:12
  • 你这个函数看着就有点诡异啊,看着像1602驱动内部的函数......

    建银看一下1602的驱动函数

    一般是这样的

    1.JPG

    • 发布于2018-06-11
    • 举报
    • 评论 3
    • 0
    • 0
hayden 回复了 fighter-12315 :图片被吞了 回复
fighter-12315 回复了 fighter-12315 :那我私发给你吧 回复
hayden 回复了 fighter-12315 :能看见了,函数是我自己写的,不是你说的这些函数,我就是用但字符显示函数显示字符传输组里的字符无法显示,单独显示一个字符可以 回复

  • 朋友 你需要看看LCD1602_Write_Dat的定义的,这个根据楼上的截图可以看出,不是写字符串的指令。
    • 发布于2018-06-11
    • 举报
    • 评论 5
    • 0
    • 0
hayden 回复了 yangjiaxu :LCD1602_Write_Dat是写单字符的函数这个我知道,放在for循环读取字符串数组就是等于字符串了 回复
fighter-12315 回复了 yangjiaxu :字符串只有一个字符时就是写单字符啊,所以没必要有写单字符函数,而且你的写字分函数没有定位的入口参数,即行列数,就算是写指针自动后移这样也是不方便的 回复
fighter-12315 回复了 yangjiaxu :不好意思回复错了...... 回复
fighter-12315 回复了 hayden :看上面 回复
hayden 回复了 fighter-12315 :定位函数没问题,但字符串可以显示,但是我把字符串数组连着输出就没法显示 回复

  • 字符串有结束符的,楼主检查一下有没有做结束符的判断?
    • 发布于2018-06-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 你看一下你调用的接口,假设你是1602你能知道调用接口的人是想在同一个位置显示不同字符,还是把字符显示在不同位置吗?想显示字符串,每个字符的显示位置信息也得传给1602呀,当然也可以用光标自动移动的方式,但是不算啥方式,重点是显示位置得由你指定
    • 发布于2018-06-12
    • 举报
    • 评论 0
    • 0
    • 0

  • table 是code,而不是ram,函数本身要求ram
    • 发布于2018-06-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 应该是初始化问题 检查一下初始化使用的引脚和代码
    • 发布于2018-06-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 你这个是在同一位置显示的吧?最好在高数入口写一个标。
    • 发布于2018-06-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 不是不能显示是你的程序有问题,好好调试一下吧,查查是不是有别的东西影响了
    • 发布于2018-06-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个可以选择双字符的,你需要检查一下你的程序是否有多字节切换导致丢数据位的问题
    • 发布于2018-06-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 仔细检查一下的驱动是不是正常的,如果时序对应是可以写多个字符的
    • 发布于2018-06-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 首先要看一下这个函数的参数能不能是字符串,一般来说1602这种器件都是一个个字符进行写入的
    • 发布于2018-06-12
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

51单片机驱动LCD1602只能显示单字符什么鬼?