一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

搜索
楼主: efan

求助:12864用Proteus模拟可以正常显示但是实物就不行了

  [复制链接]
发表于 2012-3-11 18:33 | 显示全部楼层
参考一下看看
[首发帖] 收到了lcdmk送的12864转些资料
https://www.yleee.com.cn/thread-12969-1-1.html
回复

使用道具 举报

 楼主| 发表于 2012-3-11 18:34 | 显示全部楼层
回复  efan


    模拟和实物是不相同的。有的元件都没接上,默认。
bigradio 发表于 2012-3-11 18:28 https://www.yleee.com.cn/images/common/back.gif



    M16部分没问题,是最小系统板,我通过一个蜂鸣器加在循环中,可以正常鸣叫,说明都忙都是成功的,估计是写数据不成功。

模拟.JPG

对比度Vo已经接了,按照淘宝上的方法接的,实际也可以调:注意!对比度调法:用10k电位器一脚接地,一脚接负压输出脚(18脚),中间抽头接Vo对比度调节脚(3脚),对比度的调节和程序是否运行无关,对比度过浅看不见字。

我从51改的程序:
////////////////lcd.c

  1. /***************************************************************************************
  2. *     QQ:120173389   MAIL:  tlp.totop@foxmail.com                        *
  3. *     Baidu 空间     http://hi.baidu.com/tlptotop                        *
  4. ***************************************************************************************/
  5. #include <datatype.h>
  6. //#include <intrins.h>
  7. //#include <stdio.h>
  8. //#include <STC89.H>
  9. #include <avr/io.h>
  10. #include "lcd.h"
  11. #include "chartbl8x16.h"
  12. //#include "chartbl16x16.h"
  13. #define FREQ 8   //晶振频率
  14. //延时t毫秒
  15. void DelayMs(uint t)
  16. {
  17. uint i;
  18. for(i=0;i<t;i++)
  19.   _delay_loop_2(FREQ * 250);
  20. }
  21. //延时t微秒
  22. void DelayUs(uint t)
  23. {
  24. _delay_loop_2(2*t);
  25. }
  26. void SelectScreen(uchar screen)
  27. {
  28. switch(screen)
  29. {
  30.   case 0: lcdCS1_L();lcdCS2_H();  break;   //左屏
  31.      case 1: lcdCS2_L();lcdCS1_H();  break;   //右屏
  32. }
  33. }
  34. //===========================================================
  35. //测忙
  36. void whileBusy(void)
  37. {
  38. DDRD&=0x00;   //全部输入
  39. PORTD=0xFF;   //PD上拉电阻开
  40. lcdEn_L();
  41. DelayUs(1);
  42. lcdRs_L();   //在进行读操作前要进行一次空读操作
  43. lcdRw_H();
  44. DelayUs(1);
  45. lcdEn_H();
  46. DelayUs(1);
  47. while(busyFlag())
  48. {
  49.   lcdEn_L();
  50.   DelayUs(1);
  51.   lcdEn_H();
  52.   DelayUs(1);
  53. }
  54. lcdEn_L();
  55. }
  56. //===========================================================
  57. //写指令
  58. void lcdWriteCommand (uchar cmd)
  59. {
  60. whileBusy();
  61. lcdEn_L();
  62. //DelayUs(1);
  63. DDRD|=0xFF;      //全部输出
  64. lcdDataOut=cmd;
  65. lcdRs_L();
  66. lcdRw_L();
  67. DelayUs(1);
  68. lcdEn_H();
  69. DelayUs(1);
  70. lcdEn_L();
  71. lcdRw_H();
  72. DelayUs(1);
  73. }
  74. //===========================================================
  75. //写数据
  76. void lcdWriteData (uchar dat)
  77. {
  78. whileBusy();
  79. lcdEn_L();
  80. //DelayUs(1);
  81. DDRD|=0xFF;      //全部输出
  82. lcdDataOut=dat;
  83. lcdRs_H();
  84. lcdRw_L();
  85. DelayUs(1);
  86. lcdEn_H();
  87. DelayUs(1);
  88. lcdEn_L();
  89. lcdRw_H();
  90. DelayUs(1);
  91. }
  92. //===========================================================
  93. //读数据
  94. uchar lcdReadData (void)
  95. {
  96. uchar dat;
  97. lcdEn_L();
  98. //DelayUs(1);
  99. whileBusy();
  100. DDRD&=0x00;   //全部输入
  101. PORTD=0xFF;   //PD上拉电阻开
  102. lcdRs_H();
  103. lcdRw_H();
  104. DelayUs(1);
  105. lcdEn_H();
  106. DelayUs(1);
  107. dat=lcdDataIn;
  108. lcdEn_L();
  109. lcdRw_L();
  110. return dat;
  111. }
  112. //===========================================================
  113. //写入坐标
  114. void wrPosition (uchar page,uchar y)
  115. {
  116. lcdWriteCommand(0xB8+page);  //设置页
  117. lcdWriteCommand(0x40+y);  //设置列
  118. }
  119. //===========================================================
  120. //液晶屏初始化
  121. void lcdInit(void)
  122. {
  123. SelectScreen(0);
  124. lcdWriteCommand(0xC0);    //设置初始行
  125. lcdWriteCommand(0x3F);    //显示打开
  126. SelectScreen(1);
  127. lcdWriteCommand(0xC0);    //设置初始行
  128. lcdWriteCommand(0x3F);    //显示打开
  129. }
  130. void dispChar8x16(uchar line,uchar row,uchar shift)
  131. {
  132. uchar i=0;
  133. if (row<8)
  134.   SelectScreen(0);
  135. else
  136. {
  137.   SelectScreen(1);
  138.   row-=8;
  139. }
  140. wrPosition(line*2,row*8);
  141. for(i=0; i<8; i++)
  142. {
  143.   lcdWriteData(ASCII816[(shift-32)*16+i]);
  144. }
  145. wrPosition(line*2+1,row*8);
  146. for(i=0; i<8; i++)
  147. {
  148.   lcdWriteData(ASCII816[(shift-32)*16+8+i]);
  149. }
  150. }
  151. /*//===========================================================
  152. //显时一个字符
  153. void dispChar16x16(uchar line,uchar row,uchar shift)
  154. {
  155. uchar i=0;
  156. SelectScreen(0);
  157. wrPosition(line*2,row*16);
  158. for(i=0; i<16; i++)
  159. {
  160.   lcdWriteData(~HZTable[shift*32+i]);
  161. }
  162. wrPosition(line*2+1,row*16);
  163. for(i=0; i<16; i++)
  164. {
  165.   lcdWriteData(~HZTable[shift*32+16+i]);
  166. }
  167. }
  168. */
  169. //===========================================================
  170. //显时文本
  171. void dispString(uchar line,uchar row,char *msg)
  172. {
  173. while(*msg!='\0')
  174. {
  175.   uchar data=*msg;
  176.   dispChar8x16(line,row,data);
  177.   msg++;
  178.   row++;
  179.   //DelayMs(50);
  180. }
  181. }

复制代码


/////////////lcd.h

  1. /***************************************************************************************
  2. *     QQ:120173389   MAIL:  tlp.totop@foxmail.com                        *
  3. *     Baidu 空间     http://hi.baidu.com/tlptotop                        *
  4. ***************************************************************************************/
  5. #ifndef __LCD_H__  //防止头文件被重复编译
  6. #define __LCD_H__
  7. #include<datatype.h>
  8. #include <avr/io.h>
  9. //#include <STC89.H>
  10. /*************************************************
  11.     预定义声明                  
  12. *************************************************/
  13. /*************************************************
  14.     硬件连接声明                  
  15. *************************************************/
  16. #define lcdRs_H()  PORTC|=1<<PC7  //数据
  17. #define lcdRs_L()  PORTC&=~(1<<PC7) //命令
  18. #define lcdRw_H()  PORTC|=1<<PC6  //读控制
  19. #define lcdRw_L()  PORTC&=~(1<<PC6) //写控制
  20. #define lcdEn_H()  PORTC|=1<<PC5  //使能控制
  21. #define lcdEn_L()  PORTC&=~(1<<PC5) //使能控制
  22. #define lcdCS1_H()  PORTC|=1<<PC0  //CS1
  23. #define lcdCS1_L()  PORTC&=~(1<<PC0) //CS1
  24. #define lcdCS2_H()  PORTC|=1<<PC1  //CS2
  25. #define lcdCS2_L()  PORTC&=~(1<<PC1) //CS2
  26. #define lcdRST_H()  PORTC|=1<<PC2  //RST
  27. #define lcdRST_L()  PORTC&=~(1<<PC2) //RST
  28. #define busyFlag()  PIND&_BV(PD7)  //液晶忙标志
  29. #define lcdDataOut  PORTD    //液晶数据
  30. #define lcdDataIn  PIND    //液晶数据
  31. #define NOP      asm volatile("nop"::)
  32. #endif
  33. /*******************************************************************************
  34.                              End Of File
  35. *******************************************************************************/

复制代码


回复

使用道具 举报

发表于 2012-3-11 18:36 | 显示全部楼层
KS0108-12864无字库、大数字时分、时钟、农历、生肖年、温度
https://www.yleee.com.cn/viewthr ... %3Bfilter%3D2592000
回复

使用道具 举报

 楼主| 发表于 2012-3-11 18:38 | 显示全部楼层
参考一下看看
[首发帖] 收到了lcdmk送的12864转些资料
lichuang1005 发表于 2012-3-11 18:33 https://www.yleee.com.cn/images/common/back.gif



    看到了,好像都是51的。
回复

使用道具 举报

发表于 2012-3-11 18:41 | 显示全部楼层
RW直接接地试试
回复

使用道具 举报

 楼主| 发表于 2012-3-11 19:41 | 显示全部楼层
RW直接接地试试
lichuang1005 发表于 2012-3-11 18:41 https://www.yleee.com.cn/images/common/back.gif



    接地肯定不行,因为要测忙,要读的啊。我试了雷锋贴中的M16的12864程序,4M时钟,仿真有问题,只有一个“工”字形,按照他的接法重新接了下,也是不显示,郁闷。
12864.JPG
回复

使用道具 举报

发表于 2012-3-11 19:57 | 显示全部楼层
12864对比度需要负压的,也就是仿真的18脚
回复

使用道具 举报

发表于 2012-3-11 20:33 | 显示全部楼层
仿真可以、实物不显示的话、接上上拉电阻试试
回复

使用道具 举报

 楼主| 发表于 2012-3-11 20:52 | 显示全部楼层
12864对比度需要负压的,也就是仿真的18脚
sdf15937 发表于 2012-3-11 19:57 https://www.yleee.com.cn/images/common/back.gif



    接了,对比度可以调,应该不是这个问题。
回复

使用道具 举报

 楼主| 发表于 2012-3-11 20:54 | 显示全部楼层
仿真可以、实物不显示的话、接上上拉电阻试试
dgcplyh 发表于 2012-3-11 20:33 https://www.yleee.com.cn/images/common/back.gif



    使用的内部上拉,应该没区别吧?

    1. DDRD&=0x00;   //全部输入

    2. PORTD=0xFF;   //PD上拉电阻开

    复制代码
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-15 20:40 , Processed in 0.042640 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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