找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12822|回复: 7
收起左侧

LCD2004 LCD1602显示自定义汉字详解

  [复制链接]
ID:161768 发表于 2017-8-19 00:19 | 显示全部楼层 |阅读模式
LCD2004 LCD1602显示自定义汉字详解



  • 取字模

1.1 打开取字模软件

1.2 新建图像8×8

1.3 描绘自定义汉字,只用后5×8点阵(因为LCD2004/LCD1602每个显示单元为5×8点阵)



    • 修改图像图像旋转90°

1.5 取模方式C51格式




    • 复制字模代码,给每一个自定义图汉字/图标定义一个数组

1.6 LCD2004共可显示80个字符(LCD1602共可显示32个字符,原理相同,程序通用)

1.7 只需根据不同的硬件注意PIN口的定义就能正确显示

  • 仿真

  • 源程序



//        .c   文件     //
  1. #include<reg51.h>
  2. #include<intrins.h>                                          //              _nop_();
  3. #include"lcd.h"
  4. //#include"temp.h"
  5. //#include"ds1302.h"
  6. //#include"i2c.h"


  7. sbit K1=P3^0;                            //数据-
  8. sbit K2=P3^1;                            //数据+
  9. sbit K3=P3^2;                            //设置



  10. sbit BZ=P1^5;              //蜂鸣器

  11. uchar Set[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};


  12. uchar sheng[]={0x04,0x14,0x1f,0x14,0x0e,0x04,0x1f,0x00};  //“生”字字模
  13. uchar    ri[]={0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00};  //“日”字字模
  14. uchar  kuai[]={0x0a,0x0a,0x1f,0x1b,0x1f,0x0a,0x0d,0x00};  //“快”字字模
  15. uchar    le[]={0x1e,0x10,0x14,0x1f,0x04,0x15,0x15,0x00};  //“乐”字字模




  16. void IntConfiguration();

  17. uchar SetState=0,SetPlace=10;
  18. uchar SetState2=0,SetPlace2=10;

  19. void Delay10ms(void);   //误差 0us
  20. void Delayms(unsigned char c);
  21. void Delay(uint y);


  22. /*******************************************************************************
  23. * 函数名         : main
  24. * 函数功能                               : 主函数
  25. * 输入           : 无
  26. * 输出                       : 无
  27. *******************************************************************************/
  28. void main()
  29. {
  30.               uint i;
  31.               uint count=0;

  32.               LcdInit();
  33.             
  34.               IntConfiguration();
  35.             
  36.               K3=1;
  37.                                                                      
  38.               Delay10ms();            
  39.               Delay(1);
  40.               Delayms(1);            


  41.                            
  42.                             for(i=0;i<8;i++)                                                                      //1  显示’生‘
  43.                             {
  44.                                           LcdWriteCom(0x40+i);
  45.                                           LcdWriteData(sheng[i]);
  46.                                           //Delay(100);
  47.                             }
  48.                             LcdWriteCom(0x80);
  49.                             LcdWriteData(0x00);

  50.                             for(i=0;i<8;i++)                                                                      //2  显示‘日’
  51.                             {
  52.                                           LcdWriteCom(0x48+i);
  53.                                           LcdWriteData(ri[i]);
  54.                                           //Delay(100);
  55.                             }
  56.                             LcdWriteCom(0x80+1);
  57.                             LcdWriteData(0x01);


  58.                             for(i=0;i<8;i++)                                                                      //3  显示‘快’
  59.                             {
  60.                                           LcdWriteCom(0x50+i);
  61.                                           LcdWriteData(kuai[i]);
  62.                                           //Delay(100);
  63.                             }
  64.                             LcdWriteCom(0x80+2);
  65.                             LcdWriteData(0x02);

  66.                             for(i=0;i<8;i++)                                                                      //4  显示‘乐’
  67.                             {
  68.                                           LcdWriteCom(0x58+i);
  69.                                           LcdWriteData(le[i]);
  70.                                           //Delay(100);
  71.                             }
  72.                             LcdWriteCom(0x80+3);
  73.                             LcdWriteData(0x03);            



  74.                             for(i=0;i<8;i++)                                                                      //5  显示’生‘
  75.                             {
  76.                                           LcdWriteCom(0x40+i);
  77.                                           LcdWriteData(sheng[i]);
  78.                                           //Delay(100);
  79.                             }
  80.                             LcdWriteCom(0x80+4);
  81.                             LcdWriteData(0x00);

  82.                             for(i=0;i<8;i++)                                                                      //6  显示‘日’
  83.                             {
  84.                                           LcdWriteCom(0x48+i);
  85.                                           LcdWriteData(ri[i]);
  86.                                           //Delay(100);
  87.                             }
  88.                             LcdWriteCom(0x80+5);
  89.                             LcdWriteData(0x01);


  90.                             for(i=0;i<8;i++)                                                                      //7  显示‘快’
  91.                             {
  92.                                           LcdWriteCom(0x50+i);
  93.                                           LcdWriteData(kuai[i]);
  94.                                           //Delay(100);
  95.                             }
  96.                             LcdWriteCom(0x80+6);
  97.                             LcdWriteData(0x02);

  98.                             for(i=0;i<8;i++)                                                                      //8  显示‘乐’
  99.                             {
  100.                                           LcdWriteCom(0x58+i);
  101.                                           LcdWriteData(le[i]);
  102.                                           //Delay(100);
  103.                             }
  104.                             LcdWriteCom(0x80+7);
  105.                             LcdWriteData(0x03);            

  106.                            
  107.                            
  108.                             for(i=0;i<8;i++)                                                                      //9  显示’生‘
  109.                             {
  110.                                           LcdWriteCom(0x40+i);
  111.                                           LcdWriteData(sheng[i]);
  112.                                           //Delay(100);
  113.                             }
  114.                             LcdWriteCom(0x80+8);
  115.                             LcdWriteData(0x00);

  116.                             for(i=0;i<8;i++)                                                                      //10  显示‘日’
  117.                             {
  118.                                           LcdWriteCom(0x48+i);
  119.                                           LcdWriteData(ri[i]);
  120.                                           //Delay(100);
  121.                             }
  122.                             LcdWriteCom(0x80+9);
  123.                             LcdWriteData(0x01);


  124.                             for(i=0;i<8;i++)                                                                      //11  显示‘快’
  125.                             {
  126.                                           LcdWriteCom(0x50+i);
  127.                                           LcdWriteData(kuai[i]);
  128.                                           //Delay(100);
  129.                             }
  130.                             LcdWriteCom(0x80+10);
  131.                             LcdWriteData(0x02);

  132.                             for(i=0;i<8;i++)                                                                      //12  显示‘乐’
  133.                             {
  134.                                           LcdWriteCom(0x58+i);
  135.                                           LcdWriteData(le[i]);
  136.                                           //Delay(100);
  137.                             }
  138.                             LcdWriteCom(0x80+11);
  139.                             LcdWriteData(0x03);            
  140.                            
  141.                            
  142.                            
  143.                            
  144.                             for(i=0;i<8;i++)                                                                      //13  显示’生‘
  145.                             {
  146.                                           LcdWriteCom(0x40+i);
  147.                                           LcdWriteData(sheng[i]);
  148.                                           //Delay(100);
  149.                             }
  150.                             LcdWriteCom(0x80+12);
  151.                             LcdWriteData(0x00);

  152.                             for(i=0;i<8;i++)                                                                      //14  显示‘日’
  153.                             {
  154.                                           LcdWriteCom(0x48+i);
  155.                                           LcdWriteData(ri[i]);
  156.                                           //Delay(100);
  157.                             }
  158.                             LcdWriteCom(0x80+13);
  159.                             LcdWriteData(0x01);


  160.                             for(i=0;i<8;i++)                                                                      //15  显示‘快’
  161.                             {
  162.                                           LcdWriteCom(0x50+i);
  163.                                           LcdWriteData(kuai[i]);
  164.                                           //Delay(100);
  165.                             }
  166.                             LcdWriteCom(0x80+14);
  167.                             LcdWriteData(0x02);

  168.                             for(i=0;i<8;i++)                                                                      //16  显示‘乐’
  169.                             {
  170.                                           LcdWriteCom(0x58+i);
  171.                                           LcdWriteData(le[i]);
  172.                                           //Delay(100);
  173.                             }
  174.                             LcdWriteCom(0x80+15);
  175.                             LcdWriteData(0x03);            




  176.                             for(i=0;i<8;i++)                                                                      //17  显示’生‘
  177.                             {
  178.                                           LcdWriteCom(0x40+i);
  179.                                           LcdWriteData(sheng[i]);
  180.                                           //Delay(100);
  181.                             }
  182.                             LcdWriteCom(0x80+16);
  183.                             LcdWriteData(0x00);

  184.                             for(i=0;i<8;i++)                                                                      //18  显示‘日’
  185.                             {
  186.                                           LcdWriteCom(0x48+i);
  187.                                           LcdWriteData(ri[i]);
  188.                                           //Delay(100);
  189.                             }
  190.                             LcdWriteCom(0x80+17);
  191.                             LcdWriteData(0x01);


  192.                             for(i=0;i<8;i++)                                                                      //19  显示‘快’
  193.                             {
  194.                                           LcdWriteCom(0x50+i);
  195.                                           LcdWriteData(kuai[i]);
  196.                                           //Delay(100);
  197.                             }
  198.                             LcdWriteCom(0x80+18);
  199.                             LcdWriteData(0x02);

  200.                             for(i=0;i<8;i++)                                                                      //20  显示‘乐’
  201.                             {
  202.                                           LcdWriteCom(0x58+i);
  203.                                           LcdWriteData(le[i]);
  204.                                           //Delay(100);
  205.                             }
  206.                             LcdWriteCom(0x80+19);
  207.                             LcdWriteData(0x03);            
  208.                            
  209.             
  210.                            
  211.                             for(i=0;i<8;i++)                                                                      //21  显示’生‘
  212.                             {
  213.                                           LcdWriteCom(0x40+i);
  214.                                           LcdWriteData(sheng[i]);
  215.                                           //Delay(100);
  216.                             }
  217.                             LcdWriteCom(0xc0);
  218.                             LcdWriteData(0x00);                           

  219.                             for(i=0;i<8;i++)                                                                      //22  显示‘日’
  220.                             {
  221.                                           LcdWriteCom(0x48+i);
  222.                                           LcdWriteData(ri[i]);
  223.                                           //Delay(100);
  224.                             }
  225.                             LcdWriteCom(0xc0+1);
  226.                             LcdWriteData(0x01);

  227.                             for(i=0;i<8;i++)                                                                      //23  显示‘快’
  228.                             {
  229.                                           LcdWriteCom(0x50+i);
  230.                                           LcdWriteData(kuai[i]);
  231.                                           //Delay(100);
  232.                             }
  233.                             LcdWriteCom(0xc0+2);
  234.                             LcdWriteData(0x02);

  235.                             for(i=0;i<8;i++)                                                                      //24  显示‘乐’
  236.                             {
  237.                                           LcdWriteCom(0x58+i);
  238.                                           LcdWriteData(le[i]);
  239.                                           //Delay(100);
  240.                             }
  241.                             LcdWriteCom(0xc0+3);
  242.                             LcdWriteData(0x03);            




  243.                             for(i=0;i<8;i++)                                                                      //25  显示’生‘
  244.                             {
  245.                                           LcdWriteCom(0x40+i);
  246.                                           LcdWriteData(sheng[i]);
  247.                                           //Delay(100);
  248.                             }
  249.                             LcdWriteCom(0xc0+4);
  250.                             LcdWriteData(0x00);                           

  251.                             for(i=0;i<8;i++)                                                                      //26  显示‘日’
  252.                             {
  253.                                           LcdWriteCom(0x48+i);
  254.                                           LcdWriteData(ri[i]);
  255.                                           //Delay(100);
  256.                             }
  257.                             LcdWriteCom(0xc0+5);
  258.                             LcdWriteData(0x01);

  259.                             for(i=0;i<8;i++)                                                                      //27  显示‘快’
  260.                             {
  261.                                           LcdWriteCom(0x50+i);
  262.                                           LcdWriteData(kuai[i]);
  263.                                           //Delay(100);
  264.                             }
  265.                             LcdWriteCom(0xc0+6);
  266.                             LcdWriteData(0x02);

  267.                             for(i=0;i<8;i++)                                                                      //28  显示‘乐’
  268.                             {
  269.                                           LcdWriteCom(0x58+i);
  270.                                           LcdWriteData(le[i]);
  271.                                           //Delay(100);
  272.                             }
  273.                             LcdWriteCom(0xc0+7);
  274.                             LcdWriteData(0x03);            




  275.                             for(i=0;i<8;i++)                                                                      //29  显示’生‘
  276.                             {
  277.                                           LcdWriteCom(0x40+i);
  278.                                           LcdWriteData(sheng[i]);
  279.                                           //Delay(100);
  280.                             }
  281.                             LcdWriteCom(0xc0+8);
  282.                             LcdWriteData(0x00);                           

  283.                             for(i=0;i<8;i++)                                                                      //30  显示‘日’
  284.                             {
  285.                                           LcdWriteCom(0x48+i);
  286.                                           LcdWriteData(ri[i]);
  287.                                           //Delay(100);
  288.                             }
  289.                             LcdWriteCom(0xc0+9);
  290.                             LcdWriteData(0x01);

  291.                             for(i=0;i<8;i++)                                                                      //31  显示‘快’
  292.                             {
  293.                                           LcdWriteCom(0x50+i);
  294.                                           LcdWriteData(kuai[i]);
  295.                                           //Delay(100);
  296.                             }
  297.                             LcdWriteCom(0xc0+10);
  298.                             LcdWriteData(0x02);

  299.                             for(i=0;i<8;i++)                                                                      //32  显示‘乐’
  300.                             {
  301.                                           LcdWriteCom(0x58+i);
  302.                                           LcdWriteData(le[i]);
  303.                                           //Delay(100);
  304.                             }
  305.                             LcdWriteCom(0xc0+11);
  306.                             LcdWriteData(0x03);            




  307.                             for(i=0;i<8;i++)                                                                      //33  显示’生‘
  308.                             {
  309.                                           LcdWriteCom(0x40+i);
  310.                                           LcdWriteData(sheng[i]);
  311.                                           //Delay(100);
  312.                             }
  313.                             LcdWriteCom(0xc0+12);
  314.                             LcdWriteData(0x00);                           

  315.                             for(i=0;i<8;i++)                                                                      //34  显示‘日’
  316.                             {
  317.                                           LcdWriteCom(0x48+i);
  318.                                           LcdWriteData(ri[i]);
  319.                                           //Delay(100);
  320.                             }
  321.                             LcdWriteCom(0xc0+13);
  322.                             LcdWriteData(0x01);

  323.                             for(i=0;i<8;i++)                                                                      //35  显示‘快’
  324.                             {
  325.                                           LcdWriteCom(0x50+i);
  326.                                           LcdWriteData(kuai[i]);
  327.                                           //Delay(100);
  328.                             }
  329.                             LcdWriteCom(0xc0+14);
  330.                             LcdWriteData(0x02);

  331.                             for(i=0;i<8;i++)                                                                      //36  显示‘乐’
  332.                             {
  333.                                           LcdWriteCom(0x58+i);
  334.                                           LcdWriteData(le[i]);
  335.                                           //Delay(100);
  336.                             }
  337.                             LcdWriteCom(0xc0+15);
  338.                             LcdWriteData(0x03);            




  339.                             for(i=0;i<8;i++)                                                                      //37  显示’生‘
  340.                             {
  341.                                           LcdWriteCom(0x40+i);
  342.                                           LcdWriteData(sheng[i]);
  343.                                           //Delay(100);
  344.                             }
  345.                             LcdWriteCom(0xc0+16);
  346.                             LcdWriteData(0x00);                           

  347.                             for(i=0;i<8;i++)                                                                      //38  显示‘日’
  348.                             {
  349.                                           LcdWriteCom(0x48+i);
  350.                                           LcdWriteData(ri[i]);
  351.                                           //Delay(100);
  352.                             }
  353.                             LcdWriteCom(0xc0+17);
  354.                             LcdWriteData(0x01);

  355.                             for(i=0;i<8;i++)                                                                      //39  显示‘快’
  356.                             {
  357.                                           LcdWriteCom(0x50+i);
  358.                                           LcdWriteData(kuai[i]);
  359.                                           //Delay(100);
  360.                             }
  361.                             LcdWriteCom(0xc0+18);
  362.                             LcdWriteData(0x02);

  363.                             for(i=0;i<8;i++)                                                                      //40  显示‘乐’
  364.                             {
  365.                                           LcdWriteCom(0x58+i);
  366.                                           LcdWriteData(le[i]);
  367.                                           //Delay(100);
  368.                             }
  369.                             LcdWriteCom(0xc0+19);
  370.                             LcdWriteData(0x03);            




  371.                             for(i=0;i<8;i++)                                                                      //41  显示’生‘
  372.                             {
  373.                                           LcdWriteCom(0x40+i);
  374.                                           LcdWriteData(sheng[i]);
  375.                                           //Delay(100);
  376.                             }
  377.                             LcdWriteCom(0x94);
  378.                             LcdWriteData(0x00);                           

  379.                             for(i=0;i<8;i++)                                                                      //42  显示‘日’
  380.                             {
  381.                                           LcdWriteCom(0x48+i);
  382.                                           LcdWriteData(ri[i]);
  383.                                           //Delay(100);
  384.                             }
  385.                             LcdWriteCom(0x94+1);
  386.                             LcdWriteData(0x01);

  387.                             for(i=0;i<8;i++)                                                                      //43  显示‘快’
  388.                             {
  389.                                           LcdWriteCom(0x50+i);
  390.                                           LcdWriteData(kuai[i]);
  391.                                           //Delay(100);
  392.                             }
  393.                             LcdWriteCom(0x94+2);
  394.                             LcdWriteData(0x02);

  395.                             for(i=0;i<8;i++)                                                                      //44  显示‘乐’
  396.                             {
  397.                                           LcdWriteCom(0x58+i);
  398.                                           LcdWriteData(le[i]);
  399.                                           //Delay(100);
  400.                             }
  401.                             LcdWriteCom(0x94+3);
  402.                             LcdWriteData(0x03);            




  403.                             for(i=0;i<8;i++)                                                                      //45  显示’生‘
  404.                             {
  405.                                           LcdWriteCom(0x40+i);
  406.                                           LcdWriteData(sheng[i]);
  407.                                           //Delay(100);
  408.                             }
  409.                             LcdWriteCom(0x94+4);
  410.                             LcdWriteData(0x00);                           

  411.                             for(i=0;i<8;i++)                                                                      //46  显示‘日’
  412.                             {
  413.                                           LcdWriteCom(0x48+i);
  414.                                           LcdWriteData(ri[i]);
  415.                                           //Delay(100);
  416.                             }
  417.                             LcdWriteCom(0x94+5);
  418.                             LcdWriteData(0x01);

  419.                             for(i=0;i<8;i++)                                                                      //47  显示‘快’
  420.                             {
  421.                                           LcdWriteCom(0x50+i);
  422.                                           LcdWriteData(kuai[i]);
  423.                                           //Delay(100);
  424.                             }
  425.                             LcdWriteCom(0x94+6);
  426.                             LcdWriteData(0x02);

  427.                             for(i=0;i<8;i++)                                                                      //48  显示‘乐’
  428.                             {
  429.                                           LcdWriteCom(0x58+i);
  430.                                           LcdWriteData(le[i]);
  431.                                           //Delay(100);
  432.                             }
  433.                             LcdWriteCom(0x94+7);
  434.                             LcdWriteData(0x03);            




  435.                             for(i=0;i<8;i++)                                                                      //49  显示’生‘
  436.                             {
  437.                                           LcdWriteCom(0x40+i);
  438.                                           LcdWriteData(sheng[i]);
  439.                                           //Delay(100);
  440.                             }
  441.                             LcdWriteCom(0x94+8);
  442.                             LcdWriteData(0x00);                           

  443.                             for(i=0;i<8;i++)                                                                      //50  显示‘日’
  444.                             {
  445.                                           LcdWriteCom(0x48+i);
  446.                                           LcdWriteData(ri[i]);
  447.                                           //Delay(100);
  448.                             }
  449.                             LcdWriteCom(0x94+9);
  450.                             LcdWriteData(0x01);

  451.                             for(i=0;i<8;i++)                                                                      //51  显示‘快’
  452.                             {
  453.                                           LcdWriteCom(0x50+i);
  454.                                           LcdWriteData(kuai[i]);
  455.                                           //Delay(100);
  456.                             }
  457.                             LcdWriteCom(0x94+10);
  458.                             LcdWriteData(0x02);

  459.                             for(i=0;i<8;i++)                                                                      //52  显示‘乐’
  460.                             {
  461.                                           LcdWriteCom(0x58+i);
  462.                                           LcdWriteData(le[i]);
  463.                                           //Delay(100);
  464.                             }
  465.                             LcdWriteCom(0x94+11);
  466.                             LcdWriteData(0x03);            




  467.                             for(i=0;i<8;i++)                                                                      //53  显示’生‘
  468.                             {
  469.                                           LcdWriteCom(0x40+i);
  470.                                           LcdWriteData(sheng[i]);
  471.                                           //Delay(100);
  472.                             }
  473.                             LcdWriteCom(0x94+12);
  474.                             LcdWriteData(0x00);                           

  475.                             for(i=0;i<8;i++)                                                                      //54  显示‘日’
  476.                             {
  477.                                           LcdWriteCom(0x48+i);
  478.                                           LcdWriteData(ri[i]);
  479.                                           //Delay(100);
  480.                             }
  481.                             LcdWriteCom(0x94+13);
  482.                             LcdWriteData(0x01);

  483.                             for(i=0;i<8;i++)                                                                      //55  显示‘快’
  484.                             {
  485.                                           LcdWriteCom(0x50+i);
  486.                                           LcdWriteData(kuai[i]);
  487.                                           //Delay(100);
  488.                             }
  489.                             LcdWriteCom(0x94+14);
  490.                             LcdWriteData(0x02);

  491.                             for(i=0;i<8;i++)                                                                      //56  显示‘乐’
  492.                             {
  493.                                           LcdWriteCom(0x58+i);
  494.                                           LcdWriteData(le[i]);
  495.                                           //Delay(100);
  496.                             }
  497.                             LcdWriteCom(0x94+15);
  498.                             LcdWriteData(0x03);            




  499.                             for(i=0;i<8;i++)                                                                      //57  显示’生‘
  500.                             {
  501.                                           LcdWriteCom(0x40+i);
  502.                                           LcdWriteData(sheng[i]);
  503.                                           //Delay(100);
  504.                             }
  505.                             LcdWriteCom(0x94+16);
  506.                             LcdWriteData(0x00);                           

  507.                             for(i=0;i<8;i++)                                                                      //58  显示‘日’
  508.                             {
  509.                                           LcdWriteCom(0x48+i);
  510.                                           LcdWriteData(ri[i]);
  511.                                           //Delay(100);
  512.                             }
  513.                             LcdWriteCom(0x94+17);
  514.                             LcdWriteData(0x01);

  515.                             for(i=0;i<8;i++)                                                                      //59  显示‘快’
  516.                             {
  517.                                           LcdWriteCom(0x50+i);
  518.                                           LcdWriteData(kuai[i]);
  519.                                           //Delay(100);
  520.                             }
  521.                             LcdWriteCom(0x94+18);
  522.                             LcdWriteData(0x02);

  523.                             for(i=0;i<8;i++)                                                                      //60  显示‘乐’
  524.                             {
  525.                                           LcdWriteCom(0x58+i);
  526.                                           LcdWriteData(le[i]);
  527.                                           //Delay(100);
  528.                             }
  529.                             LcdWriteCom(0x94+19);
  530.                             LcdWriteData(0x03);            




  531.                             for(i=0;i<8;i++)                                                                      //61  显示’生‘
  532.                             {
  533.                                           LcdWriteCom(0x40+i);
  534.                                           LcdWriteData(sheng[i]);
  535.                                           //Delay(100);
  536.                             }
  537.                             LcdWriteCom(0xd4);
  538.                             LcdWriteData(0x00);                           

  539.                             for(i=0;i<8;i++)                                                                      //62  显示‘日’
  540.                             {
  541.                                           LcdWriteCom(0x48+i);
  542.                                           LcdWriteData(ri[i]);
  543.                                           //Delay(100);
  544.                             }
  545.                             LcdWriteCom(0xd4+1);
  546.                             LcdWriteData(0x01);

  547.                             for(i=0;i<8;i++)                                                                      //63  显示‘快’
  548.                             {
  549.                                           LcdWriteCom(0x50+i);
  550.                                           LcdWriteData(kuai[i]);
  551.                                           //Delay(100);
  552.                             }
  553.                             LcdWriteCom(0xd4+2);
  554.                             LcdWriteData(0x02);

  555.                             for(i=0;i<8;i++)                                                                      //64  显示‘乐’
  556.                             {
  557.                                           LcdWriteCom(0x58+i);
  558.                                           LcdWriteData(le[i]);
  559.                                           //Delay(100);
  560.                             }
  561.                             LcdWriteCom(0xd4+3);
  562.                             LcdWriteData(0x03);            




  563.                             for(i=0;i<8;i++)                                                                      //65  显示’生‘
  564.                             {
  565.                                           LcdWriteCom(0x40+i);
  566.                                           LcdWriteData(sheng[i]);
  567.                                           //Delay(100);
  568.                             }
  569.                             LcdWriteCom(0xd4+4);
  570.                             LcdWriteData(0x00);                           

  571.                             for(i=0;i<8;i++)                                                                      //66  显示‘日’
  572.                             {
  573.                                           LcdWriteCom(0x48+i);
  574.                                           LcdWriteData(ri[i]);
  575.                                           //Delay(100);
  576.                             }
  577.                             LcdWriteCom(0xd4+5);
  578.                             LcdWriteData(0x01);

  579.                             for(i=0;i<8;i++)                                                                      //67  显示‘快’
  580.                             {
  581.                                           LcdWriteCom(0x50+i);
  582.                                           LcdWriteData(kuai[i]);
  583.                                           //Delay(100);
  584.                             }
  585.                             LcdWriteCom(0xd4+6);
  586.                             LcdWriteData(0x02);

  587.                             for(i=0;i<8;i++)                                                                      //68  显示‘乐’
  588.                             {
  589.                                           LcdWriteCom(0x58+i);
  590.                                           LcdWriteData(le[i]);
  591.                                           //Delay(100);
  592.                             }
  593.                             LcdWriteCom(0xd4+7);
  594.                             LcdWriteData(0x03);            




  595.                             for(i=0;i<8;i++)                                                                      //69  显示’生‘
  596.                             {
  597.                                           LcdWriteCom(0x40+i);
  598.                                           LcdWriteData(sheng[i]);
  599.                                           //Delay(100);
  600.                             }
  601.                             LcdWriteCom(0xd4+8);
  602.                             LcdWriteData(0x00);                           

  603.                             for(i=0;i<8;i++)                                                                      //70  显示‘日’
  604.                             {
  605.                                           LcdWriteCom(0x48+i);
  606.                                           LcdWriteData(ri[i]);
  607.                                           //Delay(100);
  608.                             }
  609.                             LcdWriteCom(0xd4+9);
  610.                             LcdWriteData(0x01);

  611.                             for(i=0;i<8;i++)                                                                      //71  显示‘快’
  612.                             {
  613.                                           LcdWriteCom(0x50+i);
  614.                                           LcdWriteData(kuai[i]);
  615.                                           //Delay(100);
  616.                             }
  617.                             LcdWriteCom(0xd4+10);
  618.                             LcdWriteData(0x02);

  619.                             for(i=0;i<8;i++)                                                                      //72  显示‘乐’
  620.                             {
  621.                                           LcdWriteCom(0x58+i);
  622.                                           LcdWriteData(le[i]);
  623.                                           //Delay(100);
  624.                             }
  625.                             LcdWriteCom(0xd4+11);
  626.                             LcdWriteData(0x03);            




  627.                             for(i=0;i<8;i++)                                                                      //73  显示’生‘
  628.                             {
  629.                                           LcdWriteCom(0x40+i);
  630.                                           LcdWriteData(sheng[i]);
  631.                                           //Delay(100);
  632.                             }
  633.                             LcdWriteCom(0xd4+12);
  634.                             LcdWriteData(0x00);                           

  635.                             for(i=0;i<8;i++)                                                                      //74  显示‘日’
  636.                             {
  637.                                           LcdWriteCom(0x48+i);
  638.                                           LcdWriteData(ri[i]);
  639.                                           //Delay(100);
  640.                             }
  641.                             LcdWriteCom(0xd4+13);
  642.                             LcdWriteData(0x01);

  643.                             for(i=0;i<8;i++)                                                                      //75  显示‘快’
  644.                             {
  645.                                           LcdWriteCom(0x50+i);
  646.                                           LcdWriteData(kuai[i]);
  647.                                           //Delay(100);
  648.                             }
  649.                             LcdWriteCom(0xd4+14);
  650.                             LcdWriteData(0x02);

  651.                             for(i=0;i<8;i++)                                                                      //76  显示‘乐’
  652.                             {
  653.                                           LcdWriteCom(0x58+i);
  654.                                           LcdWriteData(le[i]);
  655.                                           //Delay(100);
  656.                             }
  657.                             LcdWriteCom(0xd4+15);
  658.                             LcdWriteData(0x03);            




  659.                             for(i=0;i<8;i++)                                                                      //77  显示’生‘
  660.                             {
  661.                                           LcdWriteCom(0x40+i);
  662.                                           LcdWriteData(sheng[i]);
  663.                                           //Delay(100);
  664.                             }
  665.                             LcdWriteCom(0xd4+16);
  666.                             LcdWriteData(0x00);                           

  667.                             for(i=0;i<8;i++)                                                                      //78  显示‘日’
  668.                             {
  669.                                           LcdWriteCom(0x48+i);
  670.                                           LcdWriteData(ri[i]);
  671.                                           //Delay(100);
  672.                             }
  673.                             LcdWriteCom(0xd4+17);
  674.                             LcdWriteData(0x01);

  675.                             for(i=0;i<8;i++)                                                                      //79  显示‘快’
  676.                             {
  677.                                           LcdWriteCom(0x50+i);
  678.                                           LcdWriteData(kuai[i]);
  679.                                           //Delay(100);
  680.                             }
  681.                             LcdWriteCom(0xd4+18);
  682.                             LcdWriteData(0x02);

  683.                             for(i=0;i<8;i++)                                                                      //80  显示‘乐’
  684.                             {
  685.                                           LcdWriteCom(0x58+i);
  686.                                           LcdWriteData(le[i]);
  687.                                           //Delay(100);
  688.                             }
  689.                             LcdWriteCom(0xd4+19);
  690.                             LcdWriteData(0x03);            



  691.               while(1)
  692.               {                           
  693.                             while(SetState==1)
  694.                             {
  695.                                           LCDWrite_String(0, 0, 12, "Frequency Modulation");
  696.                             }
  697.             

  698.                             while(SetState==2)
  699.                             {
  700.                                           LCDWrite_String(0, 0, 12, "ANTENNA IS CONNETED?");
  701.                             }                           
  702.               }            
  703. }




  704. /*******************************************************************************
  705. * 函数名         : IntConfiguration()
  706. * 函数功能                               : 配置外部中断0
  707. * 输入           : 无
  708. * 输出                       : 无
  709. *******************************************************************************/
  710. void IntConfiguration()
  711. {
  712.               //设置INT0
  713.               IT0=1;//跳变沿出发方式(下降沿)
  714.               EX0=1;//打开INT0的中断允许。

  715.               EA=1;//打开总中断            
  716. }

  717. /*******************************************************************************
  718. * 函数名         : Int0()
  719. * 函数功能                               : 外部中断0 中断函数
  720. * 输入           : 无
  721. * 输出                       : 无
  722. *******************************************************************************/
  723. void Int0() interrupt 0                           
  724. {
  725.               Delay10ms();
  726.               if(K3==0)
  727.               {            
  728.                             SetState++;
  729.                             //SetPlace=0;
  730.                             while(SetState==3)
  731.                             SetState=0;            
  732.               }
  733. }


  734. /*******************************************************************************
  735. * 函数名         : Delay10ms
  736. * 函数功能                               : 延时函数,延时10ms
  737. * 输入           : 无
  738. * 输出                       : 无
  739. *******************************************************************************/
  740. void Delay10ms(void)   //误差 0us
  741. {
  742.     unsigned char a,b,c;
  743.     for(c=1;c>0;c--)
  744.         for(b=38;b>0;b--)
  745.             for(a=130;a>0;a--);
  746. }

  747. void Delayms(unsigned char c)   //误差 0us
  748. {
  749.     unsigned char a,b;
  750.     for( ;c>0;c--)
  751.         for(b=38;b>0;b--)
  752.             for(a=130;a>0;a--);
  753. }

  754. void Delay(uint y)
  755. {
  756.               unsigned int x;
  757.               for(y;y>0;y--)
  758.                             for(x=65;x>0;x--);
  759. }
复制代码


//    lcd.c  文件    //
  1. #include"lcd.h"
  2. /*******************************************************************************
  3. * 函 数 名         : Lcd1602_Delay1ms
  4. * 函数功能                               : 延时函数,延时1ms
  5. * 输    入         : c
  6. * 输    出         : 无
  7. * 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。
  8. *******************************************************************************/
  9. void Lcd1602_Delay1ms(uint c)   //误差 0us
  10. {
  11.     uchar a,b;
  12.               for (; c>0; c--)
  13.               {
  14.                             for (b=55;b>0;b--)
  15.                             {
  16.                                             for(a=1;a>0;a--);
  17.                             }     
  18.               }               
  19. }

  20. /*******************************************************************************
  21. * 函 数 名         : void LCDWrite_String(uchar x, uchar y, uchar *s)
  22. * 函数功能                               : 向LCD写入一个字符串
  23. * 输    入         : x,y,*s
  24. * 输    出         : 无
  25. *******************************************************************************/
  26. void LCDWrite_String(uchar x, uchar y, uchar z, uchar *s)              //x 0~15 , y 0,1,2,3
  27. {
  28.               LCD_set_xy(x,y,z);
  29.               while(*s)
  30.               {
  31.                             LcdWriteData(*s);
  32.                             s++;
  33.               }
  34. }

  35. /*******************************************************************************
  36. * 函 数 名         : void LCD_set_xy(uchar x, uchar y,uchar z)
  37. * 函数功能                               : 指定向LCD写入字符串的位置
  38. * 输    入         : x,y,z                            //x:横坐标 y:纵坐标 z:字符串长度
  39. * 输    出         : 无
  40. *******************************************************************************/
  41. void LCD_set_xy(uchar x,uchar y,uchar z)
  42. {
  43.               uchar i;
  44.               if(y==0)
  45.               {
  46.                             LcdWriteCom(0x80+x);
  47.                             for(i=0;i<z;i++)
  48.                             {
  49.                                           LcdWriteData(' ');
  50.                             }
  51.                             LcdWriteCom(0x80+x);
  52.               }
  53.               if(y==1)
  54.               {
  55.                             LcdWriteCom(0xc0+x);
  56.                             for(i=0;i<z;i++)
  57.                             {
  58.                                           LcdWriteData(' ');
  59.                             }
  60.                             LcdWriteCom(0xc0+x);
  61.               }
  62.               if(y==2)
  63.               {
  64.                             LcdWriteCom(0x94+x);
  65.                             for(i=0;i<z;i++)
  66.                             {
  67.                                           LcdWriteData(' ');
  68.                             }
  69.                             LcdWriteCom(0x94+x);
  70.               }
  71.               if(y==3)
  72.               {
  73.                             LcdWriteCom(0xd4+x);
  74.                             for(i=0;i<z;i++)
  75.                             {
  76.                                           LcdWriteData(' ');
  77.                             }
  78.                             LcdWriteCom(0xd4+x);
  79.               }
  80. }

  81. /*******************************************************************************
  82. * 函 数 名         : LcdWriteCom
  83. * 函数功能                               : 向LCD写入一个字节的命令
  84. * 输    入         : com
  85. * 输    出         : 无
  86. *******************************************************************************/
  87. #ifndef               LCD1602_4PINS              //当没有定义这个LCD1602_4PINS时
  88. void LcdWriteCom(uchar com)                //写入命令
  89. {
  90.               LCD1602_E = 0;     //使能
  91.               LCD1602_RS = 0;                 //选择发送命令
  92.               LCD1602_RW = 0;                 //选择写入
  93.             
  94.               LCD1602_DATAPINS = com;     //放入命令
  95.               Lcd1602_Delay1ms(1);                            //等待数据稳定

  96.               LCD1602_E = 1;                        //写入时序
  97.               Lcd1602_Delay1ms(5);                //保持时间
  98.               LCD1602_E = 0;
  99. }
  100. #else
  101. void LcdWriteCom(uchar com)                //写入命令
  102. {
  103.               LCD1602_E = 0;              //使能清零
  104.               LCD1602_RS = 0;              //选择写入命令
  105.               LCD1602_RW = 0;              //选择写入

  106.               LCD1602_DATAPINS = com;              //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
  107.               Lcd1602_Delay1ms(1);

  108.               LCD1602_E = 1;              //写入时序
  109.               Lcd1602_Delay1ms(5);
  110.               LCD1602_E = 0;

  111. //              Lcd1602_Delay1ms(1);
  112.               LCD1602_DATAPINS = com << 4; //发送低四位
  113.               Lcd1602_Delay1ms(1);

  114.               LCD1602_E = 1;              //写入时序
  115.               Lcd1602_Delay1ms(5);
  116.               LCD1602_E = 0;
  117. }
  118. #endif
  119. /*******************************************************************************
  120. * 函 数 名         : LcdWriteData
  121. * 函数功能                               : 向LCD写入一个字节的数据
  122. * 输    入         : dat
  123. * 输    出         : 无
  124. *******************************************************************************/                              
  125. #ifndef               LCD1602_4PINS                              
  126. void LcdWriteData(uchar dat)                                          //写入数据
  127. {
  128.               LCD1602_E = 0;              //使能清零
  129.               LCD1602_RS = 1;              //选择输入数据
  130.               LCD1602_RW = 0;              //选择写入

  131.               LCD1602_DATAPINS = dat; //写入数据
  132.               Lcd1602_Delay1ms(1);

  133.               LCD1602_E = 1;   //写入时序
  134.               Lcd1602_Delay1ms(5);   //保持时间
  135.               LCD1602_E = 0;
  136. }
  137. #else
  138. void LcdWriteData(uchar dat)                                          //写入数据
  139. {
  140.               LCD1602_E = 0;                //使能清零
  141.               LCD1602_RS = 1;                //选择写入数据
  142.               LCD1602_RW = 0;                //选择写入

  143.               LCD1602_DATAPINS = dat;              //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
  144.               Lcd1602_Delay1ms(1);

  145.               LCD1602_E = 1;                //写入时序
  146.               Lcd1602_Delay1ms(5);
  147.               LCD1602_E = 0;

  148.               LCD1602_DATAPINS = dat << 4; //写入低四位
  149.               Lcd1602_Delay1ms(1);

  150.               LCD1602_E = 1;                //写入时序
  151.               Lcd1602_Delay1ms(5);
  152.               LCD1602_E = 0;
  153. }
  154. #endif
  155. /*******************************************************************************
  156. * 函 数 名       : LcdInit()
  157. * 函数功能                            : 初始化LCD屏
  158. * 输    入       : 无
  159. * 输    出       : 无
  160. *******************************************************************************/                              
  161. #ifndef                            LCD1602_4PINS
  162. void LcdInit()                                                                                      //LCD初始化子程序
  163. {
  164.               LcdWriteCom(0x38);  //开显示
  165.               LcdWriteCom(0x0c);  //开显示不显示光标
  166.               LcdWriteCom(0x06);  //写一个指针加1
  167.               LcdWriteCom(0x01);  //清屏
  168.               LcdWriteCom(0x80);  //设置数据指针起点
  169. }
  170. #else
  171. void LcdInit()                                                                                      //LCD初始化子程序
  172. {
  173.               LcdWriteCom(0x32);              //将8位总线转为4位总线
  174.               LcdWriteCom(0x28);              //在四位线下的初始化
  175.               LcdWriteCom(0x0c);  //开显示不显示光标
  176.               LcdWriteCom(0x06);  //写一个指针加1
  177.               LcdWriteCom(0x01);  //清屏
  178.               LcdWriteCom(0x80);  //设置数据指针起点
  179. }
  180. #endif
复制代码



//     LCD.h  文件    //
  1. #ifndef __LCD_H_
  2. #define __LCD_H_
  3. /**********************************
  4. 当使用的是4位数据传输的时候定义,
  5. 使用8位取消这个定义
  6. **********************************/
  7. #define LCD1602_4PINS
  8. /**********************************
  9. 包含头文件
  10. **********************************/
  11. #include<reg51.h>
  12. //---重定义关键词---//
  13. #ifndef uchar
  14. #define uchar unsigned char
  15. #endif
  16. #ifndef uint
  17. #define uint unsigned int
  18. #endif
  19. /**********************************
  20. PIN口定义
  21. **********************************/
  22. #define LCD1602_DATAPINS P0
  23. sbit LCD1602_E=P2^7;
  24. sbit LCD1602_RW=P2^5;
  25. sbit LCD1602_RS=P2^6;
  26. /**********************************
  27. 函数声明
  28. **********************************/
  29. /*在51单片机12MHZ时钟下的延时函数*/
  30. void Lcd1602_Delay1ms(uint c);   //误差 0us
  31. /*LCD1602写入8位命令子函数*/
  32. void LcdWriteCom(uchar com);
  33. /*LCD1602写入8位数据子函数*/            
  34. void LcdWriteData(uchar dat)              ;
  35. /*LCD1602初始化子程序*/                           
  36. void LcdInit();            
  37. /*LCD1602写入字符串*/
  38. void LCDWrite_String(uchar x, uchar y,uchar z, uchar *s);
  39. /*设置LCD1602写入字符串的位置*/
  40. void LCD_set_xy(uchar x, uchar y, uchar z);                                                                       

  41. #endif
复制代码




4.注意!!!



5.若需要以下文件(取模软件(无需安装)、Keil C51程序、Protues仿真,详解文档)
请下载:http://www.51hei.com/bbs/dpj-92901-1.html



回复

使用道具 举报

ID:77707 发表于 2017-8-19 14:00 | 显示全部楼层
不错,辛苦了,谢谢!
回复

使用道具 举报

ID:47541 发表于 2018-3-10 21:04 | 显示全部楼层
不错,辛苦了,谢谢!
回复

使用道具 举报

ID:427626 发表于 2018-11-16 11:37 | 显示全部楼层
感谢分享!辛苦了
回复

使用道具 举报

ID:427716 发表于 2018-11-16 14:39 | 显示全部楼层
感谢大佬 收下我的膝盖
回复

使用道具 举报

ID:165424 发表于 2019-10-3 19:07 | 显示全部楼层
取模软件不方便
回复

使用道具 举报

ID:165424 发表于 2019-10-3 19:08 | 显示全部楼层
  1. void LCD_write_char(uchar x,uchar y,uchar *ch)
  2. {
  3.         uchar i=0;


  4.         for(i=0;i<8;i++){
  5.                 if(y==0)
  6.                         LCD_Writecmd(0x40+i);
  7.                 else if(y==1)
  8.                         LCD_Writecmd(0x48+i);
  9.                 else if(y==2)
  10.                         LCD_Writecmd(0x50+i);
  11.                 else
  12.                         LCD_Writecmd(0x58+i);
  13.                 LCD_Writedata(ch[i]);
  14.        
  15.         }
  16.         if(y==0)
  17.                 LCD_Writecmd(0x80+x);
  18.         else if(y==1)
  19.                 LCD_Writecmd(0xC0+x);
  20.         else if(y==2)
  21.                 LCD_Writecmd(0x80+0x14+x);
  22.         else
  23.                 LCD_Writecmd(0xC0+0x14+x);
  24.         LCD_Writedata(y);
  25. }
复制代码


你这太繁琐了
                LCD_write_char(0,0,sheng);
                LCD_write_char(3,1,ri);
                LCD_write_char(9,2,kuai);
                LCD_write_char(0,3,le);
做一个函数就搞定了
回复

使用道具 举报

ID:592524 发表于 2019-10-3 20:02 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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