找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6376|回复: 14
收起左侧

用protues做了仿真,液晶显示器没显示

[复制链接]
ID:753047 发表于 2020-5-16 08:32 | 显示全部楼层 |阅读模式
请问各位大神可以帮忙看看怎么回事吗?
仿真错误.jpg

1 程序.zip

135.87 KB, 下载次数: 12

回复

使用道具 举报

ID:94031 发表于 2020-5-16 09:58 | 显示全部楼层
虽然都是LCD12864,驱动芯片不一样,驱动程序也不一样,比如仿真硬件要求cs1,cs2,你的软件却没有cs1,cs2的驱动,所以不显示。
回复

使用道具 举报

ID:155507 发表于 2020-5-16 10:47 | 显示全部楼层
本帖最后由 angmall 于 2020-5-16 13:54 编辑

你这个12864LCD是KS0108驱动芯片的
你的软件是驱动st7920,可惜proteus库里没有
所以不显示。
LCD12864-002.jpg
  1. #include <reg52.h>

  2. sbit EN=P0^3;
  3. sbit RS=P0^1;
  4. sbit RW=P0^2;
  5. sbit CS1=P0^4;
  6. sbit CS2=P0^5;
  7. sbit RST=P0^6;

  8. unsigned char code a[2][32]=
  9. {
  10.         {
  11.                 //0xFF,0xFF,0x03,0xFB,0x9B,0xAB,0xBB,0x3A,0x81,0xBB,0xBB,0xAB,0x9B,0xBB,0xBB,0xFF,  //
  12.                 //0x7F,0x9F,0xE0,0xBF,0xDF,0x67,0x79,0xBE,0xB8,0xD6,0xEE,0xD6,0xBA,0x7C,0x7F,0xFF
  13.                 /*--  文字:  液  --*/
  14.                 /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  15.                 0x10,0x61,0x06,0xE0,0x18,0x84,0xE4,0x1C,0x84,0x65,0xBE,0x24,0xA4,0x64,0x04,0x00,
  16.                 0x04,0x04,0xFF,0x00,0x01,0x00,0xFF,0x41,0x21,0x12,0x0C,0x1B,0x61,0xC0,0x40,0x00
  17.            
  18.         },
  19.         {
  20.                 //0xBF,0xC3,0xEF,0x00,0xEF,0xEF,0xDF,0xEF,0x70,0x87,0xF7,0x07,0xF7,0x07,0xFF,0xFF,     //
  21.                 //0xFD,0xF9,0xFD,0x00,0xFE,0xFE,0xFB,0xBD,0xDE,0xE7,0xB9,0x7E,0xBF,0xC0,0xFF,0xFF
  22.                 /*--  文字:  晶  --*/
  23.                 /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  24.                 0x00,0x00,0x00,0x00,0x7E,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x7E,0x00,0x00,0x00,0x00,
  25.                 0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00
  26.            
  27.         },
  28. };

  29. void Delay (unsigned int z)
  30. {
  31.         unsigned int i,j;
  32.         for(i=z;i>0;i--)
  33.            for(j=2;j>0;j--);
  34. }
  35. void WriteCode(unsigned char com)
  36. {
  37.         Delay(1);
  38.         RS=0;
  39.         RW=0;
  40.         P2=com;
  41.         EN=1;
  42.         EN=0;
  43.         Delay(1);  
  44. }
  45. void WriteData(unsigned char dat)
  46. {
  47.         Delay(1);
  48.         RS=1;
  49.         RW=0;
  50.         P2=dat;
  51.         EN=1;
  52.         EN=0;
  53.         Delay(1);  
  54. }
  55. unsigned char ReadData()
  56. {
  57.         unsigned char save;     
  58.         Delay(1);
  59.         RS=1;
  60.         RW=1;
  61.         EN=1;
  62.         save=P2;
  63.         EN=0;
  64.         return(save);
  65. //        Delay(1);
  66. }
  67. void LcdInitialize()
  68. {
  69.         Delay(1);
  70.         CS1=0; CS2=0;
  71.         WriteCode(0x3e);
  72.         WriteCode(0xb8);
  73.         WriteCode(0xc0);
  74.         WriteCode(0x40);
  75.         WriteCode(0x3f);
  76. }
  77. void SetXy(unsigned char x,unsigned char y)
  78. {
  79.         WriteCode(0xb8+x);
  80.         WriteCode(0x40+y);
  81.         Delay(1);
  82. }
  83. void LcdClear()
  84. {
  85.         unsigned char i,j;
  86.         CS1=0;CS2=0;
  87.         for(i=0;i<8;i++)
  88.         {
  89.                 SetXy(i,0);
  90.                 for(j=0;j<64;j++)
  91.                 WriteData(0x00);
  92.         }                                                            
  93. }
  94. void DrawPoint(unsigned char x,unsigned char y,unsigned char dat)
  95. {
  96.         unsigned char he;
  97.         SetXy(x,y);
  98.         he=ReadData();
  99.         he=ReadData();
  100.         SetXy(x,y);
  101.         WriteData(dat+he);
  102. }
  103. void DrawHanzi(unsigned char x,unsigned char y,unsigned char code *dat)
  104. {
  105.         unsigned char i=0,j=0;
  106.         for(i=0;i<2;i++)
  107.         {
  108.                 SetXy(x+i,y);
  109.                 for(j=0;j<16;j++)
  110.                 WriteData(dat[16*i+j]);
  111.         }
  112. }
  113. void main()
  114. {
  115.         unsigned char i,j;
  116.         LcdInitialize();
  117.         LcdClear();
  118.         for(i=0;i<4;i++){DrawHanzi(2*i,16*j,a[0]);DrawHanzi(2*i,16*j+16,a[1]);}
  119.         for(i=0;i<4;i++){DrawHanzi(2*i,16*j+32,a[0]);DrawHanzi(2*i,16*j+16+32,a[1]);}
  120.         DrawPoint(0,0,1);
  121.         while(1);
  122. }



复制代码
回复

使用道具 举报

ID:342822 发表于 2020-5-16 11:32 | 显示全部楼层
瞟一眼~那个上拉电阻RP1用错了
回复

使用道具 举报

ID:753047 发表于 2020-5-16 13:00 | 显示全部楼层
xuyaqi 发表于 2020-5-16 09:58
虽然都是LCD12864,驱动芯片不一样,驱动程序也不一样,比如仿真硬件要求cs1,cs2,你的软件却没有cs1,cs2 ...

谢谢,但是我没有在里面找到硬件用的LCM12864J-3
回复

使用道具 举报

ID:753047 发表于 2020-5-16 13:01 | 显示全部楼层
taotie 发表于 2020-5-16 11:32
瞟一眼~那个上拉电阻RP1用错了

怎么错啦啊
回复

使用道具 举报

ID:753047 发表于 2020-5-16 13:03 | 显示全部楼层
angmall 发表于 2020-5-16 10:47
你这个12864LCD是KS0108驱动芯片的
你的软件是驱动st7920,可惜proteus库里没有
所以不显示。

不太懂
回复

使用道具 举报

ID:342822 发表于 2020-5-16 13:25 | 显示全部楼层

应该用RESPACK-8并且1脚接+5v
回复

使用道具 举报

ID:753047 发表于 2020-5-16 13:35 | 显示全部楼层
taotie 发表于 2020-5-16 13:25
应该用RESPACK-8并且1脚接+5v

好的,谢谢,我试一下
回复

使用道具 举报

ID:452950 发表于 2020-5-16 14:11 | 显示全部楼层
可以自己添加到元件库
LCD12864A.dll Proteus中文字库元件下载(ST7920)单片机控制DS18B20温度传感器 - 单片机仿真论坛 单片机论坛 http://www.51hei.com/bbs/dpj-148431-1.html
回复

使用道具 举报

ID:752659 发表于 2020-5-16 14:48 | 显示全部楼层
http://www.51hei.com/bbs/dpj-80017-1.html 用这个显示屏应该可以解决你带不能显示的问题
回复

使用道具 举报

ID:753047 发表于 2020-5-16 15:52 | 显示全部楼层
xxpp2011 发表于 2020-5-16 14:11
可以自己添加到元件库
LCD12864A.dll Proteus中文字库元件下载(ST7920)单片机控制DS18B20温度传感器 - 单 ...

不知道哪里又错了
回复

使用道具 举报

ID:753047 发表于 2020-5-16 15:54 | 显示全部楼层
qwersde 发表于 2020-5-16 14:48
http://www.51hei.com/bbs/dpj-80017-1.html 用这个显示屏应该可以解决你带不能显示的问题

谢谢,我找到那个液晶了
回复

使用道具 举报

ID:753386 发表于 2020-5-16 16:31 | 显示全部楼层
你写的代码是针对液晶A的,但是你仿真软件里添加的是液晶B。你用A的驱动代码肯定驱动不了B。要么你找A的器件描述添加进proteus;要么改自己的代码,按照你proteus选择的液晶型号进行驱动它打代码编写。
回复

使用道具 举报

ID:753047 发表于 2020-5-16 19:43 | 显示全部楼层
kakakakaka 发表于 2020-5-16 16:31
你写的代码是针对液晶A的,但是你仿真软件里添加的是液晶B。你用A的驱动代码肯定驱动不了B。要么你找A的器 ...

我找到那个液晶了,但是还是不显示
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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