TA的每日心情 | 慵懒 2016-10-17 12:07 |
---|
签到天数: 306 天 连续签到: 1 天 [LV.8]以坛为家I
|
如上图,所示,基本是LinkIt ONE 的所有功能。开发板在手里,前段时间,一直在忙别的事情,学习了好久,并没有给大家分享,这里深表歉意。
以后的时间里,针对 LinkIt ONE上述的功能和函数,与大家分享,来学习这个 兼容 arduino 的开发板--LinkIt ONE,一起来学它的功能,探索它在IoT 上的基本功能。
这一篇文章,我们来使用SPI 总线可控制OLED(128x64)。
同步外设接口(SPI)是由摩托罗拉公司开发的全双工同步串行总线,该总线大量用在与EEPROM、ADC、FRAM和显示驱动器之类的慢速外设器件通信。
SPI总线是一种 三线 总线协议,通过三条线实现全双工的通信。
(1)MOSI:主器件数据输出,从器件数据输入
(2)MISO:主器件数据输入,从器件数据输出
(3)SCLK :时钟信号,由主器件产生
(4)/SS:从器件使能信号,由主器件控制
SPI(Serial Peripheral Interface)是一种串行同步通讯协议,由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而完成数据的交换。SPI 接口由SDI(串行数据输入),SDO(串行数据输出),SCK(串行移位时钟),CS(从使能信号)四种信号构成,CS 决定了唯一的与主设备通信的从设备,如没有CS 信号,则只能存在一个从设备,主设备通过产生移位时钟来发起通讯。通讯时,数据由SDO 输出,SDI 输入,数据在时钟的上升或下降沿由SDO 输出,在紧接着的下降或上升沿由SDI 读入,这样经过8/16 次时钟的改变,完成8/16 位数据的传输。
本文中使用的是 OLED 12864 主控采用的是SSD1306 用SPI进行通信:
OLED 发光二极管,有很多优点,省点、清晰、等等、现在智能手环的显示上用的比较多。
Linkit ONE 和 OLED连接之后,使用D6 和 D7 控制 OLED_DC 和 OLED_RST
#define OLED_DC 6#define OLED_RST 7#define OLED_DC_L digitalWrite(OLED_DC, LOW)#define OLED_DC_H digitalWrite(OLED_DC, HIGH)#define OLED_RST_L digitalWrite(OLED_RST, LOW)#define OLED_RST_H digitalWrite(OLED_RST, HIGH)绘制字符串函数如下:
void OLED_6x8Str(unsigned char x, unsigned char y, unsigned char ch[])OLED的控制函数如下:
void OLED_WB(uint8_t data);void LCD_WrDat(unsigned char dat);void LCD_WrCmd(unsigned char cmd);void LCD_DLY_ms(unsigned int ms);void LCD_Fill(unsigned char bmp_dat);void OLED_SetPos(unsigned char x, unsigned char y);void LCD_CLS(void);void OLED_6x8Str(unsigned char x, unsigned char y, unsigned char ch[]);void LCD_Init(void);SPI 的简单操作如下:
#include <SPI.h>#define SS_PIN 10void setup(){ pinMode(SS_PIN, OUTPUT); SPI.begin(); }void loop(){ byte ret_val; digitalWrite(SS_PIN, LOW); ret_val = SPI.transfer(100); digitalWrite(SS_PIN, HIGH); delay(1000);}LinkIt ONE 上的 SPI 设置为了 Master(主机模式),试用 SPI.begin(); 启动SPI。。。使用 get= SPI.transfer(data); 进行数据的交换传输。LinkIt ONE 控制 OLED 的代码如下,下载到 LinkIt ONE 中即可以看到如下效果:
#include <SPI.h>const unsigned char F6x8[][6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 00x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 10x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 20x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 30x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 40x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 50x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 60x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 70x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 80x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 90x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 550x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines};#define OLED_DC 6#define OLED_RST 7#define OLED_DC_L digitalWrite(OLED_DC, LOW)#define OLED_DC_H digitalWrite(OLED_DC, HIGH)#define OLED_RST_L digitalWrite(OLED_RST, LOW)#define OLED_RST_H digitalWrite(OLED_RST, HIGH)void OLED_WB(uint8_t data){ SPI.transfer(data);}/*******************????????***********************/void LCD_WrDat(unsigned char dat){ OLED_DC_H; OLED_WB(dat);}/********************??????**********************/void LCD_WrCmd(unsigned char cmd){ OLED_DC_L; OLED_WB(cmd);}/**********************?????**********************/void LCD_Fill(unsigned char bmp_dat){ unsigned char y,x; LCD_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02) LCD_WrCmd(0x00);// LCD_WrCmd(0x21);//-Set Column Address LCD_WrCmd(0x00); LCD_WrCmd(0x7f); LCD_WrCmd(0x22);//-Set Page Address LCD_WrCmd(0x00); LCD_WrCmd(0x07); delayMicroseconds(1); for(y=0;y<8;y++) { for(x=0;x<128;x++) { LCD_WrDat(bmp_dat); } }}void OLED_SetPos(unsigned char x, unsigned char y)//???????{ LCD_WrCmd(0xb0 + y); LCD_WrCmd(((x&0xf0)>>4)|0x10); LCD_WrCmd((x&0x0f)|0x01);}void LCD_CLS(void)//??{ LCD_Fill(0x00);}void OLED_6x8Str(unsigned char x, unsigned char y, unsigned char ch[]){ unsigned char c=0,i=0,j=0; while (ch[j]!='\0') { c = ch[j]-32; if(x>126) { x=0;y++; } OLED_SetPos(x,y); for(i=0;i<6;i++) { LCD_WrDat(F6x8[c]); } x+=6; j++; }}/*********************12864???***********************/void LCD_Init(void){ OLED_RST_L; delayMicroseconds(50); OLED_RST_H; LCD_WrCmd(0xae);//--turn off oled panel LCD_WrCmd(0xa8);//--set multiplex ratio(1 to 64) LCD_WrCmd(0x3f);//--1/64 duty LCD_WrCmd(0xd3);//-set display offset Shift Mapping RAM Counter (0x00~0x3F) LCD_WrCmd(0x00);//-not offset LCD_WrCmd(0x40);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F) LCD_WrCmd(0xa0);//--Set SEG/Column Mapping 0xa0???? 0xa1?? LCD_WrCmd(0xc0);//Set COM/Row Scan Direction 0xc0???? 0xc8?? LCD_WrCmd(0xda);//--set com pins hardware configuration LCD_WrCmd(0x12); LCD_WrCmd(0x81);//--set contrast control register LCD_WrCmd(0xcf); // Set SEG Output Current Brightness LCD_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5) LCD_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7) LCD_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency LCD_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec LCD_WrCmd(0x8d);//--set Charge Pump enable/disable LCD_WrCmd(0x14);//--set(0x10) disable LCD_WrCmd(0xaf);//--turn on oled panel LCD_WrCmd(0xd9);//--set pre-charge period LCD_WrCmd(0xf8);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock LCD_WrCmd(0xdb);//--set vcomh LCD_WrCmd(0x40);//Set VCOM Deselect Level LCD_Fill(0x00); }unsigned char dis1[] = "hello";unsigned char dis2[] = "I am LinkIt ONE";unsigned char dis3[] = "eeboard";void setup() { pinMode(OLED_DC,OUTPUT); pinMode(OLED_RST,OUTPUT); SPI.begin(); SPI.setBitOrder(MSBFIRST); LCD_Init(); delayMicroseconds(10); LCD_Fill(0xff); LCD_Fill(0xff); LCD_Fill(0x00); OLED_6x8Str(0, 0, dis1); OLED_6x8Str(0, 3, dis2); OLED_6x8Str(80, 7, dis3); }void loop() {} |
|