2650|5

89

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助LCD驱动问题 [复制链接]

想用51系列的MCU驱动一个44×141的LCD屏幕,LCD驱动芯片是义隆的EM65168(80seg),
请问有人用过吗,现在急的要死,就是全黑全亮都没有办法实现啊,现在连接方式是按照datasheet 上才80*160的方式连接,测试程序比较乱   ,如下所示,希望高手来帮忙啊,先谢谢啦!

  1. #include "Stc89le52rc.h"
  2. #include

  3. #define TIME0H 0x4c//50ms
  4. #define TIME0L 0x00
  5. #define BAUT_9600H        0xfd
  6. #define BAUT_9600L        0xfd

  7. #define uint unsigned int
  8. #define uchar unsigned char


  9. #define        uchar unsigned char
  10. #define        uint  unsigned int

  11. // LCD160*80 数据线
  12. #define LCDPort P0

  13. // LCD160*80 I/O 信号管脚
  14. sbit RAMADS = P1^0;
  15. sbit RAMW = P1^1;
  16. sbit RAMEN1 = P1^3;
  17. sbit RAMEN2 = P1^4;
  18. sbit RAMEN3 = P1^5;

  19. //*************************************************************************************************
  20. //*                                                                                                                                                                                                  *
  21. //*                          *******************************全局变量*****************************                                  *
  22. //*                                                                                                                                                                                                  *
  23. //*************************************************************************************************
  24. unsigned int i=0;
  25. unsigned int j=0;
  26. unsigned int k=0;

  27. /******************************************
  28. name:                delayms()       
  29. variable:                input:
  30.                                 t:unsigned int data(16 bit)
  31. description:        delay a millisecond
  32. ******************************************/

  33. void Delayms(uint t)
  34. {
  35.         unsigned char k;
  36.         while(t--)
  37.         {
  38.                 for(k=0; k<125; k++)       
  39.                         {;}
  40.         }
  41. }
  42. /******************************************
  43. name:                 s()       
  44. variable:                  
  45.                                  
  46. description:         
  47. ******************************************/
  48. void send_byte(uchar c_data)
  49. {
  50.         SBUF=c_data;
  51.         while(TI==0);
  52.         TI=0;
  53. }

  54. //写高地址
  55. //Address_High:数据高地址
  56. void WRITE_HIGH_ADDRESS(unsigned char Address_High)
  57. {
  58. RAMADS=0;
  59. LCDPort=Address_High;
  60. RAMW=0;
  61. Delayms(1);
  62. RAMW=1;
  63. Delayms(1);
  64. }

  65. //写低地址
  66. //Address_Low:数据低地址
  67. void WRITE_LOW_ADDRESS(unsigned char Address_Low)
  68. {

  69. RAMADS=0;
  70. LCDPort=Address_Low;
  71. RAMW=0;
  72. Delayms(1);
  73. RAMW=1;
  74. Delayms(1);
  75. }

  76. //写数据
  77. //dat:显示数据
  78. void WRITE_DATA(unsigned char dat)
  79. {

  80. RAMADS=1;
  81. Delayms(1);

  82. LCDPort=dat;
  83. RAMW=0;
  84. Delayms(1);
  85. RAMW=1;
  86. Delayms(1);

  87. }

  88. void Initialize()            //初始化
  89. {

  90.        
  91. /*        RAMEN1=0;
  92.         Delayms(1);
  93.         RAMEN2=1;
  94.         Delayms(1);
  95.         RAMEN3=1;
  96.         Delayms(1);
  97.         WRITE_HIGH_ADDRESS(0x05);
  98.         WRITE_LOW_ADDRESS(0x00);
  99.         WRITE_DATA(0xDE);
  100.        
  101.         Delayms(30);

  102.         WRITE_HIGH_ADDRESS(0x05);
  103.         WRITE_LOW_ADDRESS(0x01);
  104.         WRITE_DATA(0x08);
  105.        
  106.         Delayms(30);
  107.        
  108.         WRITE_HIGH_ADDRESS(0x05);
  109.         WRITE_LOW_ADDRESS(0x02);
  110.         WRITE_DATA(0x04);

  111.         Delayms(30);
  112.         RAMADS=1;
  113.         RAMEN1=1;
  114.         RAMEN2=1;
  115.         RAMEN3=1;
  116.         RAMW=1;*/

  117.         RAMEN1=1;
  118.         Delayms(1);
  119.         RAMEN2=0;
  120.         Delayms(1);
  121.         RAMEN3=1;
  122.         Delayms(1);
  123.         WRITE_HIGH_ADDRESS(0x05);
  124.         WRITE_LOW_ADDRESS(0x00);
  125.         WRITE_DATA(0x00);
  126.         Delayms(30);
  127.        
  128.         WRITE_HIGH_ADDRESS(0x05);
  129.         WRITE_LOW_ADDRESS(0x01);
  130.         WRITE_DATA(0x02);
  131.         Delayms(30);
  132.        
  133.         WRITE_HIGH_ADDRESS(0x05);
  134.         WRITE_LOW_ADDRESS(0x02);
  135.         WRITE_DATA(0x00);
  136.         Delayms(30);
  137.        

  138.         RAMEN1=1;
  139.         Delayms(1);
  140.         RAMEN2=1;
  141.         Delayms(1);
  142.         RAMEN3=0;
  143.         Delayms(1);
  144.         RAMADS=0;

  145.         WRITE_HIGH_ADDRESS(0x05);
  146.         WRITE_LOW_ADDRESS(0x00);
  147.         WRITE_DATA(0x00);
  148.         Delayms(30);
  149.        
  150.         WRITE_HIGH_ADDRESS(0x05);
  151.         WRITE_LOW_ADDRESS(0x01);
  152.         WRITE_DATA(0x02);
  153.         Delayms(30);
  154.        
  155.         WRITE_HIGH_ADDRESS(0x05);
  156.         WRITE_LOW_ADDRESS(0x02);
  157.         WRITE_DATA(0x00);

  158.         Delayms(30);  
  159.   
  160. }

  161. void FillBlack()
  162. {

  163. /*        for(i=0x00;i<0x2B0;i+=2)     //写主IC
  164.         {
  165.      
  166.         RAMEN1=0;
  167.         Delayms(1);
  168.         RAMEN2=1;
  169.         Delayms(1);
  170.         RAMEN3=1;
  171.         Delayms(1);
  172.         RAMADS=0;

  173.             WRITE_HIGH_ADDRESS(i+1);           //写入显示起始地址
  174.         Delayms(1);
  175.         WRITE_LOW_ADDRESS(i);

  176.         Delayms(6);
  177.             WRITE_DATA(0xff);
  178.         Delayms(1);
  179.       
  180.         }
  181. */               
  182.                 RAMEN1=1;
  183.         Delayms(1);
  184.         RAMEN2=0;
  185.         Delayms(1);
  186.         RAMEN3=1;
  187.         Delayms(1);
  188.         for(i=0x00;i<0x2B0;i+=2)     //写从IC1
  189.         {
  190.          
  191.         RAMADS=0;

  192.             WRITE_HIGH_ADDRESS(i+1);           //写入显示起始地址
  193.         Delayms(1);
  194.         WRITE_LOW_ADDRESS(i);

  195.         Delayms(6);
  196.             WRITE_DATA(0xff);
  197.         Delayms(1);
  198.       
  199.         }
  200.        
  201.                 RAMEN1=1;
  202.         Delayms(1);
  203.         RAMEN2=1;
  204.         Delayms(1);
  205.         RAMEN3=0;
  206.         Delayms(1);
  207.         for(i=0x00;i<0x2B0;i+=2)     //写从IC2
  208.         {
  209.         
  210.         RAMADS=0;

  211.             WRITE_HIGH_ADDRESS(i+1);           //写入显示起始地址
  212.         Delayms(1);
  213.         WRITE_LOW_ADDRESS(i);

  214.         Delayms(6);
  215.             WRITE_DATA(0xff);
  216.         Delayms(1);
  217.         }

  218. }

  219. void FillWhite()
  220. {

  221.         for(i=0x00;i<0x2B0;i+=2)     //写主IC
  222.         {
  223.       
  224.         RAMEN1=0;
  225.         Delayms(1);
  226.         RAMEN2=1;
  227.         Delayms(1);
  228.         RAMEN3=1;
  229.         Delayms(1);
  230.         RAMADS=0;

  231.             WRITE_HIGH_ADDRESS(i+1);           //写入显示起始地址
  232.         Delayms(1);
  233.         WRITE_LOW_ADDRESS(i);

  234.         Delayms(6);
  235.             WRITE_DATA(0x00);
  236.         Delayms(1);
  237.         }

  238.         for(i=0x00;i<0x2B0;i+=2)     //写从IC1
  239.         {
  240.         RAMEN1=1;
  241.         Delayms(1);
  242.         RAMEN2=0;
  243.         Delayms(1);
  244.         RAMEN3=1;
  245.         Delayms(1);
  246.         RAMADS=0;

  247.             WRITE_HIGH_ADDRESS(i+1);           //写入显示起始地址
  248.         Delayms(1);
  249.         WRITE_LOW_ADDRESS(i);

  250.         Delayms(6);
  251.             WRITE_DATA(0x00);
  252.         }

  253.         for(i=0x00;i<0x2B0;i++)     //写从IC2
  254.         {
  255.         RAMEN1=1;
  256.         Delayms(1);
  257.         RAMEN2=1;
  258.         Delayms(1);
  259.         RAMEN3=0;
  260.         Delayms(1);
  261.         RAMADS=0;

  262.             WRITE_HIGH_ADDRESS(i+1);           //写入显示起始地址
  263.         Delayms(1);
  264.         WRITE_LOW_ADDRESS(i);

  265.         Delayms(6);
  266.             WRITE_DATA(0x00);
  267.         Delayms(1);
  268.         }

  269. }

  270. //*************************************************************************************************
  271. //*                                                                                                                                                                                                  *
  272. //*                          ********************************主函数******************************                                  *
  273. //*                                                                                                                                                                                                  *
  274. //*************************************************************************************************
  275. void main()
  276. {

  277. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置定时器0>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  278.         SCON=0x50;
  279.         TMOD=0x20;                        //定时器0,模式1。

  280.         TH1=BAUT_9600H;
  281.         TL1=BAUT_9600L;
  282.         TR1=1;
  283.         ET1=1;
  284.         ES=1;       

  285.         EA=1;                                //开总中断

  286.         Initialize();
  287.        
  288.         SBUF=0x55;
  289.         while (TI==0);
  290.         TI=0;
  291.         Delayms(1000);
  292.         SBUF=0xAA;
  293.         while (TI==0);
  294.         TI=0;               
  295.         while(1)
  296.         {
  297.                 RAMEN1=1;
  298.         Delayms(1);
  299.         RAMEN2=0;
  300.         Delayms(1);
  301.         RAMEN3=1;
  302.         Delayms(1);
  303.         for(i=0x00;i<0x44;i+=2)     //写从IC1
  304.         {
  305.          
  306.         RAMADS=0;

  307.             WRITE_HIGH_ADDRESS(i+1);           //写入显示起始地址
  308.         Delayms(1);
  309.         WRITE_LOW_ADDRESS(i);

  310.         Delayms(6);
  311.             WRITE_DATA(0xff);
  312.         Delayms(1);
  313.       
  314.         }
  315.                
  316.                 //FillBlack();
  317.                 Delayms(1000);
  318.                 send_byte(0x11);
  319.                 //FillWhite();
  320.                 Delayms(1000);
  321.                 send_byte(0x22);
  322.                
  323.         }
  324. }

复制代码

最新回复

先确定硬件没有问题再调吧!  详情 回复 发表于 2009-10-29 16:21
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你对照者手册看看这个程序不行吗?手册上应该有时序图吧 看看有没有地方有错误
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你知道控制显示是控制2个从IC还是主IC啊,我现在头绪投乱了
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

4
 
严重支持
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
应该是控制两个从的。往各个驱动芯片ram map里面写就可以吧。
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

6
 
先确定硬件没有问题再调吧!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表