[应用方案] 51单片机LCD1602显示汉字

[复制链接]
 楼主| hudi008 发表于 2023-11-26 20:48 | 显示全部楼层 |阅读模式
  1. #define uchar unsigned char
  2. #define uint unsigned int

  3. ///////数据端口接 P0

  4. sbit lcdrs=P2^7;//端口定义
  5. sbit lcdrw=P2^6;//端口定义
  6. sbit lcden=P2^5;//端口定义

  7. uchar num;

  8. uchar code table[]={





  9.                         0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,//一  0x00
  10.                         0x00,0x04,0x1f,0x15,0x15,0x1f,0x04,0x04,//中  0x01
  11.                         0x1F,0x04,0x04,0x06,0x05,0x04,0x04,0x04,//下  0x02
  12.                         0x1F,0x04,0x1F,0x15,0x1F,0x15,0x1F,0x15,//雨  0x03


  13.    0x00,0x00,0x00,0x00,0x1e,0x12,0x12,0x12,//"叶1653"左上半部分代码 0x04
  14.    0x04,0x04,0x04,0x04,0x04,0x04,0x1f,0x04,//"叶"右上半部分代码 0x05
  15.    0x12,0x12,0x12,0x1e,0x00,0x00,0x00,0x00,//"叶"左下半部分代码 0x06
  16.    0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,//"叶"右下半部分代码 0x07  
  17.          
  18. //         


  19.       
  20.       
  21. };

  22. uchar code table1[]={0x00,0x01,0x10,0x10,0x04,0x05,0x10,0x10,0x00,0x01,0x02,0x03,};//自定义字符数据地址



  23. uchar code table2[]={0x02,0x03,0x10,0x10,0x06,0x07,};

  24. /******************************

  25.        ms延时函数

  26. ******************************/



  27. void delay(uchar z)///延时函数


  28. {


  29. uint x,y;


  30. for(x=z;x>0;x--)


  31. for(y=122;y>0;y--);



  32. }

  33. /******************************

  34.    lcd1602写命令函数

  35. ******************************/


  36. void write_cmd(uchar cmd)


  37. {

  38.     P0=cmd; //写了命令

  39.     lcdrs=0;


  40.     lcdrw=0; //选择指令寄存器

  41.   
  42.     lcden=1;




  43.     delay(5);
  44.    

  45. lcden=0; //使能拉低
  46.    

  47. lcden=1;


  48. }



  49. /******************************

  50.     lcd1602写数据函数

  51. ******************************/


  52. void write_date(uchar date)


  53. {


  54.        lcdrs=1;


  55.        lcdrw=0; //选择数据寄存器


  56.        lcden=1;


  57.        P0=date; //写了命令


  58.        delay(5);


  59.        lcden=0; //使能拉低


  60.        lcden=1;


  61. }


  62. /******************************

  63.      lcd1602初始化

  64. ******************************/



  65. void init_lcd1602()


  66. {


  67.      write_cmd(0x01); //清屏
  68.    

  69. write_cmd(0x38); //功能设置


  70.      write_cmd(0x0c); //显示设置


  71.      write_cmd(0x06); //输入方式从左到右


  72.        delay(1);




  73. }



  74. /******************************

  75.         主函数

  76. ******************************/


  77. void main()


  78. {


  79.                         uchar i;
  80.                         init_lcd1602();//1602显示初始化
  81.                         delay(1);
  82.                         while(1)

  83.   {

  84. write_cmd(0x40); //开始写入你要显示的自定义字符、汉字代码
  85.    for(i=0;i<64;i++)
  86.   {

  87. write_date(table[i]);
  88.   delay(5);

  89.   }


  90.   write_cmd(0x80); //从第一行第一列开始显示



  91. for(i=0;i<12;i++) //显示自定义字符

  92. {
  93.   write_date(table1[i]);
  94. delay(5);

  95. }
  96. write_cmd(0xc0); //显示第二行

  97.    for(i=0;i<6;i++)
  98. {

  99. write_date(table2[i]);

  100. delay(5);

  101.       }  

  102. }

  103. }


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

本版积分规则

253

主题

9864

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部