找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

使用普中的STC89C52RC+LCD12864,只亮背光无法显示

查看数: 185 | 评论数: 11 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2026-4-9 18:45

正文摘要:

如图,我使用的是集成的单片机板子,驱动程序是AI写的(内容应该没有问题),接口根据单片机手册也做了对应调整没有问题,电位器也反复转动了好多次,始终无法显示字符串,只发光,哪里出现了问题

回复

ID:384109 发表于 2026-4-11 20:23
现在大的12864基本都是st7920的,例程很多,个人感觉,不如没字库的12864好用,容易用
ID:229502 发表于 2026-4-11 20:11
说一句,要看12864的驱动芯片,不同的驱动芯片扫描方式不一样。
ID:462768 发表于 2026-4-10 18:44
我理解啊,问问题之前都是先问一下ai,ai虽然缺点,但是有时候多问两边就有可能跑起来了。跑起来了,在研究怎么看懂。没办法,业余的也没人教,从头一点一点学,也来不及,都快饿死了,不能在去研究种地吧,
ID:584814 发表于 2026-4-10 18:18
再用AI帮你查问题就可以
ID:155507 发表于 2026-4-10 11:14
发表于 2026-4-9 18:50
我的接线是这样的,请问问题出在哪里?

你这个是lcd 12864 st7920

给你个程序
  1. /**************************************************************************************
  2. (PRECHIN 普中)

  3. 实验名称:LCD12864液晶显示实验(带字库)
  4. 接线说明:        
  5. 实验现象:下载程序后,LCD12864上显示汉字字符信息
  6. 注意事项:                                                                                                                                                                  
  7. ***************************************************************************************/
  8. #include "reg52.h"

  9. typedef unsigned int u16;        //对系统默认数据类型进行重定义
  10. typedef unsigned char u8;
  11. typedef unsigned long u32;

  12. //管脚定义
  13. sbit LCD12864_RS=P2^6; //数据命令选择
  14. sbit LCD12864_WR=P2^5; //读写选择
  15. sbit LCD12864_E =P2^7; //使能信号
  16. #define LCD12864_DATAPORT        P0        //LCD12864数据端口定义
  17. sbit LCD12864_PSB=P3^2; //8位或4并口/串口选择

  18. //函数声明
  19. void lcd12864_init(void);
  20. void lcd12864_clear(void);
  21. void lcd12864_show_string(u8 x,u8 y,u8 *str);

  22. void delay_10us(u16 ten_us);
  23. void delay_ms(u16 ms);

  24. /*******************************************************************************
  25. * 函 数 名       : delay_10us
  26. * 函数功能         : 延时函数,ten_us=1时,大约延时10us
  27. * 输    入       : ten_us
  28. * 输    出             : 无
  29. *******************************************************************************/
  30. void delay_10us(u16 ten_us)
  31. {
  32.         while(ten_us--);        
  33. }

  34. /*******************************************************************************
  35. * 函 数 名       : delay_ms
  36. * 函数功能         : ms延时函数,ms=1时,大约延时1ms
  37. * 输    入       : ms:ms延时时间
  38. * 输    出             : 无
  39. *******************************************************************************/
  40. void delay_ms(u16 ms)
  41. {
  42.         u16 i,j;
  43.         for(i=ms;i>0;i--)
  44.                 for(j=110;j>0;j--);
  45. }


  46. /*******************************************************************************
  47. * 函 数 名       : lcd12864_write_cmd
  48. * 函数功能         : LCD12864写命令
  49. * 输    入       : cmd:指令
  50. * 输    出             : 无
  51. *******************************************************************************/
  52. void lcd12864_write_cmd(u8 cmd)
  53. {
  54.         LCD12864_RS=0;//选择命令
  55.         LCD12864_WR=0;//选择写
  56.         LCD12864_E=0;
  57.         LCD12864_DATAPORT=cmd;//准备命令
  58.         delay_ms(1);
  59.         LCD12864_E=1;//使能脚E先上升沿写入
  60.         delay_ms(1);
  61.         LCD12864_E=0;//使能脚E后负跳变完成写入
  62. }

  63. /*******************************************************************************
  64. * 函 数 名       : lcd12864_write_data
  65. * 函数功能         : LCD12864写数据
  66. * 输    入       : dat:数据
  67. * 输    出             : 无
  68. *******************************************************************************/
  69. void lcd12864_write_data(u8 dat)
  70. {
  71.         LCD12864_RS=1;//选择数据
  72.         LCD12864_WR=0;//选择写
  73.         LCD12864_E=0;
  74.         LCD12864_DATAPORT=dat;//准备数据
  75.         delay_ms(1);
  76.         LCD12864_E=1;//使能脚E先上升沿写入
  77.         delay_ms(1);
  78.         LCD12864_E=0;//使能脚E后负跳变完成写入
  79. }

  80. /*******************************************************************************
  81. * 函 数 名       : lcd12864_init
  82. * 函数功能         : LCD12864初始化
  83. * 输    入       : 无
  84. * 输    出             : 无
  85. *******************************************************************************/
  86. void lcd12864_init(void)
  87. {
  88.         LCD12864_PSB=1;//选择8位或4位并口方式
  89.         lcd12864_write_cmd(0x30);//数据总线8位,基本指令操作
  90.         lcd12864_write_cmd(0x0c);//整体显示关,游标显示关,游标正常显示
  91.         lcd12864_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动
  92.         lcd12864_write_cmd(0x01);//清屏        
  93. }

  94. /*******************************************************************************
  95. * 函 数 名       : lcd12864_clear
  96. * 函数功能         : LCD12864清屏
  97. * 输    入       : 无
  98. * 输    出             : 无
  99. *******************************************************************************/
  100. void lcd12864_clear(void)
  101. {
  102.         lcd12864_write_cmd(0x01);        
  103. }

  104. /*******************************************************************************
  105. * 函 数 名       : lcd12864_show_string
  106. * 函数功能         : LCD12864显示字符串
  107. * 输    入       : x,y:显示坐标,x=0~7,y=0~3;
  108.                                    str:显示字符串数据
  109. * 输    出             : 无
  110. *******************************************************************************/
  111. void lcd12864_show_string(u8 x,u8 y,u8 *str)
  112. {
  113.         if(y<=0)y=0;
  114.         if(y>3)y=3;
  115.         x&=0x0f;        //限制x,y不能大于显示范围

  116.         switch(y)
  117.         {
  118.                 case 0: x|=0x80;break;//第1行地址+x的偏移
  119.                 case 1: x|=0x90;break;//第2行地址+x的偏移
  120.                 case 2: x|=0x88;break;//第3行地址+x的偏移
  121.                 case 3: x|=0x98;break;//第4行地址+x的偏移
  122.         }
  123.         lcd12864_write_cmd(x);
  124.         while(*str!='\0')
  125.         {
  126.                 lcd12864_write_data(*str);
  127.                 str++;               
  128.         }
  129.                
  130. }


  131. /*******************************************************************************
  132. * 函 数 名       : main
  133. * 函数功能         : 主函数
  134. * 输    入       : 无
  135. * 输    出             : 无
  136. *******************************************************************************/
  137. void main()
  138. {        
  139.         lcd12864_init();//LCD12864初始化

  140.         lcd12864_show_string(0,0,"Hello World!");//第1行字符串显示
  141.         lcd12864_show_string(0,1,"大家好!");//第2行字符串显示
  142.         lcd12864_show_string(0,2,"欢迎使用51开发板");//第3行字符串显示
  143.         lcd12864_show_string(0,3,"好好学习天天向上");//第4行字符串显示
  144.         while(1)
  145.         {
  146.                
  147.         }        
  148. }


复制代码




ID:1064915 发表于 2026-4-10 11:10
无法显示正常
ID:647261 发表于 2026-4-10 09:42
据说其他软件代码用AI很方便,但以我用AI写单片机代码的经历来说,AI并不靠谱,不是这里错一点就是那里错一点
玩单片机,还是要自己会写代码才行,AI只能参考
ID:1161211 发表于 2026-4-10 08:39
先学习例程点亮后,再修改成自己需要的程序
ID:1121801 发表于 2026-4-10 08:05
用AI写程序的话,还玩什么单片机
ID:1133081 发表于 2026-4-10 06:22
你问哪里出了问题,其实你自己知道,因为没有动脑子。记住防火防盗防AI。

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

Powered by 单片机教程网

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