找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机驱动IIC LCD1602显示程序 (4针)

  [复制链接]
ID:699194 发表于 2020-5-3 18:50 | 显示全部楼层 |阅读模式
需要就拿去用吧
0071ba48cc02255d6bb58582f6b0269.jpg
单片机源程序如下:
  1. #include "IIC.h"

  2. #define adress_1602 0x4e  


  3. unsigned char LCD_data=0x08;



  4. //********************液晶屏使能*********************
  5. void Enable_LCD_write()
  6. {
  7.         LCD_data|=(1<<(3-1));//E=1;
  8.         Write_Random_Address_Byte(adress_1602,LCD_data);  //
  9.         Delay1us(2);
  10.         LCD_data&=~(1<<(3-1));//E=0;
  11.         Write_Random_Address_Byte(adress_1602,LCD_data);
  12. }
  13. /*------------------------------------------------
  14.               写入命令函数
  15. ------------------------------------------------*/
  16. void LCD_write_command(unsigned char command)
  17. {
  18.         Delay1us(16);
  19.         LCD_data&=~(1<<(1-1));//RS=0;
  20.         LCD_data&=~(1<<(2-1));//RW=0;
  21.         //LCD_data&=~(1<<(4-1));
  22.         Write_Random_Address_Byte(adress_1602,LCD_data);
  23.        
  24.         LCD_data&=0X0f; //清高四位
  25.         LCD_data|=command & 0xf0; //写高四位
  26.         Write_Random_Address_Byte(adress_1602,LCD_data);
  27.         Enable_LCD_write();
  28.        
  29.         command=command<<4; //低四位移到高四位
  30.         LCD_data&=0x0f; //清高四位
  31.         LCD_data|=command&0xf0; //写低四位
  32.         Write_Random_Address_Byte(adress_1602,LCD_data);
  33.         Enable_LCD_write();
  34. }
  35. /*------------------------------------------------
  36.               写入数据函数
  37. ------------------------------------------------*/
  38. void LCD_write_dat(unsigned char value)
  39. {
  40.         Delay1us(16);
  41.         LCD_data|=(1<<(1-1));//RS=1;
  42.         LCD_data&=~(1<<(2-1));//RW=0;
  43.         Write_Random_Address_Byte(adress_1602,LCD_data);
  44.        
  45.         LCD_data&=0X0f; //清高四位
  46.         LCD_data|=value&0xf0; //写高四位
  47.         Write_Random_Address_Byte(adress_1602,LCD_data);
  48.         Enable_LCD_write();         
  49.        
  50.         value=value<<4; //低四位移到高四位
  51.         LCD_data&=0x0f; //清高四位
  52.         LCD_data|=value&0xf0; //写低四位
  53.         Write_Random_Address_Byte(adress_1602,LCD_data);
  54.         Enable_LCD_write();
  55. }

  56. /*------------------------------------------------
  57.                 清屏函数
  58. ------------------------------------------------*/
  59. void LCD_Clear(void)
  60. {
  61.         LCD_write_command(0x01);
  62.         Delay1ms(2);
  63. }

  64. /*------------------------------------------------
  65.                 设置显示位置
  66. ------------------------------------------------*/
  67. void LCD_set_xy( unsigned char x, unsigned char y )
  68. {
  69.         unsigned char address;
  70.         if (y == 1)
  71.         address = 0x80 + x;
  72.         else
  73.         address =0xc0+ x;
  74.         LCD_write_command(address);
  75. }

  76. /*------------------------------------------------
  77.                 显示一个字符
  78. ------------------------------------------------*/
  79. void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat)
  80. {
  81.         LCD_set_xy( x, y );
  82.         LCD_write_dat(dat);
  83. }

  84. /*------------------------------------------------
  85.                 显示字符串函数
  86. ------------------------------------------------*/
  87. void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s)
  88. {
  89.         LCD_set_xy( X, Y );
  90.         while (*s)
  91.         {
  92.                 LCD_write_dat(*s);   
  93.                 s ++;
  94.         }
  95. }
  96. /*------------------------------------------------
  97.               把特殊字符数据写入显存
  98. ------------------------------------------------*/
  99. //void WriteCGRAM()
  100. //{
  101. //        unsigned char i,j,k,tmp;
  102. //        tmp=0x40;//设置CGRAM地址的格式字
  103. //        k=0;
  104. //       
  105. //        for(j=0;j<8;j++)
  106. //        {
  107. //                for(i=0;i<8;i++)
  108. //                {
  109. //                        LCD_write_command(tmp+i); // 设置自定义字符的 CGRAM 地址
  110. //                        Delay1us(50);
  111. //                        LCD_write_dat(table0[k]); // 向CGRAM写入自定义字符表的数据
  112. //                        k++;
  113. //                        Delay1us(50);
  114. //                }
  115. //                tmp=tmp+8;
  116. //        }
  117. //}
  118. /*------------------------------------------------
  119.               初始化函数
  120. ------------------------------------------------*/
  121. void LCD_Init(void)
  122. {
  123.         LCD_write_command(0x02);
  124.         Delay1us(40);
  125.         LCD_write_command(0x28); //4位显示!!!!!!!!!!!!!!!!!!
  126.         LCD_write_command(0x0c); //显示开
  127.         LCD_write_command(0x01); //清屏
  128.         Delay1ms(10);
  129. }
复制代码
51hei.png
所有资料51hei提供下载:
51单片机驱动IIC1602程序(4针).7z (48.77 KB, 下载次数: 279)

评分

参与人数 2黑币 +80 收起 理由
小当 + 30
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:284903 发表于 2022-5-25 21:31 | 显示全部楼层
正在找这个,先用用,谢谢
回复

使用道具 举报

ID:297903 发表于 2022-5-27 08:51 | 显示全部楼层
可以省I/O!!
回复

使用道具 举报

ID:1029915 发表于 2022-5-27 11:29 | 显示全部楼层
正好需要这个而且还可以省I/O
回复

使用道具 举报

ID:287324 发表于 2023-3-11 01:31 | 显示全部楼层
用的是哪些引脚?没有电路图啊
回复

使用道具 举报

ID:765334 发表于 2023-3-13 08:41 来自手机 | 显示全部楼层
应该需要PCF8574做转接
回复

使用道具 举报

ID:1038987 发表于 2023-4-12 16:56 | 显示全部楼层
我用的是1602的IIC通信方式,单片机stc15w204S用的下载频率是11.0592M已经调了很久了。地是共地,也是共电源。地址换了好多次了,依然是什么也没有。求指教
回复

使用道具 举报

ID:135723 发表于 2023-4-12 19:32 | 显示全部楼层
有一定的参考意义。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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