以下内容转自 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); } }
|