12864串口可否读出lcd内部状态数据,最好有源码

[复制链接]
1847|8
 楼主| robocon2014 发表于 2013-8-9 20:15 | 显示全部楼层 |阅读模式
我自己
  1. /***************************************************************/
  2. /* 读数据程序没能调出,应该是5v 与3v之间的传输问题。如果接收可用*                                                           
  3. * 则可用查忙函数代替延时                                       *                     
  4. *                                                              *
  5. *                                                              *
  6. *                                                              *
  7. *                                                              *
  8. ***************************************************************/
  9. #include <msp430g2553.h>
  10. #define uchar unsigned char
  11. #define uint unsigned int
  12. #define SID BIT1
  13. #define SCK_1 P1OUT|=BIT4

  14. uchar Table[] = "2014111111111111111";
  15. void write_SID(uchar byte);
  16. void write_data(uchar data);
  17. void write_com(uchar com);
  18. uchar read_SID(void);
  19. uchar read_data(void);
  20. uchar read_com(void);
  21. uchar read_busy(void);
  22. void check_busy(void);
  23. void delay_us(uint a);
  24. void delay_ms(uint a);
  25. void init(void);
  26. void display(uchar address,uchar *p,uint num);
  27. uchar lcd;
  28. /*********主函数*************/
  29. void main( void )
  30. {  
  31.   WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
  32.   if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)                                    
  33.     while(1);
  34.   BCSCTL1 = CALBC1_1MHZ;                    // Set DCO to 1MHz
  35.   DCOCTL = CALDCO_1MHZ;
  36.   P1DIR |= BIT4 + BIT3;                     //1.3片选 1.4时钟
  37.   P2DIR |= BIT1;                            //2.1数据传输
  38.   P1OUT = 0xff;
  39.   P2OUT = 0xff;              
  40.   init();

  41.   display(0x80,Table,16);
  42.   display(0x90,Table+16,16);
  43.   display(0x88,Table+32,16);
  44.   display(0x98,Table+48,16);
  45.   LPM4;
  46. }
  47. /*******us延时*************/
  48. void delay_us(uint a)
  49. {
  50.   uint i;
  51.   for(i=a;i>0;i--);
  52. }
  53. /*******ms延时*************/
  54. void delay_ms(uint a)
  55. {
  56.   uint n=1000;
  57.   for(;a>0;a--)
  58.   for(;n>0;n--);
  59. }
  60. /*******写一个字节*************/
  61. void write_SID(uchar byte)
  62. {
  63.   uchar i;
  64.   P1OUT &= ~BIT4;                           
  65.   P1OUT |= BIT3;                             //片选使能
  66.   for(i=0;i<8;i++)
  67.   {
  68.     P1OUT &= ~BIT4;
  69.   if(byte&0x80)
  70.     P2OUT |= BIT1;
  71.   else
  72.     P2OUT &= ~BIT1;
  73.   P1OUT |= BIT4;
  74.   byte <<= 1;
  75.   }
  76.   P1OUT &= ~BIT3;                            //片选失能
  77.   P1OUT &= ~BIT4;
  78. }
  79. /*******读忙*************/
  80. uchar read_busy(void)
  81. {
  82.   uchar BF;
  83.   write_SID(0xfc);
  84.   P2DIR &= ~BIT1;
  85.   P1OUT &= ~BIT4;
  86.   P1OUT |= BIT3;
  87.   P1OUT &= ~BIT4;
  88.   BF = P2IN & BIT1;
  89.   P1OUT |= BIT4;
  90.   P1OUT &= ~BIT4;
  91.   P1OUT &= ~BIT3;
  92.   P2DIR |= BIT1;
  93.   return(BF);
  94. }
  95. /*******读一字节*************/
  96. uchar read_SID(void)
  97. {
  98.   uchar i,data;
  99.   P2DIR &= ~BIT1;
  100.   P1OUT &= ~BIT4;
  101.   P1OUT |= BIT3;
  102.   for(i=0;i<8;i++)
  103.   {
  104.     P1OUT &= ~BIT4;
  105.   if(P2IN&BIT1)
  106.   {
  107.     data <<= 1;
  108.     data |= BIT0;
  109.   }
  110.   else
  111.   {
  112.     data <<= 1;
  113.     data &= ~BIT0;
  114.     P1OUT |= BIT4;
  115.     P1OUT &= ~BIT4;
  116.   }
  117.   }
  118.   P1OUT &= ~BIT3;
  119.   P2DIR |= BIT1;
  120.   return(data);
  121. }
  122. /*******读一字节数据*************/
  123. uchar read_data(void)
  124. {
  125.   uchar h_data,l_data,data;
  126.   write_SID(0xfe);//第一个字节
  127.   h_data = read_SID();//收前半
  128.   l_data = read_SID();//收后半
  129.   data = h_data | l_data;//合并
  130.   return(data);
  131. }
  132. /*******读一字节指令*************/
  133. uchar read_com(void)
  134. {
  135.   uchar h_com,l_com,com;
  136.   write_SID(0xfc);
  137.   h_com = read_SID();
  138.   l_com = read_SID();
  139.   com = h_com | l_com;
  140.   return(com);
  141. }
  142. /*******判忙*************/
  143. void check_busy(void)
  144. {
  145.   while (read_busy() & 0xff);
  146. }
  147. /*******写一字节命令*************/
  148. void write_com(uchar com)
  149. {
  150.   write_SID(0xf8);//写第一个字节
  151.   write_SID(com & 0xf0);//第二个字节前半
  152.   write_SID((com<<4) & 0xf0);//第二个字节后半
  153. }
  154. /*******写一字节数据*************/
  155. void write_data(uchar data)
  156. {
  157.   write_SID(0xfa);
  158.   write_SID(data & 0xf0);
  159.   write_SID((data<<4) & 0xf0);
  160. }
  161. /*******初始化*************/
  162. void init(void)
  163. {
  164.   write_com(0x30);
  165.   check_busy();
  166.   write_com(0x08);//关显示
  167.   check_busy();
  168.   write_com(0x0c);//开显示,关光标
  169.   check_busy();
  170.   write_com(0x01);//清屏
  171.   check_busy();
  172.   write_com(0x06);//第一行显示位置 位址归位
  173.   check_busy();
  174. }
  175. /*******写字符串*************/
  176. void display(uchar address,uchar * p,uint num)
  177. {
  178.   uint i;
  179.   write_com(address);//写地址
  180.   check_busy();
  181.   for(i=0;i<num;i++)
  182.   {
  183.     write_data(*(p++));//写数据
  184.     check_busy();
  185.   }
  186. }



写的可以写进去,就是读不出来,请教各位大侠???
henryyam 发表于 2013-8-10 07:47 | 显示全部楼层
据说串口只能写,不能读。

要读,就用并口。
tyw 发表于 2013-8-10 07:53 | 显示全部楼层
串行模块不能读!
泥为死马要读鸭?读出来的东东就是你写进去的东东,写入时先留个备份不就行了!
riddlecn 发表于 2013-8-10 09:13 | 显示全部楼层
 楼主| robocon2014 发表于 2013-8-15 17:57 | 显示全部楼层
tyw 发表于 2013-8-10 07:53
串行模块不能读!
泥为死马要读鸭?读出来的东东就是你写进去的东东,写入时先留个备份不就行了! ...

这样啊,谢谢你了
 楼主| robocon2014 发表于 2013-8-15 17:58 | 显示全部楼层
riddlecn 发表于 2013-8-10 09:13

怎么了?:funk:
 楼主| robocon2014 发表于 2013-8-15 17:59 | 显示全部楼层
henryyam 发表于 2013-8-10 07:47
据说串口只能写,不能读。

要读,就用并口。

谢了
henryyam 发表于 2013-8-15 19:12 | 显示全部楼层
tyw 发表于 2013-8-10 07:53
串行模块不能读!
泥为死马要读鸭?读出来的东东就是你写进去的东东,写入时先留个备份不就行了! ...

RAM不够用时就需要读模块里的数据了。

如果RAM够用,就留一个备份。由于ST7920的字库单一,是16X16的,我就用1280 BYTES RAM的MCU开辟一个1024字节的数组给显示作缓冲,可以调整显示字体或者显示方向等。

henryyam 发表于 2013-8-15 19:12 | 显示全部楼层
robocon2014 发表于 2013-8-15 17:59
谢了

不用客气。:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

13

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部