主题 : 玩转NanoPi2裸机编程——03-点亮12864液晶屏 复制链接 | 浏览器收藏 | 打印
级别: 论坛版主
UID: 103400
精华: 0
发帖: 434
金钱: 2235 两
威望: 447 点
贡献值: 0 点
综合积分: 868 分
注册时间: 2014-04-24
最后登录: 2016-10-10
楼主  发表于: 2015-12-16 10:59

 玩转NanoPi2裸机编程——03-点亮12864液晶屏

以下内容转自 http://weibo.com/p/1001603917156952728534?feed_filter=1#_0

像玩51单片机一样玩NanoPi2——点亮12864液晶屏
                                                                                                                                                                                                                                                                                                                                


/*像玩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);

}

}