找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3290|回复: 12
收起左侧

求助:51单片机1602显示汉字程序显示出来不对

  [复制链接]
ID:876099 发表于 2021-3-23 14:49 | 显示全部楼层 |阅读模式
下面是程序,我看了一下网上的1602显示汉字程序应该就是这样的,但是显示出来不对,想了半天没想出来哪里有问题,请各位大神帮忙看看哪里有问题,还有一个小问题就是这么关闭掉每次清屏,,求助各位大神帮忙看看,,谢谢了
单片机源程序如下:
  1. #include <REGX51.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define DB P0
  5. sbit rs=P2^6;
  6. sbit rw=P2^5;
  7. sbit e=P2^7;
  8. uchar code dm[]={0x40,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02};
  9. uchar i;

  10. void  xie_data(uchar  sj);
  11. void  ys(uint  t);
  12. void  xie_ml(uchar  ml);
  13. void  display(uchar x,uchar y,uchar sj);
  14. void  init();
  15. void ys(uint t)
  16. {
  17.   while(t--);
  18. }
  19. void xie_data(uchar sj)
  20. {
  21.    rs=1;
  22.    rw=0;
  23.    e=0;

  24.    DB=sj;
  25.    e=1;
  26.    ys(1000);
  27.    e=0;
  28. }
  29. void  xie_ml(uchar ml)
  30. {
  31.    rs=0;
  32.    rw=0;
  33.    e=0;

  34.    DB=ml;
  35.    e=1;
  36.    ys(1000);
  37.    e=0;
  38. }
  39. void  display(uchar x,uchar y,uchar sj)
  40. {
  41.     if(y)
  42.         {
  43.           xie_ml(0x80|0x40|x);
  44.           xie_data(sj);
  45.         }
  46.         else
  47.         {
  48.           xie_ml(0x80|x);
  49.           xie_data(sj);
  50.         }
  51. }
  52. void  init()
  53. {
  54.   xie_ml(0x38);
  55.   ys(100);
  56.   xie_ml(0x0c);
  57.   ys(100);
  58.   xie_ml(0x06);
  59.   ys(100);
  60.   xie_ml(0x01);
  61.   ys(100);
  62.   xie_ml(0x80);
  63.   ys(100);
  64. }
  65. void main()
  66. {
  67.   init();
  68.   while(1)
  69.   {
  70.    for(i=0;i<8;i++)
  71.    {
  72.             display(0,0,dm[i]);
  73.          ys(50);
  74.    }
  75.   }
  76. }
复制代码

初始化程序没问题就是不知道怎么显示,求助各位大神,谢谢

这是连接原理图

这是连接原理图


回复

使用道具 举报

ID:207421 发表于 2021-3-23 17:09 | 显示全部楼层
仔细看看说明书,硬件接线错了没
然后才看程序

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:876099 发表于 2021-3-23 19:07 | 显示全部楼层
lwh999995 发表于 2021-3-23 17:09
仔细看看说明书,硬件接线错了没
然后才看程序

能正常显示数字、字母,就是不知道汉字显示哪里错了
回复

使用道具 举报

ID:390416 发表于 2021-3-23 19:18 | 显示全部楼层
看我发的贴子,里面就有LCD1602显示特殊字符。举一反三 自己显示汉字
回复

使用道具 举报

ID:824490 发表于 2021-3-24 09:30 | 显示全部楼层
1602显示不了汉字,没有汉字库,只能显示ASC字符,或可以通过代码组合出有限的几个汉字,但,很丑!
回复

使用道具 举报

ID:139866 发表于 2021-3-24 09:51 | 显示全部楼层
1602一个小格也没几个像素吧,写个复杂的汉字那不全黑了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:213173 发表于 2021-3-24 10:25 | 显示全部楼层
1045964948 发表于 2021-3-23 19:07
能正常显示数字、字母,就是不知道汉字显示哪里错了

LCD1602是5*7点阵,只能显示简单汉字。把你的程序改写加简单汉字。 无标题.jpg

  1. #include <AT89X52.H>
  2. //#include <REGX51.H>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define DB P0
  6. sbit rs=P2^6;
  7. sbit rw=P2^5;
  8. sbit e=P2^7;
  9. //uchar code dm[]={0x40,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02};
  10. //年、月、日汉字代码数组
  11. unsigned char character0[24] = {
  12. 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,  //"年"地址代码 0x00
  13. 0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00,  //"月"地址代码 0x01
  14. 0x0F,0x09,0x09,0x0F,0x09,0x09,0x0F,0x00,  //"日"地址代码 0x02
  15. };

  16. uchar code dm[]={'2','0','2','1',0x00,'0','3',0x01,'2','4',0x02,' ','W','E','D'};

  17. uchar i;

  18. void  xie_data(uchar  sj);
  19. void  ys(uint  t);
  20. void  xie_ml(uchar  ml);
  21. void  display(uchar x,uchar y,uchar sj);
  22. void  init();

  23. void ys(uint t)//T=t*9+16us
  24. {
  25.   while(t--);
  26. }
  27. void xie_data(uchar sj)
  28. {
  29.    rs=1;
  30.    rw=0;
  31.    e=0;

  32.    DB=sj;
  33.    ys(100);
  34.    e=1;
  35.    ys(100);
  36.    e=0;
  37. }
  38. void  xie_ml(uchar ml)
  39. {
  40.    rs=0;
  41.    rw=0;
  42.    e=0;

  43.    DB=ml;
  44.    ys(100);
  45.    e=1;
  46.    ys(100);
  47.    e=0;
  48. }
  49. void  display(uchar x,uchar y,uchar sj)
  50. {
  51.         if(y)
  52.         {
  53.                 xie_ml(0x80|0x40|x);
  54.                 xie_data(sj);
  55.         }
  56.         else
  57.         {
  58.                 xie_ml(0x80|x);
  59.                 xie_data(sj);
  60.         }
  61. }
  62. void  init()
  63. {
  64.   xie_ml(0x38);
  65.   ys(100);
  66.   xie_ml(0x0c);
  67.   ys(100);
  68.   xie_ml(0x06);
  69.   ys(100);
  70.   xie_ml(0x01);
  71.   ys(100);
  72.   xie_ml(0x80);
  73.   ys(100);
  74. }
  75. void main()
  76. {
  77.         init();
  78.         xie_ml(0x40);                //向LCD自定义存储器写入"年"、"月"、"日"
  79.         for (i=0;i<24;i++)
  80.                 xie_data(character0[i]);

  81.         for(i=0;i<15;i++)        //写第一行字符
  82.                 display(i+1,0,dm[i]);

  83.         while(1);
  84. }
复制代码




回复

使用道具 举报

ID:517951 发表于 2021-3-24 10:55 | 显示全部楼层
1602是可以显示年月日这种简单的汉字, 复杂的就不行了.
是写进自定义字符区里面.显示方法和英文字符一样.
回复

使用道具 举报

ID:47286 发表于 2021-3-24 11:20 | 显示全部楼层
你买的1602带字库么
回复

使用道具 举报

ID:876099 发表于 2021-3-24 23:32 来自手机 | 显示全部楼层
wulin 发表于 2021-3-24 10:25
LCD1602是5*7点阵,只能显示简单汉字。把你的程序改写加简单汉字。

谢谢大神非常感谢
回复

使用道具 举报

ID:876099 发表于 2021-3-24 23:33 来自手机 | 显示全部楼层
人人学会单片机 发表于 2021-3-23 19:18
看我发的贴子,里面就有LCD1602显示特殊字符。举一反三 自己显示汉字

好的谢谢
回复

使用道具 举报

ID:876099 发表于 2021-3-24 23:34 来自手机 | 显示全部楼层
rayin 发表于 2021-3-24 10:55
1602是可以显示年月日这种简单的汉字, 复杂的就不行了.
是写进自定义字符区里面.显示方法和英文字符一样.

好的现在懂了
回复

使用道具 举报

ID:876099 发表于 2021-3-27 11:19 | 显示全部楼层
wulin 发表于 2021-3-24 10:25
LCD1602是5*7点阵,只能显示简单汉字。把你的程序改写加简单汉字。

谢谢大神,还有个问题想请教一下,就是下面这段程序中为什么需要写0x01~0x07送到0x80
我改成像你的程序那种直接写完0x40然后送数据就显示不了
  1. #include <REGX51.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define sc P0
  5. sbit rs=P2^6;
  6. sbit rw=P2^5;
  7. sbit e=P2^7;

  8. //uchar code table[]={0x1F,0x04,0x04,0x1F,0x04,0x05,0x1F,0x00};
  9. uchar code table[]={
  10. 0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,//一
  11. 0x00,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,//二
  12. 0x00,0x1F,0x00,0x0E,0x00,0x1F,0x00,0x00,//三
  13. 0x02,0x04,0x0F,0x12,0x0F,0x0A,0x1F,0x02,//年
  14. 0x0F,0x09,0x0F,0x09,0x0F,0x09,0x09,0x11,//月
  15. 0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,//日
  16. 0x00,0x00,0x00,0x0A,0x15,0x0A,0x04,0x00,//心型
  17. 0x00,0x04,0x15,0x0E,0x1F,0x0E,0x11,0x00//坦克
  18. };
  19. uchar code table1[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};  //自定义字符数据地址

  20. uchar code table2[]="QQ:1045964948";

  21. void xie_date(uchar sj);
  22. void xie_ml(uchar ml);
  23. void delay(uint t);
  24. void init();

  25. void delay(uint t)
  26. {
  27. while(t--);
  28. }

  29. void xie_date(uchar sj)
  30. {
  31. rs=1;
  32. rw=0;
  33. e=0;
  34. sc=sj;
  35. e=1;
  36. delay(500);
  37. e=0;
  38. }

  39. void xie_ml(uchar ml)
  40. {
  41. rs=0;
  42. rw=0;
  43. e=0;
  44. sc=ml;
  45. e=1;
  46. delay(500);
  47. e=0;
  48. }

  49. void init()
  50. {
  51. xie_ml(0x38);
  52. xie_ml(0x0c);
  53. xie_ml(0x06);
  54. xie_ml(0x01);
  55. xie_ml(0x80);
  56. }

  57. void main()
  58. {
  59. uchar i;
  60. init();
  61. while(1)
  62. {
  63.   xie_ml(0x40);
  64.   for(i=0;i<64;i++)
  65.   {
  66.    xie_date(table[i]);
  67.    delay(50);
  68.   }
  69.   xie_ml(0x80);
  70.   for(i=0;i<8;i++)
  71.   {
  72.    xie_date(table1[i]);
  73.    delay(50);
  74.   }
  75.   xie_ml(0xc0);
  76.   for(i=0;i<13;i++)
  77.   {
  78.    xie_date(table2[i]);
  79.    delay(50);
  80.   }
  81. }
  82. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表