我是个菜鸟,今天刚入手arduino2560,求教怎么驱动12864

我是个菜鸟,今天刚入手arduino2560,求教怎么驱动12864,第1张

能成功驱动12684,跟下载的是那年的12864库文件、12864是否有小驱动板 是6个引脚的通信还是原始的好多引脚有关, 库文件与你的12864要对应上

总之是找对应的库,另外,如果不是很懂,建议从 uno入手

在使用Wire.h函式库时,如看IC规格书时,装置位址格式中的最後的一个 bit(读/写位元) 我们必须忽略它(因为在使用Wire.h库函式时这个读/写位元的值它会自动帮你填上,虽然我们在写sketch代码时看不到)

所以-我们要将 读/写位元 忽略它拿掉(楼主用的方式是将整个位址右移,或是直接用人脑除以2後答案填上 都行)後 一定会变成7个bit的装置位址,也符合I2C装置位址规范(0~127)

/////////////////////////////////////////////////////////////////////////////////

//基于arduino 平台的KS0180芯片128*64并口显示LCD测试程序by 王瑾 2014/9/27

//程序较大使用小RAM芯片可能无法运行,如无法运行可将调用logo部分删除,会大幅减小RAM使用

//因为uno 坏了只在mega 2560测试成功

//和ST7920芯片主要是RAM地址的分布不同注意分析RAM地址写程序

//程序没有采用库文件,显示程序也没有另写子程序,主要是为了个人修改方便

//////////////////////////////////////////////////////////////////////////////

//

int CS1=A0//左半屏,高电平有效

int CS2=A1//右半屏,高电平有效

int RS = 12

int RW = 11

int DB[] = {3, 4, 5, 6, 7, 8, 9, 10}//使用数组来定义总线需要的管脚DB 0-7

int Enable = 2

/////////////////////////////////////////////////////////////////////////

// Bitmap点阵数据表//

// 内容为:南京舟芯电子,TEL025-66085988 //

// 图片尺寸: 128 * 64 //

/////////////////////////////////////////////////////////////////////////

unsigned char logo1[] =

{

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

}

////////////////////////////////////////////////////////

//写命令子程序

///////////////////////////////////////////////////////

void LcdCommandWrite(int value) {

digitalWrite(RS, 0)

digitalWrite(RW, 0)

int i = 0

for (i=3i <= 10i++) //总线赋值

{

digitalWrite(i,value &01)//value与0001相与赋予i

value >>= 1//value右移一位

}

digitalWrite(Enable,1)

delayMicroseconds(1)

digitalWrite(Enable,LOW)

delayMicroseconds(1)

}

//////////////////////////////////////////////////////

//写数据子程序

/////////////////////////////////////////////////////

void LcdDataWrite(int value) {

// 定义所有引脚

int i = 0

digitalWrite(RS, 1)

digitalWrite(RW, 0)

//digitalWrite(DI, HIGH)

//digitalWrite(RW, LOW)

for (i=DB[0]i <= DB[7]i++) {

digitalWrite(i,value &01)

value >>= 1

}

digitalWrite(Enable,HIGH)

delayMicroseconds(1)

digitalWrite(Enable,LOW)

delayMicroseconds(1) // 延时百万分之一秒

}

///////////////////////////////////////////////////

//输出引脚声明

//////////////////////////////////////////////////

void setup (void) {

int i = 0

for (i=Enablei <= 12i++) {

pinMode(i,OUTPUT)

}

pinMode(A0,OUTPUT)

pinMode(A1,OUTPUT)

}

////////////////////////////////////////////

//循环主程序

/////////////////////////////////////////////////

void loop (void) {

///////////////////////////////////////////////////////////////////////////////////////////

//初始化,因为KS0108芯片无初始化命令需要对整个屏幕赋值0x00, 不然的话会有杂点

//没有查到KS0108芯片的始化命令,位图调用一直有杂点,采用REST复位也不能解决,所以采用此方法

//////////////////////////////////////////////////////////////////////////////////////////

digitalWrite(CS1,1)

digitalWrite(CS2,1)

LcdCommandWrite(0x3e) // 显示关

int i = 0

int yg,x,y

int temp

int tmp

for(yg=0yg<8yg++)

{

x=yg+0xb8 //0xb8为首页地址

y=0x40 //0x40为首列地址注意分析规格书RAM地址分布图

LcdCommandWrite(x) //写入y轴坐标

LcdCommandWrite(y) //写入x轴坐标

tmp=yg*64

for(i=0i<64i++)

{

LcdDataWrite(0x00)

tmp++

}

}

LcdCommandWrite(0x3f) //显示图象

delay(1)

//////////////////////////////////////////////////////////

//显示ZXET logo

///////////////////////////////////////////////////////////

digitalWrite(CS1,1) //先显示左半屏

digitalWrite(CS2,0)

for(yg=0yg<8yg++)

{

x=yg+0xb8

y=0x40

LcdCommandWrite(x) //写入y轴坐标

LcdCommandWrite(y) //写入x轴坐标

tmp=2*yg*64

for(i=0i<64i++)

{

LcdDataWrite(logo[tmp])

tmp++

}

}

LcdCommandWrite(0x3f) //此处无需延迟直接接右半屏显示程序

////////////////////////

digitalWrite(CS1,0)//显示右半屏

digitalWrite(CS2,1)

for(yg=0yg<8yg++)

{

x=yg+0xb8

y=0x40

LcdCommandWrite(x) //写入y轴坐标

LcdCommandWrite(y) //写入x轴坐标

tmp=(2*yg+1)*64

for(i=0i<64i++)

{

LcdDataWrite(logo[tmp])

tmp++

}

}

LcdCommandWrite(0x3f)

delay(3000)

///////////////////////////////////////////////////////////////

//显示 文字,依然采用位图数据调用,KS0108无字库只能采用这种办法

///////////////////////////////////////////////////////////////

digitalWrite(CS1,1)

digitalWrite(CS2,0)

for(yg=0yg<8yg++)

{

x=yg+0xb8

y=0x40

LcdCommandWrite(x) //写入y轴坐标

LcdCommandWrite(y) //写入x轴坐标

tmp=2*yg*64

for(i=0i<64i++)

{

LcdDataWrite(logo1[tmp])

tmp++

}

}

LcdCommandWrite(0x3f)

//////////////////////////////////////

digitalWrite(CS1,0)

digitalWrite(CS2,1)

for(yg=0yg<8yg++)

{

x=yg+0xb8

y=0x40

LcdCommandWrite(x) //写入y轴坐标

LcdCommandWrite(y) //写入x轴坐标

tmp=(2*yg+1)*64

for(i=0i<64i++)

{

LcdDataWrite(logo1[tmp])

tmp++

}

}

LcdCommandWrite(0x3f)

delay(3000)

///////////////////////////////////////////////////////

//测试画面 :全黑

////////////////////////////////////////////////////////

digitalWrite(CS1,1)

digitalWrite(CS2,1)

for(yg=0yg<8yg++)

{

x=yg+0xb8

y=0x40

LcdCommandWrite(x) //写入y轴坐标

LcdCommandWrite(y) //写入x轴坐标

for(i=0i<64i++)

{

LcdDataWrite(0xFF)

}

}

LcdCommandWrite(0x3f)

delay(3000)

///////////////////////////////////////////////////////

//测试画面 :全白

////////////////////////////////////////////////////////

digitalWrite(CS1,1)

digitalWrite(CS2,1)

for(yg=0yg<8yg++)

{

x=yg+0xb8

y=0x40

LcdCommandWrite(x) //写入y轴坐标

LcdCommandWrite(y) //写入x轴坐标

for(i=0i<64i++)

{

LcdDataWrite(0x00)

}

}

LcdCommandWrite(0x3f)

delay(3000)

///////////////////////////////////////////////////////

//测试画面 :数条纹

////////////////////////////////////////////////////////

digitalWrite(CS1,1)

digitalWrite(CS2,1)

for(yg=0yg<8yg++)

{

x=yg+0xb8

for(i=0i<32i++)

{

y=0x40+2*i

LcdCommandWrite(x) //写入y轴坐标

LcdCommandWrite(y) //写入x轴坐标

LcdDataWrite(0xFF)

}

}

LcdCommandWrite(0x3f)

delay(3000)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8109648.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存