4495|7

88

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

新手求助。。。液晶屏驱动程序 [复制链接]

单片机是MSP430F149
液晶显示屏是OCMJ15×20D.
液晶屏相关信息http://www.ec66.com/market/manual/OCMJ-D.pdf
程序如下:

  1. #include
  2. #define uchar     unsigned char
  3. #define uint      unsigned int
  4. #define LCD_RS    BIT7
  5. #define LCD_WR    BIT6
  6. #define LCD_RD    BIT5
  7. #define LCD_CS1   BIT4
  8. #define LCD_CS2   BIT3
  9. #define LCD_BUSY  BIT2
  10. #define LCD_INT   BIT1
  11. #define LCD_RST   BIT0

  12. void Init_clk()
  13. {
  14.   uchar i;
  15.   
  16.   BCSCTL1 &= ~XT2OFF;
  17.   BCSCTL2 &= SELM1 + SELS;
  18.   do
  19.   {
  20.     IFG1 &= ~OFIFG;
  21.     for(i=100; i>0; i--);
  22.   }while((IFG1 & OFIFG) != 0);
  23.   IFG1 &= ~OFIFG;
  24. }

  25. void Delay(uchar count)
  26. {
  27.   while(count--);
  28. }

  29. void Init_lcd()
  30. {
  31.   P2DIR |= BIT6;
  32.   P2OUT |= BIT6;          //锁存器端口处理
  33.   Delay(100);
  34.   P4DIR = 0xff;
  35.   P4DIR &= ~(LCD_BUSY|LCD_INT);  
  36.   P4OUT = 0xff;
  37. }

  38. void Lcd_regwr(uchar data)
  39. {
  40.   P5DIR = 0xff;       //P5 output
  41.   P5OUT = data;
  42.   P4OUT &= ~LCD_CS1;
  43.   P4OUT |= LCD_RD;    //disable read
  44.   P4OUT &= ~LCD_RS;   //select buffer
  45.   P4OUT &= ~LCD_WR;   //enable write
  46.   _NOP();
  47.   P4OUT |= LCD_WR;
  48.   P4OUT |= LCD_RS;
  49.   P4OUT |= LCD_CS1;   //wr/rs/cs1  disable
  50. }
  51. void Lcd_regwrite(uchar regaddress, uchar regdata)
  52. {
  53.   Lcd_regwr(regaddress);
  54.   Delay(1);
  55.   Lcd_regwr(regdata);
  56. }
  57. void Lcd_datawrite(uchar data)
  58. {
  59.   while((P4OUT&LCD_BUSY) == 1);
  60.   P5DIR = 0xff;       //P5 output
  61.   P5OUT = data;
  62.   P4OUT &= ~LCD_CS1;  //chip enable
  63.   P4OUT |= LCD_RD;
  64.   P4OUT |= LCD_RS;    //select display ram
  65.   P4OUT &= ~LCD_WR;
  66.   _NOP();
  67.   P4OUT |= LCD_WR;
  68.   P4OUT |= LCD_RS;
  69.   P4OUT |= LCD_CS1;   //disable
  70. }

  71. uchar Lcd_regread(uchar regaddress)
  72. {
  73.   uchar regdata;
  74.   
  75.   Lcd_regwr(regaddress);
  76.   P5DIR = 0x00;       //P5 input
  77.   P4OUT &= ~LCD_CS1;
  78.   P4OUT |= LCD_WR;    //disable write
  79.   P4OUT &= ~LCD_RS;   //select buffer
  80.   P4OUT &= ~LCD_RD;   //enable  read
  81.   ;
  82.   regdata = P5IN;
  83.   P4OUT |= LCD_RD;
  84.   P4OUT |= LCD_RS;
  85.   P4OUT |= LCD_CS1;

  86.   return regdata;
  87. }

  88. void main()
  89. {
  90.   volatile uchar result;
  91.   
  92.   WDTCTL = WDTPW + WDTHOLD;
  93.   Init_clk();
  94.   Init_lcd();
  95.   while(1)
  96.   {
  97.     Lcd_regwrite(0x00,BIT3);
  98.     result = Lcd_regread(0x00);
  99.     _NOP();
  100.     _NOP();
  101.   }
  102. }
复制代码

这段代码的作用是,修改液晶屏REG[00]的第四位,然后再读取修改后的REG[00].但是我单步调试的时候发现没有能修改成功。
我不知道这个驱动写得到底对不对。请各位大哥大姐,帮帮我。谢谢了!!!

最新回复

最近也在搞这个。。。  详情 回复 发表于 2013-3-7 10:00
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
呵呵,你的LCD驱动还没弄好啊;

我的 6800或8080控制器的LCD的设计资料与51、61的源代码,看到你已经下载了,

晚上9点后,QQ:604914729聊吧
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
唉,我都不好意思再问了。这么久还没弄出来。
新手。。。请多包涵一下谢谢了
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 never_ql 的回复:
唉,我都不好意思再问了。这么久还没弄出来。
新手。。。请多包涵一下谢谢了



大家都有成长的过程! 这都很正常!有什么不好意思啊!!
有问题一定要彻底弄明白,学到知识,这才是最关键。

况且,LCD的时序基本上是所有简单外设中,最难的一个!!

 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
晚上9点后,如果能上网,我再给传点资料吧,朋友
QQ加我。

我大二的时候,也遇到LCD调了很久,都快1个多月的业余时间,最后还是我师哥帮我整明白的,呵呵。
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(中级)

6
 
跟着数据手册里的时序这个是不会有问题的

如果实在不行的话,技术支持的会给出某个版本的源码

再抄一下那个源码,如果是软件的问题这样做基本都能出来

注意一下你芯片的速度就好
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
液晶主要是时序问题,弄明白一个了别的就都好说了,别急慢慢来
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

8
 
最近也在搞这个。。。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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