找回密码
 立即注册
查看: 2595|回复: 8

1602移动显示

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-24 13:36:20

8

主题

39

回帖

342

积分

中级会员

积分
342
发表于 2022-11-15 17:27:21 | 显示全部楼层 |阅读模式
开天斧三实验扩展板。
开天斧三扩展板测试1602显示.jpg

1602动态显示.zip

38.24 KB, 下载次数: 136

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2022-11-16 08:25:27 | 显示全部楼层
好,LCD1602有了,期待LCD12864:)
  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-04-30 10:02:32
已绑定手机

23

主题

175

回帖

878

积分

高级会员

积分
878
发表于 2024-6-5 21:31:55 | 显示全部楼层
你好,问下有用8位数据口驱动LCD1206的程序没?学习一下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-04-30 10:02:32
已绑定手机

23

主题

175

回帖

878

积分

高级会员

积分
878
发表于 2024-6-5 21:42:27 | 显示全部楼层
你好,问下有用8位数据口驱动LCD1602的程序没?学习一下

点评

LCD1602驱动函数: 主函数:main.c 1602 液晶,从它的名字我们就可以看出它的显示容量,就是可以显示 2 行,每行 16 个字符的液晶。它的工作电压是 4.5V~5.5V,对于这点我们设计电路的时候,直接按照 5V 系统设计  详情 回复 发表于 2024-7-2 11:05
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-6-9 23:52:59 | 显示全部楼层
手上有1602学习下,怎么用
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:30
  • 最近打卡:2024-08-22 11:09:57

4

主题

4

回帖

219

积分

中级会员

积分
219
发表于 2024-6-27 16:22:41 | 显示全部楼层
欢迎哈*** 发表于 2024-6-5 21:42
你好,问下有用8位数据口驱动LCD1602的程序没?学习一下

数据手册在此,8位并口驱动LCD1602a的程序在第八章

LCD1602a.pdf

353.98 KB, 下载次数: 64

打倒Keil私扩!打倒Unix暴政!自由属于光荣的中国51人!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:105
  • 最近打卡:2025-04-30 09:14:19

2

主题

48

回帖

386

积分

中级会员

积分
386
发表于 2024-7-2 11:05:37 | 显示全部楼层
本帖最后由 zhangshiwei 于 2024-7-2 11:06 编辑
欢迎哈*** 发表于 2024-6-5 21:42
你好,问下有用8位数据口驱动LCD1602的程序没?学习一下

LCD1602驱动函数:
  1. #include "lcd1602.h"
  2. /*******************************************************************************
  3. * 函 数 名       : lcd1602_write_cmd
  4. * 函数功能       : LCD1602写命令
  5. * 输    入       : cmd:指令
  6. * 输    出         : 无
  7. *******************************************************************************/
  8. #if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
  9. void lcd1602_write_cmd(u8 cmd)
  10. {
  11.     LCD1602_RS=0;//选择命令
  12.     LCD1602_RW=0;//选择写
  13.     LCD1602_E=0;
  14.     LCD1602_DATAPORT=cmd;//准备命令
  15.     delay_ms(1);
  16.     LCD1602_E=1;//使能脚E先上升沿写入
  17.     delay_ms(1);
  18.     LCD1602_E=0;//使能脚E后负跳变完成写入  
  19. }
  20. #else   //4位LCD
  21. void lcd1602_write_cmd(u8 cmd)
  22. {
  23.     LCD1602_RS=0;//选择命令
  24.     LCD1602_RW=0;//选择写
  25.     LCD1602_E=0;
  26.     LCD1602_DATAPORT=cmd;//准备命令
  27.     delay_ms(1);
  28.     LCD1602_E=1;//使能脚E先上升沿写入
  29.     delay_ms(1);
  30.     LCD1602_E=0;//使能脚E后负跳变完成写入
  31.     LCD1602_DATAPORT=cmd<<4;//准备命令
  32.     delay_ms(1);
  33.     LCD1602_E=1;//使能脚E先上升沿写入
  34.     delay_ms(1);
  35.     LCD1602_E=0;//使能脚E后负跳变完成写入  
  36. }
  37. #endif
  38. /*******************************************************************************
  39. * 函 数 名       : lcd1602_write_data
  40. * 函数功能       : LCD1602写数据
  41. * 输    入       : dat:数据
  42. * 输    出         : 无
  43. *******************************************************************************/
  44. #if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
  45. void lcd1602_write_data(u8 dat)
  46. {
  47.     LCD1602_RS=1;//选择数据
  48.     LCD1602_RW=0;//选择写
  49.     LCD1602_E=0;
  50.     LCD1602_DATAPORT=dat;//准备数据
  51.     delay_ms(1);
  52.     LCD1602_E=1;//使能脚E先上升沿写入
  53.     delay_ms(1);
  54.     LCD1602_E=0;//使能脚E后负跳变完成写入      
  55. }
  56. #else
  57. void lcd1602_write_data(u8 dat)
  58. {
  59.     LCD1602_RS=1;//选择数据
  60.     LCD1602_RW=0;//选择写
  61.     LCD1602_E=0;
  62.     LCD1602_DATAPORT=dat;//准备数据
  63.     delay_ms(1);
  64.     LCD1602_E=1;//使能脚E先上升沿写入
  65.     delay_ms(1);
  66.     LCD1602_E=0;//使能脚E后负跳变完成写入
  67.     LCD1602_DATAPORT=dat<<4;//准备数据
  68.     delay_ms(1);
  69.     LCD1602_E=1;//使能脚E先上升沿写入
  70.     delay_ms(1);
  71.     LCD1602_E=0;//使能脚E后负跳变完成写入      
  72. }
  73. #endif
  74. /*******************************************************************************
  75. * 函 数 名       : lcd1602_init
  76. * 函数功能       : LCD1602初始化
  77. * 输    入       : 无
  78. * 输    出         : 无
  79. *******************************************************************************/
  80. #if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
  81. void lcd1602_init(void)
  82. {
  83.     lcd1602_write_cmd(0x38);//数据总线8位,显示2行,5*7点阵/字符
  84.     lcd1602_write_cmd(0x0c);//显示功能开,无光标,光标闪烁
  85.     lcd1602_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动
  86.     lcd1602_write_cmd(0x01);//清屏   
  87. }
  88. #else
  89. void lcd1602_init(void)
  90. {
  91.     lcd1602_write_cmd(0x28);//数据总线4位,显示2行,5*7点阵/字符
  92.     lcd1602_write_cmd(0x0c);//显示功能开,无光标,光标闪烁
  93.     lcd1602_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动
  94.     lcd1602_write_cmd(0x01);//清屏   
  95. }
  96. #endif
  97. /*******************************************************************************
  98. * 函 数 名       : lcd1602_clear
  99. * 函数功能       : LCD1602清屏
  100. * 输    入       : 无
  101. * 输    出         : 无
  102. *******************************************************************************/
  103. void lcd1602_clear(void)
  104. {
  105.     lcd1602_write_cmd(0x01);   
  106. }
  107. /*******************************************************************************
  108. * 函 数 名       : lcd1602_show_string
  109. * 函数功能       : LCD1602显示字符
  110. * 输    入       : x,y:显示坐标,x=0~15,y=0~1;
  111.                    str:显示字符串
  112. * 输    出         : 无
  113. *******************************************************************************/
  114. void lcd1602_show_string(u8 x,u8 y,u8 *str)
  115. {
  116.     u8 i=0;
  117.     if(y>1||x>15)return;//行列参数不对则强制退出
  118.     if(y<1) //第1行显示
  119.     {   
  120.         while(*str!='\0')//字符串是以'\0'结尾,只要前面有内容就显示
  121.         {
  122.             if(i<16-x)//如果字符长度超过第一行显示范围,则在第二行继续显示
  123.             {
  124.                 lcd1602_write_cmd(0x80+i+x);//第一行显示地址设置
  125.             }
  126.             else
  127.             {
  128.                 lcd1602_write_cmd(0x40+0x80+i+x-16);//第二行显示地址设置
  129.             }
  130.             lcd1602_write_data(*str);//显示内容
  131.             str++;//指针递增
  132.             i++;   
  133.         }   
  134.     }
  135.     else    //第2行显示
  136.     {
  137.         while(*str!='\0')
  138.         {
  139.             if(i<16-x) //如果字符长度超过第二行显示范围,则在第一行继续显示
  140.             {
  141.                 lcd1602_write_cmd(0x80+0x40+i+x);   
  142.             }
  143.             else
  144.             {
  145.                 lcd1602_write_cmd(0x80+i+x-16);
  146.             }
  147.             lcd1602_write_data(*str);
  148.             str++;
  149.             i++;   
  150.         }   
  151.     }               
  152. }
复制代码
主函数:main.c

  1. #include "public.h"
  2. #include "lcd1602.h"
  3. /*******************************************************************************
  4. * 函 数 名       : main
  5. * 函数功能       : 主函数
  6. * 输    入       : 无
  7. * 输    出         : 无
  8. *******************************************************************************/
  9. void main()
  10. {   
  11.     lcd1602_init();//LCD1602初始化
  12.     lcd1602_show_string(0,0,"Hello World!");//第一行显示
  13.     lcd1602_show_string(0,1,"0123456789");//第二行显示
  14.     while(1)
  15.     {
  16.     }   
  17. }
复制代码
1602 液晶,从它的名字我们就可以看出它的显示容量,就是可以显示 2 行,每行 16 个字符的液晶。它的工作电压是 4.5V~5.5V,对于这点我们设计电路的时候,直接按照 5V 系统设计,但是保证我们的 5V 系统最低不能低于 4.5V。在 5V 工作电压下测量它的工作电流是 2mA,大家注意,这个 2mA 仅仅是指液晶,而它的黄绿背光都是用 LED 做的,所以功耗不会太小的,一二十毫安还是有的。
1602 液晶一共 16 个引脚,每个引脚的功能,我们都可以在它的数据手册上获得。而这些基本的信息,在我们设计电路和编写代码之前,必须先看明白。


然后根据时序图写驱动函数
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-04-30 10:02:32
已绑定手机

23

主题

175

回帖

878

积分

高级会员

积分
878
发表于 2024-7-3 18:03:10 | 显示全部楼层
jingka*** 发表于 2024-6-27 16:22
数据手册在此,8位并口驱动LCD1602a的程序在第八章

{:5_332:}程序很详细,很好,谢谢了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:280
  • 最近打卡:2025-05-01 07:15:50

2

主题

52

回帖

882

积分

高级会员

积分
882
发表于 2024-7-27 16:05:40 | 显示全部楼层
正在学习,程序已经正常运行~~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:13 , Processed in 0.220841 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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