找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7714|回复: 1
收起左侧

单片机控制1602液晶显示电路图+程序

[复制链接]
ID:537699 发表于 2019-5-14 16:35 | 显示全部楼层 |阅读模式
利用51单片机控制lcd1602是非常普遍的,在此我将原理图和程序分享出来,供大家一起学习
这个程序实现的将超声波模块所检测到的距离和温度传感器接收到的温度显示到lcd上,只是一个参考
大家想显示其他的东西,原理图可以照着用,但是程序可能就要进行修改了

电路原理图如下:

原理图

原理图


单片机源程序如下:
  1. #include <reg52.h>


  2. #define uchar unsigned char // 以后unsigned char就可以用uchar代替
  3. #define uint  unsigned int  // 以后unsigned int 就可以用uint 代替


  4. sbit LcdRs_P  = P1^2;       // 1602液晶的RS管脚
  5. sbit LcdRw_P  = P1^3;       // 1602液晶的RW管脚
  6. sbit LcdEn_P  = P1^4;       // 1602液晶的EN管脚



  7. /*********************************************************/
  8. // 毫秒级的延时函数,time是要延时的毫秒数
  9. /*********************************************************/
  10. void DelayMs(uint time)
  11. {
  12.     uint i,j;
  13.     for(i=time;i>0;i--)
  14.         for(j=112;j>0;j--);
  15. }


  16. /*********************************************************/
  17. // 1602液晶写命令函数,cmd就是要写入的命令
  18. /*********************************************************/
  19. void LcdWriteCmd(uchar cmd)
  20. {
  21.     LcdRs_P = 0;
  22.     LcdRw_P = 0;
  23.     LcdEn_P = 0;
  24.     P0=cmd;

  25.         DelayMs(1);

  26.     LcdEn_P = 1;   
  27.         DelayMs(1);
  28.     LcdEn_P = 0;   
  29. }


  30. /*********************************************************/
  31. // 1602液晶写数据函数,dat就是要写入的命令
  32. /*********************************************************/
  33. void LcdWriteData(uchar dat)
  34. {
  35.     LcdRs_P = 1;
  36.     LcdRw_P = 0;
  37.     LcdEn_P = 0;
  38.     P0=dat;

  39.         DelayMs(1);

  40.     LcdEn_P = 1;   
  41.         DelayMs(1);
  42.     LcdEn_P = 0;
  43. }


  44. /*********************************************************/
  45. // 1602液晶初始化函数
  46. /*********************************************************/
  47. void LcdInit()
  48. {
  49.     LcdWriteCmd(0x38);        // 16*2显示,5*7点阵,8位数据口
  50.     LcdWriteCmd(0x0C);        // 开显示,不显示光标
  51.     LcdWriteCmd(0x06);        // 地址加1,当写入数据后光标右移
  52.     LcdWriteCmd(0x01);        // 清屏
  53. }


  54. /*********************************************************/
  55. // 液晶光标定位函数
  56. /*********************************************************/
  57. void LcdGotoXY(uchar line,uchar column)
  58. {
  59.     // 第一行
  60.     if(line==0)
  61.         LcdWriteCmd(0x80+column);
  62.      // 第二行
  63.     if(line==1)        
  64.         LcdWriteCmd(0x80+0x40+column);
  65. }



  66. /*********************************************************/
  67. // 液晶输出字符串函数
  68. /*********************************************************/
  69. void LcdPrintStr(uchar *str)
  70. {
  71.     while(*str!='\0')
  72.         LcdWriteData(*str++);
  73. }


  74. ///*********************************************************/
  75. //// 液晶输出数字
  76. ///*********************************************************/
  77. //void LcdPrintNum(uchar num)
  78. //{
  79. //  LcdWriteData(num/100+48);       // 百位
  80. //  LcdWriteData(num%100/10+48);    // 十位
  81. //  LcdWriteData(num%10+48);        // 个位
  82. //}


  83. /*********************************************************/
  84. // 主函数
  85. /*********************************************************/
  86. void main()
  87. {
  88.     char num=78;

  89.     // 1、首先,执行液晶初始化
  90.     LcdInit();                      // 液晶初始化


  91.     // 2、定位,确定行(0-1)和列(0-15)的数字
  92.     LcdGotoXY(0,3);



  93.     // 3.1 如果显示单个字符
  94.     LcdWriteData('Y');

  95.     // 3.2 如果显示一串字符
  96.     LcdPrintStr("hello!");

  97.     // 3.3 显示一个采集的数字
  98.     LcdWriteData(num/10+0x30);
  99.     LcdWriteData(num%10+0x30);


  100.     while(1);
  101. }
复制代码




回复

使用道具 举报

ID:516871 发表于 2019-5-16 09:06 | 显示全部楼层
不错,又长了一点见识.
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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