📄 lcm_initial.c
字号:
#include "config.h"
#define SCK 0x00000010 //P0.4
#define MISO 0x00000020 //P0.5
#define MOSI 0x00000040 //P0.6
#define SSEL 0x00000080 //P0.7
#define OUT 0x000000D0
void DelayNS(uint32 dly)
{ uint32 i;
for(; dly>0; dly--)
for(i=0; i<100; i++);
}
//该函数用于发送一个字节(1,1,1,1,1,RW=0,RS=0,0)
//五个1用于串行同步,
void tongbu00(void)
{ IOCLR=SCK;
//5个1
IOSET=MOSI;
IOSET=SCK;
IOCLR=SCK;
IOSET=SCK;
IOCLR=SCK;
IOSET=SCK;
IOCLR=SCK;
IOSET=SCK;
IOCLR=SCK;
IOSET=SCK;
IOCLR=SCK; //时钟清零
IOCLR=MOSI; //传RW位0
IOSET=SCK;
IOCLR=SCK;
//传RS位0
IOSET=SCK;
IOCLR=SCK;
//0
IOSET=SCK;
IOCLR=SCK;
}
//该函数用于发送一个字节(1,1,1,1,1,RW=0,RS=1,0)
//五个1用于串行同步,,RW=0,RS=1是写显示数据的控制信号
void tongbu01(void)
{ IOCLR=SCK;
//5个1
IOSET=MOSI;
IOSET=SCK;
IOCLR=SCK;
IOSET=SCK;
IOCLR=SCK;
IOSET=SCK;
IOCLR=SCK;
IOSET=SCK;
IOCLR=SCK;
IOSET=SCK;
IOCLR=SCK; //时钟清零
IOCLR=MOSI; //传RW位0
IOSET=SCK;
IOCLR=SCK;
IOSET=MOSI; //传RS位1
IOSET=SCK;
IOCLR=SCK;
IOCLR=MOSI;
IOSET=SCK; //0
IOCLR=SCK;
}
//该函数用于发送四个连续的0
void send_4zero(void)
{ IOCLR=MOSI; //发送4个零
IOSET=SCK;
IOCLR=SCK;
IOSET=SCK;
IOCLR=SCK;
IOSET=SCK;
IOCLR=SCK;
IOSET=SCK;
IOCLR=SCK; //时钟清零
}
//该函数用于向LCM12832发送一个字节的数据
void SendData(uint8 a)
{ uint8 i,b;
b=a;
IOCLR=SSEL;
IOSET=SSEL;
tongbu00();
for(i=0;i<4;i++) //发送高4位
{ if((a&0x80)==0)
{ IOCLR=MOSI;
IOSET=SCK;
}
else
{IOSET=MOSI;
IOSET=SCK;
}
IOCLR=SCK; //时钟清零
a=a<<1;
}
send_4zero();
for(i=0;i<4;i++) //发送低4位
{ if((b&0x08)==0)
{ IOCLR=MOSI;
IOSET=SCK;
}
else
{IOSET=MOSI;
IOSET=SCK;
}
IOCLR=SCK; //时钟清零
b=b<<1;
}
send_4zero();
IOCLR=SSEL;
DelayNS(50);
}
//该函数用于向LCM12832发送两个字节的数据
void SHOWSend(uint16 a)
{ uint8 i;
uint16 b,c,d;
b=c=d=a;
IOCLR=SSEL;
IOSET=SSEL;
tongbu01();
for(i=0;i<4;i++) //发送第1个字节的高4位
{ if((a&0x8000)==0)
{ IOCLR=MOSI;
IOSET=SCK;
}
else
{ IOSET=MOSI;
IOSET=SCK;
}
IOCLR=SCK; //时钟清零
a=a<<1;
}
send_4zero();
for(i=0;i<4;i++) //发送第1个字节的低4位
{ if((b&0x0800)==0)
{ IOCLR=MOSI;
IOSET=SCK;
}
else
{ IOSET=MOSI;
IOSET=SCK;
}
IOCLR=SCK; //时钟清零
b=b<<1;
}
send_4zero();
IOCLR=SSEL;
DelayNS(50);
IOSET=SSEL;
tongbu01();
for(i=0;i<4;i++) //发送第2个字节的高4位
{ if((c&0x0080)==0)
{ IOCLR=MOSI;
IOSET=SCK;
}
else
{ IOSET=MOSI;
IOSET=SCK;
}
IOCLR=SCK; //时钟清零
c=c<<1;
}
send_4zero();
for(i=0;i<4;i++) //发送第2个字节的低4位
{ if((d&0x0008)==0)
{ IOCLR=MOSI;
IOSET=SCK;
}
else
{ IOSET=MOSI;
IOSET=SCK;
}
IOCLR=SCK; //时钟清零
d=d<<1;
}
send_4zero();
IOCLR=SSEL;
DelayNS(50);
}
/*lcm初始化*/
void LCMInitial(void)
{ DelayNS(50);
SendData(0x30);
DelayNS(50);
SendData(0x30);
DelayNS(50);
SendData(0x0C);
DelayNS(50);
SendData(0x01);
DelayNS(50);
SendData(0x06);
}
int main(void)
{ PINSEL0=0x00000000; //通用口
IODIR=OUT; //SSEL口设置为输出,当其为低电平时LCM12832才能接受数据
IOCLR=SCK;
IOCLR=SSEL;
LCMInitial(); //初试化LCM显示频
SendData(0x83); //DDROM地址83H
SHOWSend(0xCED2); //显示汉字"我"
return (0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -