ssd1322用于维信诺25664单色屏的初始化代码
DELL服务器LCD信息代码

DELL服务器LCD信息代码DELL服务器LCD信息代码的意思:————————————————————————————————————E1114Temp Ambient系统周围环境温度超出允许范围。
————————————————————————————————————E1116Temp Memory内存已超过允许温度,系统已将其禁用以防止损坏组件。
————————————————————————————————————E1210CMOS Batt缺少CMOS 电池,或电压超出允许范围。
————————————————————————————————————E1211ROMB BattRAID 电池丢失、损坏或因温度问题而无法再充电。
————————————————————————————————————E12nnXX PwrGd指定的稳压器出现故障。
————————————————————————————————————E1229CPU # VCORE处理器# VCORE 稳压器出现故障。
————————————————————————————————————E122B0.9V Over Voltage0.9 V 稳压器电压已超过电压允许范围————————————————————————————————————E122CCPU Power Fault启动处理器稳压器之后,检测到稳压器故障————————————————————————————————————E1310RPM Fan ##指定的冷却风扇的RPM 超出允许的运行范围。
————————————————————————————————————E1410CPU # IERR指定的微处理器正在报告系统错误。
————————————————————————————————————E1414CPU # Thermtrip指定的微处理器超出了允许的温度范围并已停止运行。
1602指令大全

1602指令大全共11条指令:1.清屏指令功能:<1> 清除液晶显示器,即将DDRAM的内容全部填入"空白"的ASCII码20H;<2> 光标归位,即将光标撤回液晶显示屏的左上方;<3> 将地址计数器(AC)的值设为0。
2.光标归位指令功能:<1> 把光标撤回到显示器的左上方;<2> 把地址计数器(AC)的值设置为0;<3> 保持DDRAM的内容不变。
3.进入模式设置指令功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。
参数设定的情况如下所示:位名设置I/D 0=写入新数据后光标左移 1=写入新数据后光标右移S 0=写入新数据后显示屏不移动1=写入新数据后显示屏整体右移1个字符4.显示开关控制指令功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。
参数设定的情况如下:位名设置D 0=显示功能关1=显示功能开C 0=无光标1=有光标B 0=光标闪烁1=光标不闪烁5.设定显示屏或光标移动方向指令功能:使光标移位或使整个显示屏幕移位。
参数设定的情况如下:S/C R/L 设定情况0 0 光标左移1格,且AC值减10 1 光标右移1格,且AC值加11 0 显示器上字符全部左移一格,但光标不动1 1 显示器上字符全部右移一格,但光标不动6.功能设定指令功能:设定数据总线位数、显示的行数及字型。
参数设定的情况如下:位名设置DL 0=数据总线为4位 1=数据总线为8位N 0=显示1行 1=显示2行F 0=5×7点阵/每字符1=5×10点阵/每字符7.设定CGRAM地址指令功能:设定下一个要存入数据的CGRAM的地址。
8.设定DDRAM地址指令功能:设定下一个要存入数据的CGRAM的地址。
9.读取忙信号或AC地址指令功能:<1> 读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令; 当BF=0时,液晶显示器可以接收单片机送来的数据或指令;<2> 读取地址计数器(AC)的内容。
维信诺25664oled屏应用笔记

维信诺25664oled屏应用笔记屏的初始化可以参考<维信诺25664IC_Init.c>,特别注意初始化程序在使用Set Re-map & Dual COM Line Mode (A0h)命令时,后跟(0x14)(0x11)设置对应的是屏正视图放置时左上方为起始行和起始列,半字节倒序。
下图所示为GDDRAM布局图,从图中可知,该屏的行(com)布线是反向的,即以厂家给出的(0x14)设置驱动时从屏正视图看去,行COM0在最上方,SEG3~0在最左方,屏幕以水平地址增量模式写入横向取模,字节正序的汉字字模时,字体相对屏正视图正向显示,且行和列的地址指针也相对正向增加;反之以(0x06)设置时行COM0在屏正视图最下方,SEG3~0在屏正视图最右方,如与(0x14)设置时一样以相同的方式取相同的字模,字体相对屏正视图反向显示,且行和列的地址指针也反向增加。
(以数据线和驱动芯片朝下为正视图方向)从上面这段阐述可以得到一个经验,即如何在datasheet中没有明确表述时确定显示屏行和列的分布方式呢?其实一般从厂商给出的初始化代码中对驱动芯片的设置就能看出来了。
从上图中可知,每个行地址(COM)对应一行,每个列地址(Column address)对应四个像素列(SEG),写入时先用set column address确定起始列和终止列,再用set row address确定起始行和终止行。
由于驱动芯片的分辨率大于屏分辨率,所以从厂商初始代码可知,屏的实际行地址范围和列地址范围分别为(0x00,0x3F)、(0x1C,0x5B),转换为十进制数即分别为(0~63)、(28~91)。
同ssd1305一样,上述两条命令在给出写入地址的同时,也将相应的行指针和列指针调整到给出的起始地址位置。
在写入时,当地址设置好后,就可对相应区域写入数据了,每字节数据的高半和低半四位二进制数分别对应一个像素点,每个像素点可通过此四位二进制数实现十六级灰度,根据上述每个列地址对应四个像素列,每个像素需要四位二进制数来点亮,那么,也就是说,每写入两个字节的数据,列地址指针自动加一。
stm32oled初始化代码

stm32oled初始化代码以下是STM32OLED屏幕初始化代码的示例(假设使用I2C通信):```c#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>#define OLED_RESET 4#define SCREEN_WIDTH 128#define SCREEN_HEIGHT 64Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);void setup() {Wire.begin();display.begin(SSD1306_SWITCHCAPVCC, 0x3C);display.clearDisplay();display.setTextColor(WHITE);display.setCursor(0,0);display.setTextSize(2);display.println("Hello World!");display.display();}void loop() {// Do nothing in the loop}```该代码使用Adafruit_GFX和Adafruit_SSD1306库来与屏幕通信。
我们将Wire对象传递给Adafruit_SSD1306的构造函数,以在I2C通信中传输数据。
在设置函数中,我们使用begin()函数初始化屏幕,并使用SSD1306_SWITCHCAPVCC来设置其工作电压。
接下来,我们清除屏幕并将光标移动到左上角,在打印“Hello World!”时使用setTextColor()和setTextSize()设置文本属性。
最后,我们使用display()函数来显示整个缓冲区中的内容。
在主循环中,我们没有做任何事情,因为显示内容已经显示,并且不需要刷新或更新。
51单片机12232液晶显示

} i_data=command_data; i_data&=0xf0; for(i=0;i<8;i++)
{ SID=(bit)(i_data&0x80); SCLK=0; SCLK=1; i_data=i_data<<1;
send_data(disps[a]); } } /******************************************************* 函数名称:void display_x() 函数功能:在 LCD 第二行写入数据 *******************************************************/ void display_x() { uchar a; send_command(0x92);//第二行写入数据 for(a=0;a<11;a++) {
void delay_1ms(uint x) {
uint i,j; for(j=0;j<x;j++)
for(i=0;i<110;i++); } /*********************************************** 函数名称:void send_command(uchar command_data) 函数功能:写指令,分两次写,先写高 4 位,后写低 4 位。 ************************************************/ void send_command(uchar command_data) {
OLED SSD1322 A0指令学习总结

A0指令学习总结
SSD1322控制器内部的存储器映射为上图所示,控制器的列控制线控制四列点阵,当开启灰度显示功能时,每个点阵由4个bit控制,所以每次向某一行的其中一列写入数据时,要写两个字节的数据(四个四位)。
A0指令设置Re-map和Dual COM linemode假设0x1b是设置的起始列地址。
A[0]=0,先水平写,再换行;=1先垂直写,再换列
A[1]=0,列地址正常映射,A[2]=0,每一列内的四列点阵正常映射
在屏幕的左侧显示,对应屏幕的最左端四列点阵顺序A[1]=1,列地址反映射(Re-map),A[2]=1,每一列内的四列点阵反映射
在屏幕的右侧显示,对应屏幕的最右侧的四列点阵顺序A[1]=1,A[2]=0
同1描述
A[1]=0,A[2]=1
同2描述
假如向起始列写入两字节数据先写0xff,再写0x0f。
数据会先被写入SEG的高位,数据的高位对应SEG的高位。
A[1]=0,A[2]=0时
屏幕左边
A[1]=0,A[2]=1时
屏幕左边
A[1]=1,A[2]=0时
屏幕右边
A[1]=1,A[2]=1时
屏幕右边
A[1]的设置可以完成屏幕的Y轴翻转。
A[4]=0:COM0对应RAM区的0行
A[4]=1:COM0对应RAM区的127行
我使用的OLED模块经过试验,把行起始地址设为0,结束地址设为63,当A[4]=1从屏幕上方显示,当A[4]=0时,从屏幕下方开始显示。
A[4]的设置完成屏幕的X轴翻转。
A[5]=0,与B[4]=1,设置OLED工作在Dual COM Line状态。
162初始化方式

162初始化方式:先取出碳粉瓶;以“效用-停止-0-0-停止-0-1”进入维修模式(面板显示SERVICE MODE);用光标选到“FUNCTION”,按YES进去找“ATDC AUTO ADJUST”(自动墨粉浓度校正),按YES,机器会运行3到5分钟,等停止后复位即可不过现在你已经出了COF32代码,做浓度校正没意义,进入维修模式后,找第二项ADJUST按YES进去,找“ATDC GAIN”,按YES进去看当前数值是多少?在原值上上调10到20,不要太多,以免印品底灰;按YES保存;然后复位并关机,按住停止键开机,直到预热完成;等确定不再报代码后,才能再把碳粉瓶装进机器你是要单换鼓芯吗?要是单换鼓芯就需要把股组件的上下两部分分开,然后从侧面把销子(销鼓芯)拆掉,就能把鼓芯拿下来了,然后换上就OK了,上下分开拆开需要拆5颗螺丝,就是鼓组件的四个角,每个角的螺丝拆掉;要是直接换整套就没那么麻烦了!希望我的回答对您有帮助阁下:关于载体泄漏的问题,有几个可能:一是间隙轮磨损;一是搅拌辊轴套磨损,请维修人员仔细检查这些位置已经更换载体,这样进行载体初始化:以“效用-停止-0-0-停止-0-1"进入维修模式;直接按5或用光标键找第五项“FUNCTION“,按YES进去找“ATDC AUTO ADJUST”;按YES,这时机器开始运作,此时不要进行任何操作(包括开前门,开侧门;按键)稍等3到5分钟,待机器自动停机后,看显示面板上会有个数值,一般是143到151,这个是机器通过自动校正得出的自动墨粉浓度值;完成后按复位,回到机器待机状态,即可正常复印:那个胶片掉了,当然会漏载体……复印太浓,则需要把ATDC值调低几个值;只要不出代码即可;然后使用一段时间后,浓度才能降下来:按效用键进入机器设置菜单,找User Settings里面找Language里面去改机器语言;(搞不清楚的话,建议找专业人员帮你调):我说的那个浓度值,仅是新机器时的常规数值,不心太在意,前提是机器复印质量过得去,不报错误;:124是有点低,但只要印品质量过得去,就不必理会;:使用中如果出现C0F32代码,以同样的方式进入维修模式,找第二项进去找ATDC那项,把里面的值124往上加一点,不过最大不要超过160,否则会有严重底灰(除非载体已严重老化)。
1602液晶显示器初始化函数

1602液晶显示器初始化函数
初始化 1602 液晶显示器的函数通常会根据使用的微控制器和编程语言而有所不同。
以下是一个用 C 语言编写的初始化 1602 液晶显示器的示例函数:
```c
void lcd_1602_init(void) {
// 设置数据位为 8 位,显示两行,5x7 点阵字体
lcd_write_command(0x38);
// 设置显示模式,整体显示,不反光,开游标,不闪烁
lcd_write_command(0x0c);
// 设置输入模式,增量模式,不自动移位
lcd_write_command(0x06);
// 清屏
lcd_write_command(0x01);
// 显示回归原点
lcd_write_command(0x02);
}
```
这个函数使用了 `lcd_write_command()` 函数来向液晶显示器发送命令。
这些命令设置了液晶显示器的工作模式、显示格式和清除屏幕等。
请注意,这个示例函数只是一个基本的初始化函数,实际应用中可能需要根据具体的硬件和需求进行调整。
此外,还需要根据液晶显示器的数据手册来确定正确的命令和时序。
HGS256641 OLED屏C51程序源程序

void change (uchar dat);
void Fill_RAM(unsigned char Data) ;
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
0x1f,0x02,0x04,0x02,0x01,0x11,0x0e,0x00,// 3 代码"13"
0x0e,0x11,0x11,0x0e,0x11,0x11,0x0e,0x00,// 8 代码"18"
0x04,0x0c,0x04,0x04,0x04,0x04,0x0e,0x00,//1 代码"11"
/*-- Times New Roman12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,
/*-- 文字: 6 --*/
0x10,0x08,0x04,0x00,0x00,0x00,0x00,0x00,// ` 代码"40"
0x00,0x00,0x0e,0x01,0x0f,0x11,0x0f,0x00,// a 代码"41"
0x10,0x10,0x16,0x19,0x11,0x11,0x1e,0x00,// b 代码"42"
/*-- Times New Roman12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x11,0x19,0x19,0x15,0x13,0x13,0x11,0x00,// N 代码"2E"
1602液晶使用方法

1602液晶使用方法
当有指令要写进去的时候,必须得考虑时序的问题。
直接写是写不进去的。
驱动液晶要先将液晶进行初始化,即设置工作状态,主要设置以下几个方面1,清屏
2 显示模式设置
3 显示开/关设置
4 光标设置
5 数据指针设置
注意:在每一项设置后都必须加上一条写指令,才能使设置起作用
例:
MAIN:
MOV P0,#01H ;清屏
LCALL XZL ;调用写指令
MOV P0,#38H ;显示模式设置
LCALL XZL ;调用写指令
MOV P0,#0FH ;显示光标开/关设置
LCALL XZL ;调用写指令
MOV P0,#06H ;光标设置
LCALL XZL ;调用写指令
MOV P0,#80H ;数据指针设置
LCALL XZL ;调用写指令
LJMP MAIN
XZL:
CLR RS
CLR RW
CLR E
NOP
SETB E
RET
初始化设置的指令说明:
3
4。
OLED驱动ICssd1305初始化代码

OLED驱动ICssd1305初始化代码extern unsigned char daoxian;extern void delay(long v);#define CS_0 P2OUT &=~BIT0#define CS_1 P2OUT |= BIT0#define DC_0 P2OUT &=~BIT2#define DC_1 P2OUT |= BIT2#define WR_0 P4OUT &=~BIT0#define WR_1 P4OUT |= BIT0#define RDE_1 P4OUT |= BIT1#define RDE_0 P4OUT &=~BIT1#define XDATA P3OUT/* ************************* */// 函数名称: wcode// 函数功能: 显示器写指令// 入口变量:// 出口变量:// 修改记录://***********************// 写指令// 模式:bs1=1,bs2=1,硬件直接配置// 选8080模式// 先片选:CS, :P2.0=0// D-C=1 :P2.2=0// W-R=0 :P4.0=0// 数据 :P3口/* ************************* */void wcode(unsigned char c) // 写指令{CS_0;DC_0;RDE_1;WR_0;delay(3);XDATA=c;delay(10);WR_1;delay(3);CS_1;}/* ************************* */// 函数名称: wdata// 函数功能: 显示器写数据// 入口变量:// 出口变量:// 修改记录://***********************// 写数据// 模式:bs1=1,bs2=1,硬件直接配置// 选8080模式// 先片选:CS, :P2.0=0// D-C=1 :P2.2=1// W-R=0 :P4.0=0// 数据 :P3口/* ************************* */void wdata(unsigned char c){CS_0;DC_1;RDE_1;WR_0;delay(3);XDATA=c;delay(10);WR_1;delay(3);CS_1;}/* ************************* */// 函数名称: lcd_init// 函数功能: 显示器初始化// 入口变量:// 出口变量:// 修改记录://***********************void OLED_init(void){ wcode(0xae);wcode(0x21); // set column address wcode(0x00); // start column 0wcode(0x7f); // end column 127delay(10);wcode(0xa1); //segment remapdelay(10);wcode(0xc8); //common output scan direction:com63~com0 delay(10);wcode(0xda); //common pads hardware: alternativedelay(10);wcode(0x12);delay(10);wcode(0xa8); //multiplex ration mode:63delay(10);wcode(0x3f);delay(10);wcode(0xd5); //display divide ratio/osc. freq. modedelay(10);wcode(0x70); //Osc. Freq:320kHz,DivideRation:1delay(10);wcode(0x81); //contrast controldelay(10);wcode(0x70); // mode:64delay(10);wcode(0xd9); //set pre-charge perioddelay(10);wcode(0x22); //set period 1:1;period 2:15delay(10);wcode(0x20); //Set Memory Addressing Modedelay(10);wcode(0x02); //page addressing modedelay(10);wcode(0xdb); //VCOM deselect level modedelay(10);wcode(0x3c); //set Vvcomh=0.83*Vcc delay(10);wcode(0xad); //master configuration delay(10);wcode(0x8e); //external VCC supply delay(10);wcode(0xa4); //out follows RAM content delay(10);wcode(0xa6); //set normal display delay(10);wcode(0xaf);delay(10);}/* ************************* */// 设置开始页/* ************************* */void set_startpage(unsigned char p) {p=0xb0+p; // 开始页wcode(p);}/* ************************* */// 设置开始行/* ************************* */void set_startline(unsigned char x){x=0x40+x; // 开始行wcode(x);}/* ************************* */// 设置开始列/* ************************* */ void set_startcol(unsigned char y) { unsigned char yh,yl;yl = y;yh = y;yl &=0x0f;yh =yh>>4;yh &=0x0f;yh =yh+0x10;wcode(yh); // 页地址wcode(yl); // 列地址}/* ************************* */// 显示开关///* ************************* */ void dison_off(unsigned char o) {o=o+0xae;wcode(o);}/* ************************* */// 整屏清除///* ************************* */ void clr(void){ unsigned char loop,i; wcode(0xaf);wcode(0x40);for(i=0;i<8;i++){wcode(0xb0+i);wcode(0x10);wcode(0x00);for(loop=0;loop<132;loop++) { wdata(0xff);}}}/* ************************* */ // 写整屏///* ************************* */void full(void){ unsigned char loop,i; wcode(0xaf);wcode(0x40);for(i=0;i<8;i++){wcode(0xb0+i);wcode(0x00);wcode(0x10);for(loop=0;loop<132;loop++)wdata(0xff);}}/* ************************* */// 写垂直线/* ************************* */void vhl(void){ unsigned char i;for(i=0;i<8;i++){set_startpage(i); // 第i页,第0列set_startline(0); // 第0行set_startcol (63); // 写第n=63列wdata(0xff);}for(i=0;i<8;i++){set_startpage(i); // 第i页,第0列set_startline(0); // 第0行set_startcol (64); // 写第n=64列wdata(0xff);}}/* ************************* */// 写水平线/* ************************* */ void hol(void){ unsigned char i;set_startpage(4); // 第i页,第0列set_startline(0); // 第0行for(i=0;i<132;i++){set_startcol (i); // 写第n=64列wdata(0x01);}}/* ************************* */// 写128*64点阵图片/* ************************* */void wpicdot(const char *pic){ unsigned char loop,i;if (daoxian==0x01){wcode(0xa1); //ADC set from seg1~128 wcode(0xc8); //shl set form com1~64 }for(i=0;i<8;i++){set_startpage(i); // 第i页,第0列if (daoxian==0x01){set_startline(0); // 第4列set_startcol (4);}else{set_startline(0); // 第0行set_startcol (0);}for(loop=0;loop<128;loop++) { wdata(pic[i*128+loop]);}}_NOP();}。
SSD1306命令

SSD1306命令命令表单(D/C#=0, R/W#(WR#) = 0, E(RD#=1) 特殊状态除外) 1、基本命令D/C Hex D7 D6 D5 D4 D3 D2 D1 D0 命令描述0 81A[7:0] 1A7A6A5A4A3A2A11A0设置对比度双字节命令,1~256级对比度可选,对比度随值增加。
(复位值 = 0x7f)0 A4/A5 1 0 0 0 0 1 0 X0全部显示开A4h,X0 = 0 :恢复内存内容显示(默认),输出内存中的内容A5h,X0 = 1 :开显示,输出无视内存的内容0 A6/A7 1 0 0 0 0 1 1 X0设置正常/逆显示A6,X[0]= 0:正常显示(默认) RAM为0:显示面板关RAM为1:显示面板开A7 X[0]= 1:逆显示RAM为0:显示面板开RAM为1:显示面板关0 AE/AF 1 0 0 0 1 1 1 X0设置显示开/关AE:X[0]= 0:关显示(默认) AF:X[0]= 1:在正常模式显示2、滚动命令表D/C Hex D7 D6 D5 D4 D3 D2 D1 D0 命令描述0 0 0 0 0 0 0 26/27A[7:0]B[2:0]C[2:0]D[2:0]E[7:0]F[7:0]***1***11***1***1***11B2C2D211B1C1D11X0B0C0D01连续水平滚动设置26小时,X[0]= 0,右向水平滚动27 h,X[0]= 1,左向水平滚动(水平滚动1列)[7:0]:虚拟字节(设置为00 h)B(2:0):定义开始页面地址0~7 PAGE0 ~ PAGE7C(2:0):设置每个滚动步骤之间的时间间隔的帧频000 b - 5帧100 b - 3帧001 b - 64帧101 b - 4帧010 b - 128帧110 b - 25帧011 b - 256帧111 b - 2帧D(2:0):定义最终页面地址0~7 PAGE0 ~ PAGE7D(2:0)的值必须大于或等于B(2:0)E[7:0]:虚拟字节(设置为00 h)F[7:0]:虚拟字节(设置为FFh)0 0 0 0 29/2AA[2:0]B[2:0]C[2:0]****1****1**B2C2X1B1C1X0B0C0连续垂直和水平滚动设置29H,X1X0 = 01 :垂直和水平滚动2AH,X1X0 = 10 :垂直和水平滚动(水平滚动1列)[7:0]:虚拟字节0 0 D[2:0]E[5:0]***E5*E4*E3D2E2D1E1D0E0B(2:0):定义开始页面地址0~7 PAGE0 ~ PAGE7C(2:0):设置每个滚动步骤之间的时间间隔的帧频000 b - 5帧100 b - 3帧001 b - 64帧101 b - 4帧010 b - 128帧110 b - 25帧011 b - 256帧111 b - 2帧D(2:0):定义最终页面地址0~7 PAGE0 ~ PAGE7D(2:0)的值必须大于或等于B(2:0)E[5:0]:垂直滚动偏移量例如E[5:0]= 01 h指抵消= 1行E(5:0)= 3跳频是指抵消= 63行请注意(1)没有可用连续垂直滚动。
lcd初始化c语言程序

用1位数码管显示按键的键值#include <REG51.h>◆#include <INTRINS.H>◆unsigned char codesz1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86 ,0x8e};◆unsigned char codejp[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb 7,0x77};◆unsigned char c=0;◆void delay(unsigned int t)◆{◆unsigned char i;◆while(t--)◆{◆for(i=0;i<125;i++);◆}◆}◆void sm()◆{ unsigned char k,j,n,a,m=0xfe;◆P2=0xf0;k=P2;k=k&0xf0;◆if(k!=0xf0)◆{ delay(5);◆if(k!=0xf0)◆{for(j=0;j<4;j++)◆{ P2=m;n=P2;◆for(a=0;a<16;a++)◆{if(jp[a]==n) c=a;}◆m=_crol_(m,1);}◆}◆} }◆void main()◆{◆while(1)◆{ sm();◆P1=sz1[c];}◆}◆LCD编程流程:1.初始化(设定LCD的各种工作显示方式)2.设定第一行显示起始地址3.送数据到数据端口,显示字符串4.设定第二行显示起始地址5.送数据到数据端口,显示数据1.初始化:◆大概涉及到4个命令,发四次命令。
所以把发命令编程子程序,调用子程序时只是命令代码不一样。
◆void busy()◆{rs=0;rw=1;en=1;◆delay(1);◆f=P0;◆en=0;◆busy1=f&0x80;}◆void wc(unsigned char a)◆{while(busy1==0x80);◆rs=0;rw=0;en=0;◆P0=a;◆en=1;delay(1);en=0;}◆void chsh()◆{wc(0x38);delay(1);◆wc(0x01);delay(1);◆wc(0x0c);delay(1);◆wc(0x06);delay(1);}◆Void main()◆{…◆chsh();◆…◆}2.设定第一行显示起始地址◆Void main()◆{…◆wc(0x80);◆…◆}3.送数据到数据端口,显示字符串送字符串到数据端口,实际上是逐个把数据送过去。
SSD1306(OLED驱动芯片)指令详解

SSD1306(OLED驱动芯⽚)指令详解基础命令:1.页地址模式下设置列起始地址低位(Set Lower Column Start Address For Page Addressing Mode)(00h~0Fh)此指令⽤于在页地址模式下设置GDDRAM的列起始地址(8位)的低4位, 页地址会在数据访问后递增2.页地址模式下设置列起始地址⾼位(Set Higher Column Start Address For Page Addressing Mode)(10h~1Fh)此指令⽤于在页地址模式下设置GDDRAM的列起始地址(8位)的⾼4位, 页地址会在数据访问后递增3.设置内存地址模式(Set Memory Addressing Mode)(20h)在SSD1306中有三种地址模式: 页地址模式, ⽔平地址模式和垂直地址模式, 此命令⽤于将地址模式设置为以上三种之⼀'COL'的含义是GDDRAM列(column)页地址模式(A[1:0]=10b)当处于此模式时, 在GDDRAM访问后(读/写), 列地址指针将⾃动增加1。
如果列地址指针到达列终⽌地址, 列地址指针将复位到列起始地址, 但页地址指针不会改变。
为了访问GDDRAM中下⼀页的内容, ⽤户必须设置新的页地址和列地址。
页地址模式下页以及列地址指针的⾏为如下图所⽰通常在页地址模式下访问GDDRAM, 需要如下步骤来定义起始RAM访问指针指向:-通过命令(B0h-B7h)设置⽬标显⽰位置页起始地址-通过命令(00h-0Fh)设置列起始地址低位-通过命令(10h-1Fh)设置列起始地址⾼位例如, 如果页地址是B2h, 列地址低位是03h, 列地址⾼位是10h, 起始列将为PAGE2的SEG3, GDDRAM访问指针的指向如下图所⽰⽔平地址模式(A[1:0]=00b)当处于此模式时, 在GDDRAM访问后(读/写), 列地址指针将⾃动增加1。
OLED(SSD1306)基于STM32寄存器版驱动

OLED(SSD1306)基于STM32寄存器版驱动基于STM32的OLED(SSD1306)寄存器版编译即可用!OLED的头文件#ifndef _OLED_H#define _OLED_H#include "sys.h"/*///////////////////////////////////////////////////////////////// /////////////////////////////////// //SSD1306,当接口为SPI的驱动//功能简介:显示字符,字符串,数字,和小区域屏幕填充//作者:范桢干//时间:2016.1.6*////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////// ////////////接口定义/////////// #define OLED_SCLK P Cout(10)#define OLED_SDA PBout(15)#define OLED_RST PBout(13)#define OLED_DC PBout(11)//#define OLED_CS PAout(4)/////////////////////////////////////////////////////////////////// ///////////////////////////////////void OLED_Init(void); //OLED初始化void OLED_Clear(u8 Fill); //OLED清屏/清屏void OLED_ShowChar(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u8 uChar); //在指定Page_sta,Column_sta 和Size输入字符Charvoid OLED_ShowString(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u8 *p); //在指定Page_sta,Column_sta处输入大小为Size的字符串*pvoid OLED_ShowNum(u8 uPage,u8 uColumn_sta,u8 uSize,u32 uNum); //在指定Page_sta,Column_sta处输入大小为Size 的数字uNum,范围:(0~4294967295)void OLED_Fill(u8 uPage_sta,u8 uColumn_sta,u8 uColumn_end,u8 Fill); //在Page_sta,从uColumn_sta到uColumn_end填充或清屏#endifOLED的C文件#include "oled.h"#include "delay.h"#include "ASCII.h"//函数名称:void OLED_WriteCmd(u8 uCmd) //函数功能:OLED写一个指令//函数参数:uCmd:写入的指令void OLED_WriteCmd(u8 uCmd){u8 i;OLED_DC=0; //写指令for(i=0;i<8;i++){OLED_SCLK=0;if(uCmd&0x80) //先发送高位{ OLED_SDA=1;}else{ OLED_SDA=0;}OLED_SCLK=1;uCmd<<=1; //左移一位}OLED_SCLK=0;}//函数名称:void OLED_WriteDat(u8 uDat) //函数功能:OLED 写一个数据//函数参数:uDat:写入的数据void OLED_WriteDat(u8 uDat){u8 i;OLED_DC=1; //写数据for(i=0;i<8;i++){OLED_SCLK=0;if(uDat&0x80) //先发送高位{ OLED_SDA=1;}else{ OLED_SDA=0;}OLED_SCLK=1;uDat<<=1; //左移一位}OLED_SCLK=0;}//函数名称:void OLED_Init(void)//函数功能:OLED初始化void OLED_Init(void){RCC->APB2ENR|=1<<3; //使能PORTB时钟RCC->APB2ENR|=1<<4; //使能PORTC时钟GPIOB->CRH&=0X0F0F0FFF;GPIOB->CRH|=0X30303000; //PB11,13,15推挽输出GPIOC->CRH&=0XFFFFF0FF;GPIOC->CRH|=0X00000300; //PC10推挽输出OLED_RST=0; //低电平复位delay_ms(10);OLED_RST=1; //复位完毕delay_ms(20);OLED_WriteCmd(0xAE); //关OLED显示OLED_WriteCmd(0xD5); //设置时钟OLED_WriteCmd(0x80);OLED_WriteCmd(0x20); //RAM Addressing ModeOLED_WriteCmd(0x01); //Vertical Addressing ModeOLED_WriteCmd(0xA8); //设置驱动路数(set Multiplex Ratio) OLED_WriteCmd(0x3F);OLED_WriteCmd(0xD3); //set offsetOLED_WriteCmd(0x00);OLED_WriteCmd(0x40); //Set Start LineOLED_WriteCmd(0xA1); //Set RemapOLED_WriteCmd(0xC8); //Output Scan DirectionOLED_WriteCmd(0xDA); //Pins ConfigurationOLED_WriteCmd(0x12);OLED_WriteCmd(0x81); //设置对比度(Set Contrast Ratio)OLED_WriteCmd(0xCF); //128(0-255)OLED_WriteCmd(0xD9); //Set Pre-ChagreOLED_WriteCmd(0xF1);OLED_WriteCmd(0xD8); //Set VcomhOLED_WriteCmd(0x30);OLED_WriteCmd(0xA4); //Display Accordding to GDDRAM OLED_WriteCmd(0xA6); //Set Normal DisplayOLED_WriteCmd(0x8D); //Set Charge PumpOLED_WriteCmd(0x14);OLED_WriteCmd(0xAF); //开显示delay_ms(100); //等待开启显示OLED_Clear(0); //清屏}//函数名称:void OLED_Clear(u8 Fill)//函数功能:OLED填充/清屏//函数参数:Fill,填充或者清除void OLED_Clear(u8 Fill){u8 i,j;OLED_WriteCmd(0x22); //Page AddressOLED_WriteCmd(0x00); //Page Start AddressOLED_WriteCmd(0x07); //Page End AddressOLED_WriteCmd(0x21); //Column AddressOLED_WriteCmd(0x00); //Column Start AddressOLED_WriteCmd(0x7F); //Column Start Addressfor(i=0;i<128;i++)for(j=0;j<8;j++){{ OLED_WriteDat(0xFF);}else{ OLED_WriteDat(0x00);}}}//函数名称:void OLED_ShowChar(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u8 uChar)//函数功能:在指定Page_sta,Column_sta处输入大小为Size的字符Char//函数参数:uPage_sta:页数,uColumn_sta:列数,uSize:字体大小,uChar:输入的字符//注意:本字符输入函数增加了自动换行换页功能void OLED_ShowChar(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u8 uChar){#define MAX_CHAR_X 127 //Column限制#define MAX_CHAR_Y 7 //Page限制u8 uChar_Buf;u8 uCount;u8 uPage_end,uColumn_end;u8 i;if(uSize==6) //如果是8x6字体{ uPage_end=uPage_sta; //赋值Page_enduColumn_end=uColumn_sta+uSize; //赋值Cloumn_enduCount=6; //赋值uCount}else if(uSize==8) //如果是16x8字体{ uPage_end=uPage_sta+1; //赋值Page_enduColumn_end=uColumn_sta+uSize; //赋值Cloumn_enduCount=16; //赋值uCount}else{ return; //uSize错误}/////////////////////////////////自动换行换页//////////////////////////////////////////////////////////////////////// ////////////////////////////// if(uColumn_end>MAX_CHAR_X) //如果Cloumn>127{uColumn_sta=0; //Column_sta=0uColumn_end=uColumn_sta+uSize;{ uPage_sta=uPage_sta+1; //Page_sta+1uPage_end=uPage_sta;}else{ uPage_sta=uPage_sta+2; //Page_sta+2uPage_end=uPage_sta+1;}}if(uPage_end>MAX_CHAR_Y) //如果Page>7{uPage_sta=0; //Page_sta=0if(uSize==6){ uPage_end=uPage_sta;}else{ uPage_end=uPage_sta+1;}}/////////////////////////////////自动换行换页//////////////////////////////////////////////////////////////////////// ////////////////////////////// OLED_WriteCmd(0x22); //Page AddressOLED_WriteCmd(0x00+uPage_sta); //Start Page AddressOLED_WriteCmd(0x00+uPage_end); //End Page AddressOLED_WriteCmd(0x21); //Column AddressOLED_WriteCmd(0x00+uColumn_sta); //Start ColumnAddressOLED_WriteCmd(0x00+uColumn_end); //End Column AddressuChar=uChar-' '; //获得偏移量for(i=0;i<="">{if(uSize==8){ uChar_Buf=ASCII_1608[uChar][i];}else{ uChar_Buf=ASCII_0806[uChar][i];}OLED_WriteDat(uChar_Buf);}}//函数名称:void OLED_ShowString(u8 uPage_sta,u8 uColumn,u8 uSize,u8 *p)//函数功能:在指定Page_sta,Column_sta处输入大小为Size的字符串*p//函数参数:uPage_sta:页数,uColumn_sta:列数,uSize:字体大小,*p:输入的字符串指针//注意:本字符串输入函数增加了自动换行换页功能void OLED_ShowString(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u8 *p){while(*p!='\0'){/////////////////////////////////自动换行换页//////////////////////////////////////////////////////////////////////// //////////////////////////////if((uColumn_sta+uSize)>MAX_CHAR_X){ uColumn_sta=0;if(uSize==6){ uPage_sta=uPage_sta+1; //Page_sta+1}else{ uPage_sta=uPage_sta+2; //Page_sta+2}}if(uSize==6){ if(uPage_sta>MAX_CHAR_Y){ uPage_sta=0;}}else{ if((uPage_sta+1)>MAX_CHAR_Y){ uPage_sta=0;}}/////////////////////////////////自动换行换页//////////////////////////////////////////////////////////////////////// //////////////////////////////OLED_ShowChar(uPage_sta,uColumn_sta,uSize,*p);uColumn_sta+=uSize;p++;}}//m^n函数u32 mypow(u8 m,u8 n){u32 result=1;while(n--)result*=m;return result;}//功能:计算整数长度数字0长度为1u8 LongCheck(u32 num){u8 len=0;if(num==0) //数字0长度也为1{ return 1;}while(num){ num/=10;len++;}return len;}//函数名称:void OLED_ShowNum(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u32 uNum)//函数功能:在指定Page_sta,Column_sta处输入大小为Size的数字uNum,范围:(0~4294967295)//函数参数:uPage_sta:页数,uColumn_sta:列数,uSize:字体大小,uNum:输入的数字void OLED_ShowNum(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u32 uNum){u8 i,temp;u8 len;len=LongCheck(uNum); //算出长度for(i=0;i<len;i++)< bdsfid="316" p=""></len;i++)<>{temp=(uNum/mypow(10,len-i-1))%10;OLED_ShowChar(uPage_sta,uColumn_sta,uSize,temp+'0');uColumn_sta+=uSize;}}//函数名称:void OLED_Fill(u8 uPage_sta,u8 uColumn_sta,u8 uColumn_end,u8 Fill)//函数功能:在Page_sta,从uColumn_sta到uColumn_end填充或清屏//函数参数:uPage_sta:页数,uColumn_sta:列开始,uColumn_end:列结束,Fill:填充/清除void OLED_Fill(u8 uPage_sta,u8 uColumn_sta,u8 uColumn_end,u8 Fill){u8 i;u8 ulen;OLED_WriteCmd(0x22); //Page AddressOLED_WriteCmd(0x00+uPage_sta); //Start Page AddressOLED_WriteCmd(0x00+uPage_sta); //End Page AddressOLED_WriteCmd(0x21); //Column Address OLED_WriteCmd(0x00+uColumn_sta); //Start Column Address OLED_WriteCmd(0x00+uColumn_end); //End Column Address ulen=uColumn_end-uColumn_sta+1;for(i=0;i<=ulen;i++){if(Fill){ OLED_WriteDat(0xff); //填充}else{ OLED_WriteDat(0x00); //清除}}}ASCII码字库#ifndef _ASCII_H#define _ASCII_H//常用ASCII表//纵向取模//偏移量:32//大小:16*8const unsigned char ASCII_1608[95][16]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00},//" ",0 {0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x33,0x00,0x30,0x00,0x00, 0x00,0x00,0x00,0x00},//"!",1{0x00,0x00,0x10,0x00,0x0C,0x00,0x06,0x00,0x10,0x00,0x0C,0x00, 0x06,0x00,0x00,0x00},//""",2{0x40,0x04,0xC0,0x3F,0x78,0x04,0x40,0x04,0xC0,0x3F,0x78,0x04, 0x40,0x04,0x00,0x00},//"#",3{0x00,0x00,0x70,0x18,0x88,0x20,0xFC,0xFF,0x08,0x21,0x30,0x1E, 0x00,0x00,0x00,0x00},//"$",4{0xF0,0x00,0x08,0x21,0xF0,0x1C,0x00,0x03,0xE0,0x1E,0x18,0x21, 0x00,0x1E,0x00,0x00},//"%",5{0x00,0x1E,0xF0,0x21,0x08,0x23,0x88,0x24,0x70,0x19,0x00,0x27, 0x00,0x21,0x00,0x10},//"&",6{0x10,0x00,0x16,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00},//"'",7{0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x18,0x18,0x04,0x20, 0x02,0x40,0x00,0x00},//"(",8{0x00,0x00,0x02,0x40,0x04,0x20,0x18,0x18,0xE0,0x07,0x00,0x00,{0x40,0x02,0x40,0x02,0x80,0x01,0xF0,0x0F,0x80,0x01,0x40,0x02, 0x40,0x02,0x00,0x00},//"*",10{0x00,0x01,0x00,0x01,0x00,0x01,0xF0,0x1F,0x00,0x01,0x00,0x01, 0x00,0x01,0x00,0x00},//"+",11{0x00,0x80,0x00,0xB0,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00},//",",12{0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01, 0x00,0x01,0x00,0x01},//"-",13{0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00},//".",14{0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x80,0x01,0x60,0x00, 0x18,0x00,0x04,0x00},//"/",15{0x00,0x00,0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x10,0x10, 0xE0,0x0F,0x00,0x00},//"0",16{0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20, 0x00,0x00,0x00,0x00},//"1",17{0x00,0x00,0x70,0x30,0x08,0x28,0x08,0x24,0x08,0x22,0x88,0x21, 0x70,0x30,0x00,0x00},//"2",18{0x00,0x00,0x30,0x18,0x08,0x20,0x88,0x20,0x88,0x20,0x48,0x11, 0x30,0x0E,0x00,0x00},//"3",19{0x00,0x00,0x00,0x07,0xC0,0x04,0x20,0x24,0x10,0x24,0xF8,0x3F, 0x00,0x24,0x00,0x00},//"4",20{0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11, 0x08,0x0E,0x00,0x00},//"5",21{0x00,0x00,0xE0,0x0F,0x10,0x11,0x88,0x20,0x88,0x20,0x18,0x11, 0x00,0x0E,0x00,0x00},//"6",22{0x00,0x00,0x38,0x00,0x08,0x00,0x08,0x3F,0xC8,0x00,0x38,0x00, 0x08,0x00,0x00,0x00},//"7",23{0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,{0x00,0x00,0xE0,0x00,0x10,0x31,0x08,0x22,0x08,0x22,0x10,0x11, 0xE0,0x0F,0x00,0x00},//"9",25{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0xC0,0x30,0x00,0x00, 0x00,0x00,0x00,0x00},//":",26{0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x60,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00},//";",27{0x00,0x00,0x00,0x01,0x80,0x02,0x40,0x04,0x20,0x08,0x10,0x10, 0x08,0x20,0x00,0x00},//"<",28{0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04, 0x40,0x04,0x00,0x00},//"=",29{0x00,0x00,0x08,0x20,0x10,0x10,0x20,0x08,0x40,0x04,0x80,0x02, 0x00,0x01,0x00,0x00},//">",30{0x00,0x00,0x70,0x00,0x48,0x00,0x08,0x30,0x08,0x36,0x08,0x01, 0xF0,0x00,0x00,0x00},//"?",31{0xC0,0x07,0x30,0x18,0xC8,0x27,0x28,0x24,0xE8,0x23,0x10,0x14, 0xE0,0x0B,0x00,0x00},//"@",3 2{0x00,0x20,0x00,0x3C,0xC0,0x23,0x38,0x02,0xE0,0x02,0x00,0 x27,0x00,0x38,0x00,0x20},//"A",33{0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x20,0x88,0x20,0x70,0x11, 0x00,0x0E,0x00,0x00},//"B",34{0xC0,0x07,0x30,0x18,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x10, 0x38,0x08,0x00,0x00},//"C",35{0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x10, 0xE0,0x0F,0x00,0x00},//"D",36{0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x20,0xE8,0x23,0x08,0x20, 0x10,0x18,0x00,0x00},//"E",37{0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x00,0xE8,0x03,0x08,0x00, 0x10,0x00,0x00,0x00},//"F",38{0xC0,0x07,0x30,0x18,0x08,0x20,0x08,0x20,0x08,0x22,0x38,0x1E,{0x08,0x20,0xF8,0x3F,0x08,0x21,0x00,0x01,0x00,0x01,0x08,0x21, 0xF8,0x3F,0x08,0x20},//"H",40{0x00,0x00,0x08,0x20,0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x20, 0x00,0x00,0x00,0x00},//"I",41{0x00,0xC0,0x00,0x80,0x08,0x80,0x08,0x80,0xF8,0x7F,0x08,0x00, 0x08,0x00,0x00,0x00},//"J",42{0x08,0x20,0xF8,0x3F,0x88,0x20,0xC0,0x01,0x28,0x26,0x18,0x38, 0x08,0x20,0x00,0x00},//"K",43{0x08,0x20,0xF8,0x3F,0x08,0x20,0x00,0x20,0x00,0x20,0x00,0x20, 0x00,0x30,0x00,0x00},//"L",44{0x08,0x20,0xF8,0x3F,0xF8,0x00,0x00,0x3F,0xF8,0x00,0xF8,0x3F,0 x08,0x20,0x00,0x00},//"M",45{0x08,0x20,0xF8,0x3F,0x30,0x20,0xC0,0x00,0x00,0x07,0x08,0x18, 0xF8,0x3F,0x08,0x00},//"N",46{0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x10, 0xE0,0x0F,0x00,0x00},//"O",47{0x08,0x20,0xF8,0x3F,0x08,0x21,0x08,0x01,0x08,0x01,0x08,0x01, 0xF0,0x00,0x00,0x00},//"P",48{0xE0,0x0F,0x10,0x18,0x08,0x24,0x08,0x24,0x08,0x38,0x10,0x50, 0xE0,0x4F,0x00,0x00},//"Q",49{0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x00,0x88,0x03,0x88,0x0C, 0x70,0x30,0x00,0x20},//"R",50{0x00,0x00,0x70,0x38,0x88,0x20,0x08,0x21,0x08,0x21,0x08,0x22, 0x38,0x1C,0x00,0x00},//"S",51{0x18,0x00,0x08,0x00,0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x00, 0x18,0x00,0x00,0x00},//"T",52{0x08,0x00,0xF8,0x1F,0x08,0x20,0x00,0x20,0x00,0x20,0x08,0x20, 0xF8,0x1F,0x08,0x00},//"U",53{0x08,0x00,0x78,0x00,0x88,0x07,0x00,0x38,0x00,0x0E,0xC8,0x01,{0xF8,0x03,0x08,0x3C,0x00,0x07,0xF8,0x00,0x00,0x07,0x08,0x3C, 0xF8,0x03,0x00,0x00},//"W",55{0x08,0x20,0x18,0x30,0x68,0x2C,0x80,0x03,0x80,0x03,0x68,0x2C, 0x18,0x30,0x08,0x20},//"X",56{0x08,0x00,0x38,0x00,0xC8,0x20,0x00,0x3F,0xC8,0x20,0x38,0x00, 0x08,0x00,0x00,0x00},//"Y",57{0x10,0x20,0x08,0x38,0x08,0x26,0x08,0x21,0xC8,0x20,0x38,0x20, 0x08,0x18,0x00,0x00},//"Z",58{0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0x02,0x40,0x02,0x40, 0x02,0x40,0x00,0x00},//"[",59{0x00,0x00,0x0C,0x00,0x30,0x00,0xC0,0x01,0x00,0x06,0x00,0x38, 0x00,0xC0,0x00,0x00},//"\",60{0x00,0x00,0x02,0x40,0x02,0x40,0x02,0x40,0xFE,0x7F,0x00,0x00, 0x00,0x00,0x00,0x00},//"]",61{0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x00,0x02,0x00,0x02,0x00, 0x04,0x00,0x00,0x00},//"^",62{0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80, 0x00,0x80,0x00,0x80},//"_",63{0x00,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00},//"`",64{0x00,0x00,0x00,0x19,0x80,0x24,0x80,0x22,0x80,0x22,0x80,0x22, 0x00,0x3F,0x00,0x20},//"a",65{0x08,0x00,0xF8,0x3F,0x00,0x11,0x80,0x20,0x80,0x20,0x00,0x11, 0x00,0x0E,0x00,0x00},//"b",66{0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x80,0x20, 0x00,0x11,0x00,0x00},//"c",67{0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x88,0x10, 0xF8,0x3F,0x00,0x20},//"d",68{0x00,0x00,0x00,0x1F,0x80,0x22,0x80,0x22,0x80,0x22,0x80,0x22,{0x00,0x00,0x80,0x20,0x80,0x20,0xF0,0x3F,0x88,0x20,0x88,0x20, 0x88,0x00,0x18,0x00},//"f",70{0x00,0x00,0x00,0x6B,0x80,0x94,0x80,0x94,0x80,0x94,0x80,0x93, 0x80,0x60,0x00,0x00},//"g",71{0x08,0x20,0xF8,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20, 0x00,0x3F,0x00,0x20},//"h",72{0x00,0x00,0x80,0x20,0x98,0x20,0x98,0x3F,0x00,0x20,0x00,0x20, 0x00,0x00,0x00,0x00},//"i",73{0x00,0x00,0x00,0xC0,0x00,0x80,0x80,0x80,0x98,0x80,0x98,0x7F, 0x00,0x00,0x00,0x00},//"j",74{0x08,0x20,0xF8,0x3F,0x00,0x24,0x00,0x02,0x80,0x2D,0x80,0x30, 0x80,0x20,0x00,0x00},//"k",75{0x00,0x00,0x08,0x20,0x08,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20, 0x00,0x00,0x00,0x00},//"l",76{0x80,0x20,0x80,0x3F,0x80,0x20,0x80,0x00,0x80,0x3F,0x80,0x 20,0x80,0x00,0x00,0x3F},//"m",77{0x80,0x20,0x80,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20, 0x00,0x3F,0x00,0x20},//"n",78{0x00,0x00,0x00,0x1F,0x80,0x20,0x80,0x20,0x80,0x20,0x80,0x20, 0x00,0x1F,0x00,0x00},//"o",79{0x80,0x80,0x80,0xFF,0x00,0xA1,0x80,0x20,0x80,0x20,0x00,0x11, 0x00,0x0E,0x00,0x00},//"p",80{0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x80,0xA0, 0x80,0xFF,0x00,0x80},//"q",81{0x80,0x20,0x80,0x20,0x80,0x3F,0x00,0x21,0x80,0x20,0x80,0x00, 0x80,0x01,0x00,0x00},//"r",82{0x00,0x00,0x00,0x33,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x24, 0x80,0x19,0x00,0x00},//"s",83{0x00,0x00,0x80,0x00,0x80,0x00,0xE0,0x1F,0x80,0x20,0x80,0x20,{0x80,0x00,0x80,0x1F,0x00,0x20,0x00,0x20,0x00,0x20,0x80,0x10, 0x80,0x3F,0x00,0x20},//"u",85{0x80,0x00,0x80,0x01,0x80,0x0E,0x00,0x30,0x00,0x08,0x80,0x06, 0x80,0x01,0x80,0x00},//"v",86{0x80,0x0F,0x80,0x30,0x00,0x0C,0x80,0x03,0x00,0x0C,0x80,0x30, 0x80,0x0F,0x80,0x00},//"w",87{0x00,0x00,0x80,0x20,0x80,0x31,0x00,0x2E,0x80,0x0E,0x80,0x31, 0x80,0x20,0x00,0x00},//"x",88{0x80,0x80,0x80,0x81,0x80,0x8E,0x00,0x70,0x00,0x18,0x80,0x06, 0x80,0x01,0x80,0x00},//"y",89{0x00,0x00,0x80,0x21,0x80,0x30,0x80,0x2C,0x80,0x22,0x80,0x21, 0x80,0x30,0x00,0x00},//"z",90{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x7C,0x3F, 0x02,0x40,0x02,0x40},//"{",91{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0 x00,0x00,0x00,0x00},//"|",92{0x00,0x00,0x02,0x40,0x02,0x40,0x7C,0x3F,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x00},//"}",93{0x00,0x00,0x06,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x02,0x00, 0x04,0x00,0x04,0x00},//"~",94 };//常用ASCII表//纵向取模//偏移量:32//大小:8*6const unsigned char ASCII_0806[95][6]={{0x00,0x00,0x00,0x00,0x00,0x00},//- - //space{0x00,0x00,0x4f,0x00,0x00,0x00},//-!-{0x00,0x07,0x00,0x07,0x00,0x00},//-"-{0x14,0x7f,0x14,0x7f,0x14,0x00},//-#-{0x24,0x2a,0x7f,0x2a,0x12,0x00},//-$-{0x23,0x13,0x08,0x64,0x62,0x00},//-%- {0x36,0x49,0x55,0x22,0x50,0x00},//-&- {0x00,0x05,0x07,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,0x50,0x30,0x00,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,0x00},//-0-{0x00,0x42,0x7f,0x40,0x00,0x00},//-1-{0x21,0x41,0x45,0x4b,0x31,0x00},//-3- {0x18,0x14,0x12,0x7f,0x10,0x00},//-4-{0x27,0x45,0x45,0x45,0x39,0x00},//-5-{0x3c,0x4a,0x49,0x49,0x30,0x00},//-6-{0x01,0x71,0x09,0x05,0x03,0x00},//-7-{0x36,0x49,0x49,0x49,0x36,0x00},//-8-{0x06,0x49,0x49,0x29,0x1e,0x00},//-9-{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,0x79,0x41,0x3e,0x00},//-@- {0x7e,0x11,0x11,0x11,0x7e,0x00},//-A- {0x7f,0x49,0x49,0x49,0x36,0x00},//-B-{0x3e,0x41,0x41,0x41,0x22,0x00},//-C- {0x7f,0x41,0x41,0x22,0x1c,0x00},//-D- {0x7f,0x49,0x49,0x49,0x41,0x00},//-E- {0x7f,0x09,0x09,0x09,0x01,0x00},//-F- {0x3e,0x41,0x49,0x49,0x7a,0x00},//-G- {0x7f,0x08,0x08,0x08,0x7f,0x00},//-H-{0x00,0x41,0x7f,0x41,0x00,0x00},//-I-{0x20,0x40,0x41,0x3f,0x01,0x00},//-J-{0x7f,0x08,0x14,0x22,0x41,0x00},//-K- {0x7f,0x40,0x40,0x40,0x40,0x00},//-L- {0x7f,0x02,0x0c,0x02,0x7f,0x00},//-M- {0x7f,0x04,0x08,0x10,0x7f,0x00},//-N- {0x3e,0x41,0x41,0x41,0x3e,0x00},//-O- {0x7f,0x09,0x09,0x09,0x06,0x00},//-P- {0x3e,0x41,0x51,0x21,0x5e,0x00},//-Q- {0x7f,0x09,0x19,0x29,0x46,0x00},//-R- {0x46,0x49,0x49,0x49,0x31,0x00},//-S- {0x01,0x01,0x7f,0x01,0x01,0x00},//-T- {0x3f,0x40,0x40,0x40,0x3f,0x00},//-U-{0x1f,0x20,0x40,0x20,0x1f,0x00},//-V-{0x3f,0x40,0x38,0x40,0x3f,0x00},//-W- {0x63,0x14,0x08,0x14,0x63,0x00},//-X- {0x07,0x08,0x70,0x08,0x07,0x00},//-Y- {0x61,0x51,0x49,0x45,0x43,0x00},//-Z- {0x00,0x7f,0x41,0x41,0x00,0x00},//-[-{0x02,0x04,0x08,0x10,0x20,0x00},//-\- {0x00,0x41,0x41,0x7f,0x00,0x00},//-]- {0x40,0x40,0x40,0x40,0x40,0x00},//-_- {0x01,0x02,0x04,0x00,0x00,0x00},//-`- {0x20,0x54,0x54,0x54,0x78,0x00},//-a-{0x7f,0x48,0x48,0x48,0x30,0x00},//-b- {0x38,0x44,0x44,0x44,0x44,0x00},//-c- {0x30,0x48,0x48,0x48,0x7f,0x00},//-d- {0x38,0x54,0x54,0x54,0x58,0x00},//-e- {0x00,0x08,0x7e,0x09,0x02,0x00},//-f- {0x48,0x54,0x54,0x54,0x3c,0x00},//-g- {0x7f,0x08,0x08,0x08,0x70,0x00},//-h- {0x00,0x00,0x7a,0x00,0x00,0x00},//-i- {0x20,0x40,0x40,0x3d,0x00,0x00},//-j- {0x7f,0x20,0x28,0x44,0x00,0x00},//-k- {0x00,0x41,0x7f,0x40,0x00,0x00},//-l- {0x7c,0x04,0x38,0x04,0x7c,0x00},//-m- {0x7c,0x08,0x04,0x04,0x78,0x00},//-n- {0x38,0x44,0x44,0x44,0x38,0x00},//-o- {0x7c,0x14,0x14,0x14,0x08,0x00},//-p- {0x08,0x14,0x14,0x14,0x7c,0x00},//-q- {0x7c,0x08,0x04,0x04,0x08,0x00},//-r- {0x48,0x54,0x54,0x54,0x24,0x00},//-s- {0x04,0x04,0x3f,0x44,0x24,0x00},//-t- {0x3c,0x40,0x40,0x40,0x3c,0x00},//-u- {0x1c,0x20,0x40,0x20,0x1c,0x00},//-v- {0x3c,0x40,0x30,0x40,0x3c,0x00},//-w- {0x44,0x28,0x10,0x28,0x44,0x00},//-x- {0x04,0x48,0x30,0x08,0x04,0x00},//-y- {0x44,0x64,0x54,0x4c,0x44,0x00},//-z- {0x08,0x36,0x41,0x41,0x00,0x00},//-{- {0x00,0x00,0x77,0x00,0x00,0x00},//-|- {0x00,0x41,0x41,0x36,0x08,0x00},//-}- {0x04,0x02,0x02,0x02,0x01,0x00},//-~- };#endif。
STC-32S2 60S2 PCA产生高速脉冲初始化

#include <REG52.H>#include <intrins.h>#define FOSC 18432000L#define T100KHz (FOSC/4/100000)typedef unsigned char BYTE;typedef unsigned int WORD;/*Declare SFR associated with the PCA */sfr CCON = 0xD8; //PCA control registersbit CCF0 = CCON^0; //PCA module-0 interrupt flagsbit CCF1 = CCON^1; //PCA module-1 interrupt flagsbit CR = CCON^6; //PCA timer run control bitsbit CF = CCON^7; //PCA timer overflow flagsfr CMOD = 0xD9; //PCA mode registersfr CL = 0xE9; //PCA base timer LOWsfr CH = 0xF9; //PCA base timer HIGHsfr CCAPM0 = 0xDA; //PCA module-0 mode registersfr CCAP0L = 0xEA; //PCA module-0 capture register LOW sfr CCAP0H = 0xFA; //PCA module-0 capture register HIGH sfr CCAPM1 = 0xDB; //PCA module-1 mode registersfr CCAP1L = 0xEB; //PCA module-1 capture register LOW sfr CCAP1H = 0xFB; //PCA module-1 capture register HIGH sfr PCAPWM0 = 0xF2;sfr PCAPWM1 = 0xF3;sbit PCA_LED = P1^0; //PCA test LEDBYTE cnt;WORD value;void PCA_isr( ) interrupt 7 using 1{CCF0 = 0; //Clear interrupt flagCCAP0L = value;CCAP0H = value >> 8; //Update compare valuevalue += T100KHz;}void main(){CCON = 0; //Initial PCA control register//PCA timer stop running//Clear CF flag//Clear all module interrupt flagCL = 0; //Reset PCA base timerCH = 0;CMOD = 0x02; //Set PCA timer clock source as Fosc/2//Disable PCA timer overflow interruptvalue = T100KHz;CCAP0L = value; //P1.3 output 100KHz square waveCCAP0H = value >> 8; //Initial PCA module-0value += T100KHz;CCAPM0 = 0x4d; //PCA module-0 work in 16-bit timer mode//and enable PCA interrupt, toggle the output pin CEX0(P1.3) CR = 1; //PCA timer start runEA = 1;cnt = 0;while (1);}。
oled初始化程序

// D[3:0] => Phase 1 Period in 1~15 Display Clocks
// D[7:4] => Phase 2 Period in 1~15 Display Clocks
// 0xC8 (0x08) => Scan from COM63 to 0
}
void Set_Display_Offset(unsigned char d)
{
Write_Command(0xD3); // Set Display Offset
Write_Command(d); // Default => 0x00
Write_Command(0X00); // => (Dummy Write for First Parameter)
Write_Command(a); // Default => 0x80 (Contrast Control for Bank 0)
Write_Command(b); // Default => 0x80 (Brightness for Area Color Banks)
}
void Delay(unsigned char n)
{
unsigned char i,j,k;
for(k=0;k<n;k++)
{
for(i=0;i<131;i++)
{
for(j=0;j<15;j++)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//
void Display_Start_Line(uchar line)
{
uchar value;
value = line;
Write_Command(0xA1);
Write_Data(value);
}
//
//
/******************************************************
//
//
void Write_Data(uchar date)
{
CS=low;
DC=high;
WR=low;
_nop_();_nop_();
P0=date;
WR=high;
_nop_();_nop_();
CS=high;
}
Write_Command(value);
}
//
//
/******************************************************
//
//Set Column Address
//
******************************************************/
**
** Module: M00160
**
** Dot Matrix: 256*64
**
** Display Color: Blue
**
** Driver IC: SSD1322
**
** IREF : 680KΩ
**
** Edit : CaoChaoGan
**
Write_Data(value_2);
}
//
//
/******************************************************
//
//Set Re-map and Dual COM Line mode
//
******************************************************/
//
//
/***************************************************ock
//
******************************************************/
//
//
Write_Data(value);
}
//
//
/******************************************************
//
//Display Enhancement A
//
******************************************************/
void Command_Lock(uchar lock)
{
uchar value;
value = lock;
Write_Command(0xfd);
Write_Data(value);
}
//
//
/******************************************************
//
//
void Set_GPIO(uchar gpio)
{
uchar value;
value = gpio;
//
//Set Phase Length
//
******************************************************/
//
//
void Phase_Length(uchar length)
{
uchar value;
value = length;
//
//
void Display_En_A(uchar enhance_1, uchar enhance_2)
{
uchar value_1,value_2;
value_1 = enhance_1;
value_2 = enhance_2;
Write_Command(0xB4);
#include "reg52.h"
#include "intrins.h"
#include "IC.h"
#include "Delay.h"
//
//
/******************************************************
//
//写命令函数
//
//Set Sleep mode ON/OFF
//
******************************************************/
//
//
void Sleep_Mode(uchar mode)
{
uchar value;
value = mode;
P0=command;
WR=high;
_nop_();_nop_();
CS=high;
}
//
//
//
/******************************************************
//
//写数据函数
//
******************************************************/
//
//Set Display Offset
//
******************************************************/
//
//
void Display_Offset(uchar offset)
{
uchar value;
value = offset;
//
//
void Row_Address(uchar start , uchar end)
{
uchar value_1,value_2;
value_1 = start ;
value_2 = end ;
Write_Command(0x75);
Write_Data(value_1);
//
//
void Column_Address(uchar start , uchar end)
{
uchar value_1,value_2;
value_1 = start ;
value_2 = end ;
Write_Command(0x15);
Write_Data(value_1);
//
//
void Fun_Selection(uchar selection)
{
uchar value;
value = selection;
Write_Command(0xAB);
Write_Data(value);
}
//
//
/******************************************************
Write_Command(0xB1);
Write_Data(value);
}
//
//
/******************************************************
//
//Set Front Clock Divider / Oscillator
//
******************************************************/
//
//
void Clock_Divider(uchar divider)
{
uchar value;
value = divider;
Write_Command(0xB3);
Write_Data(enhance_1);
Write_Data(enhance_2);
}
//
//
/******************************************************
//
//Set GPIO
//
******************************************************/
**
** Copyright(C) visionox display Corporation 2002 - 2009
** All rights reserved by Kunshan visionox display Corporation.
**
** This program should be used on your own responsibility.
** Creation date: 2009-10-30
---------------------------------------------------------------------
**/