本帖最后由 渔夫的烟斗 于 2017-8-25 19:39 编辑
MAIN.C/*
* File: main.c
* Author: Administrator
*
* Created on 2017?8?23?, ??4:38
*/
#pragma config FOSC=HS1
#pragma config WDTEN=OFF
#pragma config PLLCFG = OFF
#include <xc.h>
#include "delay.h"
#include "lcd.h"
#include "port.h"
#include <pic18f66k80.h>
char ta[]={"================"};
void main(void)
{
port();
PORTG=0X00;
PORTB=0X00;
rst=1;
LcdInit();
//
while(1)
{
// sendByte(0xaa);
// sendCom(0x81);
// LcdInit();
// position(1,1);
// position(1,2);
// position(1,3);
// position(1,4);
// sendCom(0x55);
position(1,1);
LcdString("dddddd");
position(2,1);
sendDat('H');
delay5ms(100);
}
}
LCD.H
/*
* File: LCD.c
* Author: Administrator
*
* Created on 2017?8?3?, ??9:10
*/
#include <stdio.h>
#include <stdlib.h>
#include "lcd.h"
#include "port.h"
void sendByte(char send)
{
char n;
for(n=0;n<8;n++)
{
slk=1;
if((send&0x80)==0x80)
sid=1;
else
sid=0;
delay25us(1);
slk=0;
delay25us(1);
send=send<<1;
}
}
void sendCom(char com)
{
char comh,coml;
comh=com&0xf0;
coml=((com&0x0f)<<4);
cs=1;
sendByte(0xf8);
sendByte(comh);
sendByte(coml);
delay25us(16);
cs=0;
}
void sendDat(char dat)
{
char dath,datl;
dath=dat&0xf0;
datl=((dat&0x0f)<<4);
cs=1;
sendByte(0xfa);
sendByte(dath);
sendByte(datl);
delay25us(16);
cs=0;
}
void position(char x,char y)
{
char pos;
if(x==1)
pos=0x80+y;
if(x==2)
pos=0x90+y;
if(x==3)
pos=0x88+y;
if(x==4)
pos=0x98+y;
sendCom(pos);
}
void LcdInit()
{
psb=0;
rst=1;
sendCom(0x30);
sendCom(0x0c);
sendCom(0x01);
delay25us(10);
sendCom(0x02);
sendCom(0x06);
sendCom(0x0c);
sendCom(0x14);
}
void LcdString(char *p)
{
while(*p!='\0')
{
sendDat(*p);
p++;
}
}
DELAY.H
/*
* File: delay.c
* Author: Administrator
*
* Created on 2017Äê8ÔÂ3ÈÕ, ÉÏÎç9:11
*/
#include "DELAY.h"
void delay25us(char aa)
{
char i;
while(aa--)
for(i=0;i<40;i++);
}
void delay10us(char cc)
{
char i;
while(cc--)
for(i=0;i<16;i++);
}
void delay5ms(int bb)
{
int i;
while(bb--)
for(i=0;i<800;i++);//400-->2.5MS
}
PORT.H
/*
* File: port.h
* Author: Administrator
*
* Created on 2017?8?23?, ??4:39
*/
#ifndef PORT_H
#define PORT_H
#include <pic18f66k80.h>
#define cs LATGbits.LATG0
#define sid LATGbits.LATG1
#define slk LATGbits.LATG2
#define psb LATGbits.LATG3
#define rst LATBbits.LATB0
void port();
#endif /* PORT_H */
大体上代码就是如上,这个代码在STC单片机上验证通过可以显示,但是在PIC18F66K80上却不能正确运行【编译没有问题】。
因为第一次使用PIC芯片,对GPIO的操作不是很透彻。只会一般的操作。
https://git.oschina.net/deja/mplab_lcd12864.git 详细代码<<<<
本来这块板是画来学CAN的,但显示部份没能处理成功,CAN学习部分搁浅到现在。
|