[PIC®/AVR®/dsPIC®产品] pic18f66k80驱动LCM12864R疑问

[复制链接]
1291|3
 楼主| 渔夫的烟斗 发表于 2017-8-25 19:36 | 显示全部楼层 |阅读模式
本帖最后由 渔夫的烟斗 于 2017-8-25 19:39 编辑

MAIN.C
  1. /*
  2. * File:   main.c
  3. * Author: Administrator
  4. *
  5. * Created on 2017?8?23?, ??4:38
  6. */

  7. #pragma config FOSC=HS1
  8. #pragma config WDTEN=OFF
  9. #pragma config PLLCFG = OFF
  10. #include <xc.h>
  11. #include "delay.h"
  12. #include "lcd.h"
  13. #include "port.h"
  14. #include <pic18f66k80.h>

  15. char ta[]={"================"};
  16. void main(void)
  17. {
  18.    
  19.    
  20.     port();
  21.     PORTG=0X00;
  22.     PORTB=0X00;
  23.     rst=1;
  24.    LcdInit();
  25. //   
  26.     while(1)
  27.     {
  28. //  sendByte(0xaa);
  29. //        sendCom(0x81);
  30. //        LcdInit();
  31. //         position(1,1);
  32. //         position(1,2);
  33. //         position(1,3);
  34. //         position(1,4);
  35. //        sendCom(0x55);
  36.         position(1,1);
  37.        LcdString("dddddd");
  38.                 position(2,1);
  39.        sendDat('H');
  40.                
  41.        delay5ms(100);
  42.          
  43.     }
  44. }

LCD.H
  1. /*
  2. * File:   LCD.c
  3. * Author: Administrator
  4. *
  5. * Created on 2017?8?3?, ??9:10
  6. */

  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include "lcd.h"
  10. #include "port.h"
  11. void sendByte(char send)
  12. {
  13.     char n;
  14.     for(n=0;n<8;n++)
  15.     {
  16.         slk=1;
  17.         if((send&0x80)==0x80)
  18.             sid=1;
  19.         else
  20.             sid=0;
  21.         delay25us(1);
  22.         slk=0;
  23.         delay25us(1);
  24.         send=send<<1;
  25.         
  26.     }
  27.    
  28.   

  29. }
  30. void sendCom(char com)
  31. {
  32.   
  33.     char comh,coml;
  34.     comh=com&0xf0;
  35.     coml=((com&0x0f)<<4);
  36.     cs=1;
  37.     sendByte(0xf8);
  38.    
  39.     sendByte(comh);
  40.    
  41.     sendByte(coml);
  42.     delay25us(16);
  43.     cs=0;
  44.    
  45. }
  46. void sendDat(char dat)
  47. {   
  48.    
  49.     char dath,datl;
  50.     dath=dat&0xf0;
  51.     datl=((dat&0x0f)<<4);
  52.     cs=1;
  53.     sendByte(0xfa);
  54.    
  55.     sendByte(dath);
  56.    
  57.     sendByte(datl);
  58.     delay25us(16);
  59.     cs=0;
  60.    

  61. }
  62. void position(char x,char y)
  63. {
  64.     char pos;
  65.     if(x==1)
  66.         pos=0x80+y;
  67.     if(x==2)
  68.         pos=0x90+y;
  69.     if(x==3)
  70.         pos=0x88+y;
  71.     if(x==4)
  72.         pos=0x98+y;
  73.      sendCom(pos);


  74. }
  75. void LcdInit()
  76. {
  77.    
  78.     psb=0;
  79.    
  80.     rst=1;
  81.     sendCom(0x30);
  82.     sendCom(0x0c);
  83.    
  84.    
  85.         sendCom(0x01);
  86.     delay25us(10);
  87.         sendCom(0x02);
  88.         sendCom(0x06);
  89.         sendCom(0x0c);
  90.         sendCom(0x14);
  91.    

  92. }
  93. void LcdString(char *p)
  94. {
  95.         while(*p!='\0')
  96.         {
  97.                 sendDat(*p);
  98.                 p++;
  99.         }


  100. }

DELAY.H
  1. /*
  2. * File:   delay.c
  3. * Author: Administrator
  4. *
  5. * Created on 2017Äê8ÔÂ3ÈÕ, ÉÏÎç9:11
  6. */

  7. #include "DELAY.h"
  8. void delay25us(char aa)
  9. {
  10.     char i;
  11.     while(aa--)
  12.         
  13.                 for(i=0;i<40;i++);

  14. }
  15. void delay10us(char cc)
  16. {
  17.     char i;
  18.     while(cc--)
  19.         
  20.                 for(i=0;i<16;i++);

  21. }
  22. void delay5ms(int bb)
  23. {
  24.     int i;
  25.     while(bb--)
  26.         
  27.                 for(i=0;i<800;i++);//400-->2.5MS


  28. }

PORT.H
  1. /*
  2. * File:   port.h
  3. * Author: Administrator
  4. *
  5. * Created on 2017?8?23?, ??4:39
  6. */

  7. #ifndef PORT_H
  8. #define        PORT_H
  9. #include <pic18f66k80.h>
  10. #define cs LATGbits.LATG0
  11. #define sid LATGbits.LATG1
  12. #define slk LATGbits.LATG2
  13. #define psb LATGbits.LATG3
  14. #define rst LATBbits.LATB0


  15. void port();



  16. #endif        /* PORT_H */

大体上代码就是如上,这个代码在STC单片机上验证通过可以显示,但是在PIC18F66K80上却不能正确运行【编译没有问题】。
因为第一次使用PIC芯片,对GPIO的操作不是很透彻。只会一般的操作。
https://git.oschina.net/deja/mplab_lcd12864.git  详细代码<<<<
本来这块板是画来学CAN的,但显示部份没能处理成功,CAN学习部分搁浅到现在。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
yulin0668 发表于 2017-8-26 13:56 | 显示全部楼层
我还没用过PIC的,现在公司要用PIC,特此来学习
yqdeso 发表于 2017-8-29 12:17 | 显示全部楼层
main.c  23  24行不正确
yqdeso 发表于 2017-8-29 12:18 | 显示全部楼层
yqdeso 发表于 2017-8-29 12:17
main.c  23  24行不正确

STC是准双向口吧?不需要单独设置GPIO的方向,但PIC是需要的。
在PIC中,设备端口方向是用TRISX寄存器来设置的,X就是A B  C  D端口号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

185

帖子

2

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