以下内容转自 http://weibo.com/p/1001603917156952728534?feed_filter=1#_0
像玩51
单片机一样玩NanoPi2——点亮12864液晶屏
2015年12月6日 20:54 阅读 62
/*像玩51单片机一样玩NanoPi2
12864液晶屏显示
----by DikaVimenkey
功能:用NanoPi2来控制12864显示字母数字
12864的串行读写时序可以从百度文库中查找
本例程只是GPIO输出的使用
*/
#include"gpio.h"
/*
*片选信号RS CS = GPIOB28
*复位信号RST 低电平有效 RST = GPIOB27
*并行、串行选择信号PSB H并行 L串行 CH =GPIOB31
*时钟信号E SCLK = GPIOB30
*数据信号R/W SID =GPIOB29
*/
void delay(unsignedint t)
{
while(t--);
}
/*发送字节函数*/
voidsendbyte(unsigned char zdata)
{
unsignedint i;
for(i=0;i<8; i++)
{
if((zdata<< i) & 0x80)
{
//SID= 1;
GPIOBOUT|= (1<<29);
}
else
{
//SID= 0;
GPIOBOUT&= ~(1<<29);
}
//SCLK= 0;
//SCLK= 1;
GPIOBOUT&= ~(1<<30);
GPIOBOUT|= (1<<30);
}
}
/*写命令函数*/
voidwrite_com(unsigned char cmdcode)
{
//CS= 1;
GPIOBOUT|= (1<<28);
sendbyte(0xf8);
sendbyte(cmdcode& 0xf0);
sendbyte((cmdcode<< 4) & 0xf0);
delay(2000);
}
/*写数据函数*/
voidwrite_data(unsigned char Dispdata)
{
//CS= 1;
GPIOBOUT|= (1<<28);
sendbyte(0xfa);
sendbyte(Dispdata& 0xf0);
sendbyte((Dispdata<< 4) & 0xf0);
delay(20000);
}
/*LCD初始化*/
void lcdinit()
{
//RST= 0;
GPIOBOUT&= ~(1<<27);
delay(10000);
//RST= 1;
GPIOBOUT|= (1<<27);
delay(20000);
write_com(0x30);
delay(5000);
write_com(0x0c);
delay(5000);
}
void hzkdis(unsignedchar *s)
{
while(*s> 0)
{
write_data(*s);
s++;
delay(500);
}
}
void Test()
{
write_com(0x03);
delay(500);
write_com(0x81);
hzkdis(" HOT-51");
write_com(0x91);
hzkdis("NanoPi2");
write_com(0x89);
hzkdis("............");
write_com(0x98);
hzkdis("DikaVimenkey");
}
/*
*片选信号RS CS = GPIOB28
*复位信号RST 低电平有效 RST = GPIOB27
*并行、串行选择信号PSB H并行 L串行 CH =GPIOB31
*时钟信号E SCLK = GPIOB30
*数据信号R/W SID =GPIOB29
*/
void GPIOinit(void)
{
GPIOBALTFN1&=~((0X3<<22)|(0X3<<24)|(0X3<<26)|(0X3<<28)|(0X3<<30));
GPIOBALTFN1|= ((1<<22)|(1<<24)|(1<<26)|(1<<28)|(1<<30));
GPIOBOUTENB|= ((1<<27)|(1<<28)|(1<<29)|(1<<30)|(1<<31));;
}
void main()
{
/*GPIO初始化*/
GPIOinit();
//CH= 0;
GPIOBOUT&= ~(1<<31);
delay(10);
lcdinit();
delay(100);
while(1)
{
Test();
delay(50000);
}
}