简单的并口协议:8080和6800
- 格式:doc
- 大小:29.00 KB
- 文档页数:1
基于STM32在LCD上显示SD卡中BMP图片的设计上海第二工业大学实训报告课程名称:电信专业综合实践学生姓名: xx xx xx学号:201x4820xxx 201x4820xxx 201x4820xxx 学院名称:工学部专业班级: xx电信A1目录摘要: (1)第一章绪论 (1)1.2本课题设计的背景 (1)1.2 本课题设计内容 (2)第二章实验方案的总体设计 (3)2.1详细设计组成框图: (3)2.2相关硬件简介 (3)2.3相关硬件原理图 (12)第三章设计流程图 (19)第四章硬件设计 (20)4.1中英文显示部分设计 (20)4.2 BMP图片部分设计 (21)4.3 SD卡读取的内容 (22)第五章软件设计 (23)5.1主函数部分程序设计 (23)5.2按键程序设计 (27)5.3 LED灯程序设计 (33)第六章系统调试结果及问题分析 ....................... 3错误!未定义书签。
6.1 系统调试后的实验现象...................... 3错误!未定义书签。
6.2 遇到的问题及解决办法 (38)第七章总结 (39)7.1思考与总结 (39)7.2参考文献: (40)基于STM32在LCD上显示SD卡中BMP图片的设计摘要:设计了一种基于STM32的处理器的按键式控制的BMP图片切换系统。
在设计过程中采用了SD卡中读取BMP格式图片及汉字字库,使LCD屏幕显示相关提示内容及设定格式的BMP图片。
完成了基于ARM最新Cortex-M3内核的处理器STM32的BMP图片切换系统的硬件电路和软件程序的设计,实现了一个能在内存有限的片上系统中进行BMP图片切换的系统。
关键词:BMP图片;SD卡;ARM微控制器;STM32;片上系统第一章绪论1.1本课题设计的背景随着国民经济的起飞,现代社会的不断进步,广告的在新时期又有了新的发展。
进入新世纪LCD显示屏的技术和产业都取得了长足的发展,作为重要的现代信息发布媒体之一,LCD显示屏在证券交易、金融、交通、体育、广告等领域被广泛的应用。
0.96寸OLED显示屏使用手册一、OLED简介OLED,即有机发光二极管(Organic Light Emitting Diode)。
OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
LCD 都需要背光,而OLED不需要,因为它是自发光的。
这样同样的显示OLED效果要来得好一些。
以目前的技术,OLED 的尺寸还难以大型化,但是分辨率确可以做到很高。
在此我们使用的是0.96寸OLED显示屏,该屏有以下特点:1)0.96寸OLED有黄蓝,白,蓝三种颜色可选;其中黄蓝是屏上1/4部分为黄光,下3/4为蓝;而且是固定区域显示固定颜色,颜色和显示区域均不能修改;白光则为纯白,也就是黑底白字;蓝色则为纯蓝,也就是黑底蓝字。
2)分辨率为128*643)多种接口方式;OLED裸屏总共种接口包括:6800、8080 两种并行接口方式、3线或4 线的串行SPI 接口方式、IIC 接口方式(只需要 2 根线就可以控制OLED 了!),这五种接口是通过屏上的BS0~BS2来配置的。
4)本屏开发了两种接口的Demo板,接口分别为七针的SPI/IIC兼容模块,四针的IIC模块。
两种模块都很方便使用;希望大家根据实际需求来选择不同的模块。
二、产品特点2.10.96寸OLED裸屏外观裸屏为30pin,从屏正面看左下角为1,右下角为30;在设计的时候一定要注意不要搞反了。
具体的接口定义请大家查看0.96寸OLED官方数据手册;里面有详细介绍。
2.2 0.96寸OLED模块2.2.1 SPI/IIC接口模块模块接口定义:1.GND 电源地2.VCC 电源正(3~5.5V)3.D0 OLED的D0脚,在SPI和IIC通信中为时钟管脚4.D1 OLED的D1脚,在SPI和IIC通信中为数据管脚5.RES OLED的RES#脚,用来复位(低电平复位)6.DC OLED的D/C#E脚,数据和命令控制管脚7.CS OLED的CS#脚,也就是片选管脚2.2.2 IIC接口模块1.GND 电源地2.VCC 电源正(3~5.5V)3.SCL OLED的D0脚,在IIC通信中为时钟管脚4.SDA OLED的D1脚,在IIC通信中为数据管脚2.3 0.96寸OLED驱动IC本屏所用的驱动IC为SSD1306;其具有内部升压功能;所以在设计的时候不需要再专一设计升压电路;当然了本屏也可以选用外部升压,具体的请详查数据手册。
6800系统监控接口通信协议1. 范围本通信协议适用范围是指CSU与监控PC间之通信协议。
2. 依据本通信协议是依据中国电信总局1999年3月「通信局(站)电源、空调及环境集中监控管理系统前端智能设备通信协议」之「开关电源系统通信协议」订定。
3. 定义与符号3.1监控模块– SM(Supervision Module)设备监控模块,此即CSU(Chroma 6802、Chroma 6803)。
3.2监控单元– SU(Supervision Unit)指局站监控计算机(PC)。
4. 监控内容6800系统是属于整流配电设备监控内容可分为三部份:交流屏(交流配电单元)、整流器、直流屏(直流配电单元)。
4.1交流屏(交流配电单元)遥测:三相输入电压、三相输入电流。
遥信:三相输入过压/欠压,缺相,开关状态。
4.2整流器遥测:整流器输出电压每个整流模块输出电流。
遥信:每个整流模块工作状态(开/关机、均/浮充、限流),故障/正常。
遥控:开/关机,均/浮充。
4.3直流屏(直流配电单元)遥测:直流输出电压、总负载电流、蓄电池充/放电电流。
遥信:直流输出电压过/压欠压、蓄电池熔丝状态、主要分路熔丝/开关故障。
5. 物理接口5.1. 串行通信口– RS-232或RS-485。
5.2. 传送信息方式–起始位1位、数据位8位、停止位1位、无同位校验。
5.3. 数据传输速率为9600 bps6. 通信方式局站内的监控单元(SU)与设备监控模块(SM)的通信为主从方式,监控单元为上位机,监控模块为下位机。
SU呼叫SM并下发命令,SM收到命令后需在500ms内返回响应讯息。
设备监控模块通过MODEM拨号方式直接与监控中心相连时,通信方式同上,发生紧急告警,设备监控模块应有主动拨号上报功能。
7. 信息类型及协议的基本格式7.1. 信息类型信息分两种类型:(1)由SU发出到SM的命令信息(简称命令信息)。
(2)由SM发出到SU的响应信息(简称响应信息)。
常见液晶驱动控制芯片详解前言因此各位朋友在选择LCD液晶模块的时候,在考虑到串行,还是并行的方式时,可根据其驱动控制IC的型号来判别,当然你还需要看你选择的LCD模块引脚定义是固定支持并行,还是可选择并行或串行的方式。
一、字符型LCD驱动控制IC市场上通用的8×1、8×2、16×1、16X2、16X4、20X2、20X4、40X4等字符型LCD,基本上都采用的KS0066 作为LCD 的驱动控制器。
二、图形点阵型LCD驱动控制IC2.1、点阵数122X32—SED1520。
2.2、点阵数128×64。
(1)RA8816,支持串行或并行数据操作方式,内置中文汉字字库。
(2)KS0108/RA8808,只支持并行数据操作方式,也是最通用的12864点阵液晶的驱动控制IC。
(3)ST7565,支持中行或并行数据操作方式。
(4)S6B0724,支持中行或并行数据操作方式。
(5)RA6963,支持并行数据操作方式。
2.3、其他点阵数如192×64、240×64、320X64、240X128 的一般都是采用RA6963驱动控制芯片。
2.4、点阵数320X240,通用的采用RA8835 内置ASCII字库,以及RA8806驱动IC内置ASCII和中文等字库。
这里列举的只是一些常用的,当然还有其他LCD 驱动控制IC,在写LCD 驱动时要清楚是哪个型号的IC,再到网上去寻找对应的IC 数据手册吧。
后面我将慢慢补上其它一些常见的。
三、12864 液晶的奥秘CD1601/1602和LCD12864 都是通常使用的液晶,有人以为12864是一个统一的编号,主要是12864 的液晶驱动都是一样的,其实12864只是表示液晶的点阵是128*64点阵,而实际的12864 有带字库的,也有不带字库的:有5V电压的,也有3.3V工作电压:归根到底的区别在于驱动控制芯片,常用的控制芯片有RA8816、KS0108/RA8808、RA6963等等。
86电子技术Electronic Technology电子技术与软件工程Electronic Technology & Software Engineering●基金项目:2018年度黑龙江省教育厅高等教育教学改革研究项目《基于“专创融合”的通信类创新创业教育改革研究与实践 》,项目编号:(SJGZ20180020)。
RS485通信标准自从上世纪80年代以来,以其传输距离远、抗干扰能力强、布线成本低等优点,在工业控制领域中得到了广泛应用[1]。
工业领域中的PLC 、变频器、电能表等设备大多采用RS485通信标准,为了方便用户实时监测这些设备的状态信息,设计了一种RS485通信标准的显示屏,可以读取工控设备的状态信息并实时显示到显示屏上,在工控领域有着广阔的应用空间。
1 系统硬件设计系统硬件组成框图如图1所示。
如图1所示,工控设备通过RS485接口把数据传输至MCU ,MCU 将数据解包后,得到需要显示的数据,如果数据中包含文字则会从字库芯片中查找字模,最后将数据显示到12864液晶屏上[2]。
1.1 MAX3485通信芯片MAX3485是MAXIM 公司生产的一款3.3V 供电的RS485电平收发芯片,静态电流仅300uA ,最高可达到2.5Mbps 传输速度,使用广泛。
MAX3485应用电路如图2所示。
MAX3485的2脚和3脚是使能管脚,低电平为接收状态,高电平为发送状态,因此2脚和3脚可以短接,仅需MCU 一个IO 口即可控制。
1.2 STC12LE5A60S2单片机芯片STC12LE5A60S2是STC 公司生产的一款3.3V 供电的单时钟/机器周期(1T )的MCU 芯片,指令集和管脚兼容传统8051单片机(如图3所示),速度比传统51单片机快6~12倍,在工业控制,强干扰场合比较适用。
本系统运行中涉及到字库读取、字模运算等操作,对MCU 运算性能要求高,因此速度快性能强的STC12LE5A60S2是系统正常工作的保障。
LCD的接口简介(8080模式)
整理人:雨山2013-01-10
一般的lcd简介当中都会出现这么几个词,lcd的接口为16位的80并口,那么什么是16位的80并口呢?
其实,80并口全称为8080并口协议是有因特尔公司提出的,除8080接口协议外还有摩托罗拉的6800接口协议,其不同在于控制器,如下
8080是通过“读使能(RE)”和“写使能(WE)”两条控制线进行读写操作6800是通过“总使能(E)”和“读写选择(W/R)”两条控制线进行
很多MCU或者LCD模块外部接口一般采用并行方式,并行接口接口线的读写时序常见以下两种模式:
(1)8080模式。
这类模式通常有下列接口信号:
/RES(复位线),DB0~DB7(双向数据线),D/I(数据/指令选择线,1:数据读写,0:命令读写),CS(片选信号线,如果有多片组合,可有多条片选信号线),/WR(MPU 向LCD写入数据控制线),/RD(MPU从LCD读入数据控制线);
(2)6800模式。
在这种模式下,/RES、DB0~DB7、D/I的功能同模式(1),其他信号线为:R/W读写控制(1:MPU读, 0:MPU写)。
E,允许信号(多片组合时,可有多条允许信号线)。
M68是摩托罗拉的标准接口,I80是英特尔的标准接口。
0.96寸OLED显示屏介绍0.96 寸OLED 显示屏使用方法(以中景园电子的0.96 寸OLED 显示屏为例)0.96寸OLED显示屏实物图七针SPI/IIC 0.96寸OLED显示屏使用方法:七针SPI/IIC 0.96寸OLED显示屏共有七个管脚,1~7 分别为GDN、VCC、D0、D1、RES、DC、CS。
此模块支持四线SPI、三线SPI、IIC 接口。
0.96寸OLED显示屏裸屏是支持五种不同接口的,除了前面的三种还有6800、8080 并口方式;由于这两种接口占用数据线比较多;而且不太常用,所以模块在设计的时候没有引出来。
模块的通信接口是通过BS0,BS1,BS2三个管脚来配置的。
在SPI 接口中,R1,R2,R8 三个电阻是不焊接的。
在IIC 接口中,需要将R3换到R1上,R8 可以焊接也可不焊接。
七针SPI/IIC 0.96寸OLED显示屏正面丝印如下,如果想用IIC接口,在IIC接口中需要将RES接高电平,可以与VCC对接,使OLED复位脚一直操持高电平,也就是不复位的状态;同时需要将DC,CS 接电源地;IIC 通信中只需要GND ,VCC,D0(时钟信号),D1(数据信号)四根线。
如果感觉比较麻烦;也可以直接选用四针的IIC接口的0.96寸OLED显示屏。
四针IIC接口相对比较简单一些,只有两个信号线。
1、GND:电源地。
2、VCC:电源正(3~5.5V)。
3、SCL:OLED 的D0 脚,在IIC 通信中为时钟管脚。
4、SDA:OLED 的D1 脚,在IIC 通信中为数据管脚。
0.96 寸OLED显示屏例程:/****************0.96英寸OLED显示信息***************** 处理器:STM32F103C8T6程序功能:开发板上电后在oled液晶屏中显示一些提示信息。
*****************************************************/ #include "sys.h"#include "stdlib.h"#define OLED_RST_Clr() PCout(13)=0 //RST#define OLED_RST_Set() PCout(13)=1 //RST#define OLED_RS_Clr() PBout(4)=0 //DC#define OLED_RS_Set() PBout(4)=1 //DC#define OLED_SCLK_Clr() PCout(15)=0 //SCL#define OLED_SCLK_Set() PCout(15)=1 //SCL#define OLED_SDIN_Clr() PCout(14)=0 //SDA#define OLED_SDIN_Set() PCout(14)=1 //SDA#define OLED_CMD 0 //写命令#define OLED_DATA 1 //写数据void delay_init(u8 SYSCLK);void delay_ms(u16 nms);void delay_us(u32 nus);void OLED_WR_Byte(u8 dat,u8 cmd);void OLED_Display_On(void);void OLED_Display_Off(void);void OLED_Refresh_Gram(void);void Oled_Init(void);void OLED_Clear(void);void OLED_DrawPoint(u8 x,u8 y,u8 t);void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode); void OLED_ShowNumber(u8 x,u8 y,u32 num,u8 len,u8 size); void OLED_ShowString(u8 x,u8 y,const u8 *p);void Oled_Show(void);u8 OLED_GRAM[128][8];const unsigned char oled_asc2_1206[95][12]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ {0x00,0x00,0x00,0x00,0x3F,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/ {0x00,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x40,0x00,0x00,0x00},/*""",2*/ {0x09,0x00,0x0B,0xC0,0x3D,0x00,0x0B,0xC0,0x3D,0x00,0x09,0x00},/*"#",3*/ {0x18,0xC0,0x24,0x40,0x7F,0xE0,0x22,0x40,0x31,0x80,0x00,0x00},/*"$",4*/ {0x18,0x00,0x24,0xC0,0x1B,0x00,0x0D,0x80,0x32,0x40,0x01,0x80},/*"%",5*/ {0x03,0x80,0x1C,0x40,0x27,0x40,0x1C,0x80,0x07,0x40,0x00,0x40},/*"&",6*/ {0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x20,0x40,0x40,0x20},/*"(",8*/ {0x00,0x00,0x40,0x20,0x20,0x40,0x1F,0x80,0x00,0x00,0x00,0x00},/*")",9*/ {0x09,0x00,0x06,0x00,0x1F,0x80,0x06,0x00,0x09,0x00,0x00,0x00},/*"*",10*/ {0x04,0x00,0x04,0x00,0x3F,0x80,0x04,0x00,0x04,0x00,0x00,0x00},/*"+",11*/ {0x00,0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/ {0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00},/*"-",13*/ {0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/ {0x00,0x20,0x01,0xC0,0x06,0x00,0x38,0x00,0x40,0x00,0x00,0x00},/*"/",15*/ {0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"0",16*/ {0x00,0x00,0x10,0x40,0x3F,0xC0,0x00,0x40,0x00,0x00,0x00,0x00},/*"1",17*/ {0x18,0xC0,0x21,0x40,0x22,0x40,0x24,0x40,0x18,0x40,0x00,0x00},/*"2",18*/ {0x10,0x80,0x20,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"3",19*/ {0x02,0x00,0x0D,0x00,0x11,0x00,0x3F,0xC0,0x01,0x40,0x00,0x00},/*"4",20*/ {0x3C,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x23,0x80,0x00,0x00},/*"5",21*/ {0x1F,0x80,0x24,0x40,0x24,0x40,0x34,0x40,0x03,0x80,0x00,0x00},/*"6",22*/ {0x30,0x00,0x20,0x00,0x27,0xC0,0x38,0x00,0x20,0x00,0x00,0x00},/*"7",23*/ {0x1B,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"8",24*/ {0x1C,0x00,0x22,0xC0,0x22,0x40,0x22,0x40,0x1F,0x80,0x00,0x00},/*"9",25*/ {0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/ {0x00,0x00,0x00,0x00,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/ {0x00,0x00,0x04,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0x40,0x40},/*"<",28*/ {0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x00,0x00},/*"=",29*/ {0x00,0x00,0x40,0x40,0x20,0x80,0x11,0x00,0x0A,0x00,0x04,0x00},/*">",30*/ {0x18,0x00,0x20,0x00,0x23,0x40,0x24,0x00,0x18,0x00,0x00,0x00},/*"?",31*/ {0x1F,0x80,0x20,0x40,0x27,0x40,0x29,0x40,0x1F,0x40,0x00,0x00},/*"@",32*/ {0x00,0x40,0x07,0xC0,0x39,0x00,0x0F,0x00,0x01,0xC0,0x00,0x40},/*"A",33*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"B",34*/ {0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x30,0x80,0x00,0x00},/*"C",35*/ {0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"D",36*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x40,0x30,0xC0,0x00,0x00},/*"E",37*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x00,0x30,0x00,0x00,0x00},/*"F",38*/ {0x0F,0x00,0x10,0x80,0x20,0x40,0x22,0x40,0x33,0x80,0x02,0x00},/*"G",39*/ {0x20,0x40,0x3F,0xC0,0x04,0x00,0x04,0x00,0x3F,0xC0,0x20,0x40},/*"H",40*/ {0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x00,0x00},/*"I",41*/ {0x00,0x60,0x20,0x20,0x20,0x20,0x3F,0xC0,0x20,0x00,0x20,0x00},/*"J",42*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x0B,0x00,0x30,0xC0,0x20,0x40},/*"K",43*/{0x20,0x40,0x3F,0xC0,0x20,0x40,0x00,0x40,0x00,0x40,0x00,0xC0},/*"L",44*/ {0x3F,0xC0,0x3C,0x00,0x03,0xC0,0x3C,0x00,0x3F,0xC0,0x00,0x00},/*"M",45*/ {0x20,0x40,0x3F,0xC0,0x0C,0x40,0x23,0x00,0x3F,0xC0,0x20,0x00},/*"N",46*/ {0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"O",47*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x00,0x18,0x00,0x00,0x00},/*"P",48*/ {0x1F,0x80,0x21,0x40,0x21,0x40,0x20,0xE0,0x1F,0xA0,0x00,0x00},/*"Q",49*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x26,0x00,0x19,0xC0,0x00,0x40},/*"R",50*/ {0x18,0xC0,0x24,0x40,0x24,0x40,0x22,0x40,0x31,0x80,0x00,0x00},/*"S",51*/ {0x30,0x00,0x20,0x40,0x3F,0xC0,0x20,0x40,0x30,0x00,0x00,0x00},/*"T",52*/ {0x20,0x00,0x3F,0x80,0x00,0x40,0x00,0x40,0x3F,0x80,0x20,0x00},/*"U",53*/ {0x20,0x00,0x3E,0x00,0x01,0xC0,0x07,0x00,0x38,0x00,0x20,0x00},/*"V",54*/ {0x38,0x00,0x07,0xC0,0x3C,0x00,0x07,0xC0,0x38,0x00,0x00,0x00},/*"W",55*/ {0x20,0x40,0x39,0xC0,0x06,0x00,0x39,0xC0,0x20,0x40,0x00,0x00},/*"X",56*/ {0x20,0x00,0x38,0x40,0x07,0xC0,0x38,0x40,0x20,0x00,0x00,0x00},/*"Y",57*/ {0x30,0x40,0x21,0xC0,0x26,0x40,0x38,0x40,0x20,0xC0,0x00,0x00},/*"Z",58*/ {0x00,0x00,0x00,0x00,0x7F,0xE0,0x40,0x20,0x40,0x20,0x00,0x00},/*"[",59*/ {0x00,0x00,0x70,0x00,0x0C,0x00,0x03,0x80,0x00,0x40,0x00,0x00},/*"\",60*/ {0x00,0x00,0x40,0x20,0x40,0x20,0x7F,0xE0,0x00,0x00,0x00,0x00},/*"]",61*/ {0x00,0x00,0x20,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ {0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10},/*"_",63*/ {0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ {0x00,0x00,0x02,0x80,0x05,0x40,0x05,0x40,0x03,0xC0,0x00,0x40},/*"a",65*/ {0x20,0x00,0x3F,0xC0,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00},/*"b",66*/ {0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x06,0x40,0x00,0x00},/*"c",67*/ {0x00,0x00,0x03,0x80,0x04,0x40,0x24,0x40,0x3F,0xC0,0x00,0x40},/*"d",68*/ {0x00,0x00,0x03,0x80,0x05,0x40,0x05,0x40,0x03,0x40,0x00,0x00},/*"e",69*/ {0x00,0x00,0x04,0x40,0x1F,0xC0,0x24,0x40,0x24,0x40,0x20,0x00},/*"f",70*/ {0x00,0x00,0x02,0xE0,0x05,0x50,0x05,0x50,0x06,0x50,0x04,0x20},/*"g",71*/ {0x20,0x40,0x3F,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40},/*"h",72*/ {0x00,0x00,0x04,0x40,0x27,0xC0,0x00,0x40,0x00,0x00,0x00,0x00},/*"i",73*/ {0x00,0x10,0x00,0x10,0x04,0x10,0x27,0xE0,0x00,0x00,0x00,0x00},/*"j",74*/ {0x20,0x40,0x3F,0xC0,0x01,0x40,0x07,0x00,0x04,0xC0,0x04,0x40},/*"k",75*/ {0x20,0x40,0x20,0x40,0x3F,0xC0,0x00,0x40,0x00,0x40,0x00,0x00},/*"l",76*/ {0x07,0xC0,0x04,0x00,0x07,0xC0,0x04,0x00,0x03,0xC0,0x00,0x00},/*"m",77*/ {0x04,0x40,0x07,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40},/*"n",78*/ {0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00},/*"o",79*/ {0x04,0x10,0x07,0xF0,0x04,0x50,0x04,0x40,0x03,0x80,0x00,0x00},/*"p",80*/ {0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x50,0x07,0xF0,0x00,0x10},/*"q",81*/ {0x04,0x40,0x07,0xC0,0x02,0x40,0x04,0x00,0x04,0x00,0x00,0x00},/*"r",82*/ {0x00,0x00,0x06,0x40,0x05,0x40,0x05,0x40,0x04,0xC0,0x00,0x00},/*"s",83*/ {0x00,0x00,0x04,0x00,0x1F,0x80,0x04,0x40,0x00,0x40,0x00,0x00},/*"t",84*/ {0x04,0x00,0x07,0x80,0x00,0x40,0x04,0x40,0x07,0xC0,0x00,0x40},/*"u",85*/ {0x04,0x00,0x07,0x00,0x04,0xC0,0x01,0x80,0x06,0x00,0x04,0x00},/*"v",86*/ {0x06,0x00,0x01,0xC0,0x07,0x00,0x01,0xC0,0x06,0x00,0x00,0x00},/*"w",87*/{0x04,0x40,0x06,0xC0,0x01,0x00,0x06,0xC0,0x04,0x40,0x00,0x00},/*"x",88*/{0x04,0x10,0x07,0x10,0x04,0xE0,0x01,0x80,0x06,0x00,0x04,0x00},/*"y",89*/{0x00,0x00,0x04,0x40,0x05,0xC0,0x06,0x40,0x04,0x40,0x00,0x00},/*"z",90*/{0x00,0x00,0x00,0x00,0x04,0x00,0x7B,0xE0,0x40,0x20,0x00,0x00},/*"{",91*/{0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00},/*"|",92*/{0x00,0x00,0x40,0x20,0x7B,0xE0,0x04,0x00,0x00,0x00,0x00,0x00},/*"}",93*/{0x40,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x40,0x00},/*"~",94*/};const unsigned char oled_asc2_1608[95][16]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/ {0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00},/*""",2*/ {0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x00,0x00},/*"#",3*/ {0x00,0x00,0x0E,0x18,0x11,0x04,0x3F,0xFF,0x10,0x84,0x0C,0x78,0x00,0x00,0x00,0x00},/*"$",4*/ {0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00},/*"%",5*/ {0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08},/*"&",6*/ {0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00},/*"(",8*/ {0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/ {0x02,0x40,0x02,0x40,0x01,0x80,0x0F,0xF0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00},/*"*",10*/ {0x00,0x80,0x00,0x80,0x00,0x80,0x0F,0xF8,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00},/*"+",11*/ {0x00,0x01,0x00,0x0D,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/ {0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80},/*"-",13*/ {0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/ {0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00},/*"/",15*/ {0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"0",16*/ {0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"1",17*/ {0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00},/*"2",18*/ {0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00},/*"3",19*/ {0x00,0x00,0x00,0xE0,0x03,0x20,0x04,0x24,0x08,0x24,0x1F,0xFC,0x00,0x24,0x00,0x00},/*"4",20*/ {0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00},/*"5",21*/ {0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88,0x00,0x70,0x00,0x00},/*"6",22*/ {0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00,0x10,0x00,0x00,0x00},/*"7",23*/ {0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00},/*"8",24*/ {0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88,0x07,0xF0,0x00,0x00},/*"9",25*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/ {0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/ {0x00,0x00,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x10,0x08,0x08,0x10,0x04,0x00,0x00},/*"<",28*/ {0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x00,0x00},/*"=",29*/ {0x00,0x00,0x10,0x04,0x08,0x08,0x04,0x10,0x02,0x20,0x01,0x40,0x00,0x80,0x00,0x00},/*">",30*/ {0x00,0x00,0x0E,0x00,0x12,0x00,0x10,0x0C,0x10,0x6C,0x10,0x80,0x0F,0x00,0x00,0x00},/*"?",31*/ {0x03,0xE0,0x0C,0x18,0x13,0xE4,0x14,0x24,0x17,0xC4,0x08,0x28,0x07,0xD0,0x00,0x00},/*"@",32*/ {0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,0x07,0x40,0x00,0xE4,0x00,0x1C,0x00,0x04},/*"A",33*/ {0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x11,0x04,0x0E,0x88,0x00,0x70,0x00,0x00},/*"B",34*/{0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"D",36*/ {0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x17,0xC4,0x10,0x04,0x08,0x18,0x00,0x00},/*"E",37*/ {0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x17,0xC0,0x10,0x00,0x08,0x00,0x00,0x00},/*"F",38*/ {0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x44,0x1C,0x78,0x00,0x40,0x00,0x00},/*"G",39*/ {0x10,0x04,0x1F,0xFC,0x10,0x84,0x00,0x80,0x00,0x80,0x10,0x84,0x1F,0xFC,0x10,0x04},/*"H",40*/ {0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x00,0x00,0x00,0x00},/*"I",41*/ {0x00,0x03,0x00,0x01,0x10,0x01,0x10,0x01,0x1F,0xFE,0x10,0x00,0x10,0x00,0x00,0x00},/*"J",42*/ {0x10,0x04,0x1F,0xFC,0x11,0x04,0x03,0x80,0x14,0x64,0x18,0x1C,0x10,0x04,0x00,0x00},/*"K",43*/ {0x10,0x04,0x1F,0xFC,0x10,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x0C,0x00,0x00},/*"L",44*/ {0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC,0x10,0x04,0x00,0x00},/*"M",45*/ {0x10,0x04,0x1F,0xFC,0x0C,0x04,0x03,0x00,0x00,0xE0,0x10,0x18,0x1F,0xFC,0x10,0x00},/*"N",46*/ {0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"O",47*/ {0x10,0x04,0x1F,0xFC,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80,0x0F,0x00,0x00,0x00},/*"P",48*/ {0x07,0xF0,0x08,0x18,0x10,0x24,0x10,0x24,0x10,0x1C,0x08,0x0A,0x07,0xF2,0x00,0x00},/*"Q",49*/ {0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x11,0xC0,0x11,0x30,0x0E,0x0C,0x00,0x04},/*"R",50*/ {0x00,0x00,0x0E,0x1C,0x11,0x04,0x10,0x84,0x10,0x84,0x10,0x44,0x1C,0x38,0x00,0x00},/*"S",51*/ {0x18,0x00,0x10,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x00,0x18,0x00,0x00,0x00},/*"T",52*/ {0x10,0x00,0x1F,0xF8,0x10,0x04,0x00,0x04,0x00,0x04,0x10,0x04,0x1F,0xF8,0x10,0x00},/*"U",53*/ {0x10,0x00,0x1E,0x00,0x11,0xE0,0x00,0x1C,0x00,0x70,0x13,0x80,0x1C,0x00,0x10,0x00},/*"V",54*/ {0x1F,0xC0,0x10,0x3C,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x10,0x3C,0x1F,0xC0,0x00,0x00},/*"W",55*/ {0x10,0x04,0x18,0x0C,0x16,0x34,0x01,0xC0,0x01,0xC0,0x16,0x34,0x18,0x0C,0x10,0x04},/*"X",56*/ {0x10,0x00,0x1C,0x00,0x13,0x04,0x00,0xFC,0x13,0x04,0x1C,0x00,0x10,0x00,0x00,0x00},/*"Y",57*/ {0x08,0x04,0x10,0x1C,0x10,0x64,0x10,0x84,0x13,0x04,0x1C,0x04,0x10,0x18,0x00,0x00},/*"Z",58*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x40,0x02,0x40,0x02,0x40,0x02,0x00,0x00},/*"[",59*/ {0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x80,0x00,0x60,0x00,0x1C,0x00,0x03,0x00,0x00},/*"\",60*/ {0x00,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00},/*"]",61*/ {0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00},/*"^",62*/ {0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01},/*"_",63*/ {0x00,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ {0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xFC,0x00,0x04},/*"a",65*/ {0x10,0x00,0x1F,0xFC,0x00,0x88,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*"b",66*/ {0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x00},/*"c",67*/ {0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x11,0x08,0x1F,0xFC,0x00,0x04},/*"d",68*/ {0x00,0x00,0x00,0xF8,0x01,0x44,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xC8,0x00,0x00},/*"e",69*/ {0x00,0x00,0x01,0x04,0x01,0x04,0x0F,0xFC,0x11,0x04,0x11,0x04,0x11,0x00,0x18,0x00},/*"f",70*/ {0x00,0x00,0x00,0xD6,0x01,0x29,0x01,0x29,0x01,0x29,0x01,0xC9,0x01,0x06,0x00,0x00},/*"g",71*/ {0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04},/*"h",72*/ {0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"i",73*/ {0x00,0x00,0x00,0x03,0x00,0x01,0x01,0x01,0x19,0x01,0x19,0xFE,0x00,0x00,0x00,0x00},/*"j",74*/ {0x10,0x04,0x1F,0xFC,0x00,0x24,0x00,0x40,0x01,0xB4,0x01,0x0C,0x01,0x04,0x00,0x00},/*"k",75*/ {0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"l",76*/ {0x01,0x04,0x01,0xFC,0x01,0x04,0x01,0x00,0x01,0xFC,0x01,0x04,0x01,0x00,0x00,0xFC},/*"m",77*/ {0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04},/*"n",78*/{0x01,0x01,0x01,0xFF,0x00,0x85,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*"p",80*/ {0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x05,0x01,0xFF,0x00,0x01},/*"q",81*/ {0x01,0x04,0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x04,0x01,0x00,0x01,0x80,0x00,0x00},/*"r",82*/ {0x00,0x00,0x00,0xCC,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x98,0x00,0x00},/*"s",83*/ {0x00,0x00,0x01,0x00,0x01,0x00,0x07,0xF8,0x01,0x04,0x01,0x04,0x00,0x00,0x00,0x00},/*"t",84*/ {0x01,0x00,0x01,0xF8,0x00,0x04,0x00,0x04,0x00,0x04,0x01,0x08,0x01,0xFC,0x00,0x04},/*"u",85*/ {0x01,0x00,0x01,0x80,0x01,0x70,0x00,0x0C,0x00,0x10,0x01,0x60,0x01,0x80,0x01,0x00},/*"v",86*/ {0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00},/*"w",87*/ {0x00,0x00,0x01,0x04,0x01,0x8C,0x00,0x74,0x01,0x70,0x01,0x8C,0x01,0x04,0x00,0x00},/*"x",88*/ {0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0E,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00},/*"y",89*/ {0x00,0x00,0x01,0x84,0x01,0x0C,0x01,0x34,0x01,0x44,0x01,0x84,0x01,0x0C,0x00,0x00},/*"z",90*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x3E,0xFC,0x40,0x02,0x40,0x02},/*"{",91*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00},/*"|",92*/ {0x00,0x00,0x40,0x02,0x40,0x02,0x3E,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/ {0x00,0x00,0x60,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,0x00},/*"~",94*/ };static u8 fac_us=0; //us延时倍乘数static u16 fac_ms=0; //ms延时倍乘数void delay_init(u8 SYSCLK){SysTick->CTRL&=0xfffffffb; //bit2清空,选择外部时钟 HCLK/8fac_us=SYSCLK/8;fac_ms=(u16)fac_us*1000;}void delay_ms(u16 nms){u32 temp;SysTick->LOAD=(u32)nms*fac_ms; //时间加载(SysTick->LOAD为24bit)SysTick->VAL =0x00; //清空计数器SysTick->CTRL=0x01 ; //开始倒数do{temp=SysTick->CTRL;}while(temp&0x01&&!(temp&(1<<16))); //等待时间到达SysTick->CTRL=0x00; //关闭计数器SysTick->VAL =0X00; //清空计数器}void delay_us(u32 nus){u32 temp;SysTick->LOAD=nus*fac_us; //时间加载SysTick->VAL=0x00; //清空计数器SysTick->CTRL=0x01 ; //开始倒数do{temp=SysTick->CTRL;}while(temp&0x01&&!(temp&(1<<16))); //等待时间到达SysTick->CTRL=0x00; //关闭计数器SysTick->VAL =0X00; //清空计数器}void OLED_Refresh_Gram(void){u8 i,n;for(i=0;i<8;i++){OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7)OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址 OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址 for(n=0;n<128;n++){OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);}}}void OLED_WR_Byte(u8 dat,u8 cmd){u8 i;if(cmd){OLED_RS_Set();}else{OLED_RS_Clr();}for(i=0;i<8;i++){OLED_SCLK_Clr();if(dat&0x80){OLED_SDIN_Set();}else{OLED_SDIN_Clr();}OLED_SCLK_Set();dat<<=1;}OLED_RS_Set();}void OLED_Display_On(void){OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令OLED_WR_Byte(0X14,OLED_CMD); //DCDC ONOLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON}void OLED_Display_Off(void){OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFFOLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF}void OLED_Clear(void){u8 i,n;for(i=0;i<8;i++)for(n=0;n<128;n++)OLED_GRAM[n][i]=0X00; OLED_Refresh_Gram(); //更新显示}void OLED_DrawPoint(u8 x,u8 y,u8 t){u8 pos,bx,temp=0;if(x>127||y>63)return; //超出范围了.pos=7-y/8;bx=y%8;temp=1<<(7-bx);if(t)OLED_GRAM[x][pos]|=temp;else OLED_GRAM[x][pos]&=~temp;}void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode){u8 temp,t,t1;u8 y0=y;chr=chr-' '; //得到偏移后的值 for(t=0;t<size;t++){if(size==12) //调用1206字体{temp=oled_asc2_1206[chr][t];}else //调用1608字体{temp=oled_asc2_1608[chr][t];}for(t1=0;t1<8;t1++){if(temp&0x80){OLED_DrawPoint(x,y,mode);}else{OLED_DrawPoint(x,y,!mode);}temp<<=1;y++;if((y-y0)==size){y=y0;x++;break;}}}}u32 oled_pow(u8 m,u8 n){u32 result=1;while(n--)result*=m;return result;}void OLED_ShowNumber(u8 x,u8 y,u32 num,u8 len,u8 size) {u8 t,temp;u8 enshow=0;for(t=0;t<len;t++){temp=(num/oled_pow(10,len-t-1))%10;if(enshow==0&&t<(len-1)){if(temp==0){OLED_ShowChar(x+(size/2)*t,y,' ',size,1);continue;} else{enshow=1;}}OLED_ShowChar(x+(size/2)*t,y,temp+'0',size,1);}}void OLED_ShowString(u8 x,u8 y,const u8 *p){#define MAX_CHAR_POSX 122#define MAX_CHAR_POSY 58while(*p!='\0'){if(x>MAX_CHAR_POSX){x=0;y+=16;}if(y>MAX_CHAR_POSY){y=x=0;OLED_Clear();}OLED_ShowChar(x,y,*p,12,1);x+=8;p++;}}void Oled_Init(void){RCC->APB2ENR|=1<<3; //使能PORTB时钟GPIOB->CRL&=0XFFF0FFFF;GPIOB->CRL|=0X00020000; //PB4 推挽输出RCC->APB2ENR|=1<<4; //使能PORTC时钟RCC->APB2ENR|=1<<0; //使能AFIO时钟GPIOC->CRH&=0X000FFFFF; //PC13,14,15设置成输出 2MHz 推挽输出GPIOC->CRH|=0X22200000;PWR->CR|=1<<8; //取消备份区写保护RCC->BDCR&=0xFFFFFFFE; //外部低俗振荡器关闭 PC14,PC15成为普通IOBKP->CR&=0xFFFFFFFE; //侵入检测TAMPER引脚作为通用IO口使用PWR->CR&=0xFFFFFEFF; //备份区写保护OLED_RST_Clr();delay_ms(100);OLED_RST_Set();OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示OLED_WR_Byte(0xD5,OLED_CMD); //设置时钟分频因子,震荡频率OLED_WR_Byte(80,OLED_CMD); //[3:0],分频因子;[7:4],震荡频率OLED_WR_Byte(0xA8,OLED_CMD); //设置驱动路数OLED_WR_Byte(0X3F,OLED_CMD); //默认0X3F(1/64)OLED_WR_Byte(0xD3,OLED_CMD); //设置显示偏移OLED_WR_Byte(0X00,OLED_CMD); //默认为0OLED_WR_Byte(0x40,OLED_CMD); //设置显示开始行 [5:0],行数.OLED_WR_Byte(0x8D,OLED_CMD); //电荷泵设置OLED_WR_Byte(0x14,OLED_CMD); //bit2,开启/关闭OLED_WR_Byte(0x20,OLED_CMD); //设置内存地址模式OLED_WR_Byte(0x02,OLED_CMD); //[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;OLED_WR_Byte(0xA1,OLED_CMD); //段重定义设置,bit0:0,0->0;1,0->127;OLED_WR_Byte(0xC0,OLED_CMD); //设置COM扫描方向;bit3:0,普通模式;1,重定义模式 COM[N-1]->COM0;N:驱动路数OLED_WR_Byte(0xDA,OLED_CMD); //设置COM硬件引脚配置OLED_WR_Byte(0x12,OLED_CMD); //[5:4]配置OLED_WR_Byte(0x81,OLED_CMD); //对比度设置OLED_WR_Byte(0xEF,OLED_CMD); //1~255;默认0X7F (亮度设置,越大越亮)OLED_WR_Byte(0xD9,OLED_CMD); //设置预充电周期OLED_WR_Byte(0xf1,OLED_CMD); //[3:0],PHASE 1;[7:4],PHASE 2;OLED_WR_Byte(0xDB,OLED_CMD); //设置VCOMH 电压倍率OLED_WR_Byte(0x30,OLED_CMD); //[6:4]000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;OLED_WR_Byte(0xA4,OLED_CMD); //全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)OLED_WR_Byte(0xA6,OLED_CMD); //设置显示方式;bit0:1,反相显示;0,正常显示OLED_WR_Byte(0xAF,OLED_CMD); //开启显示OLED_Clear();}void Oled_Show(void){OLED_ShowString(0,0,"****************");OLED_ShowString(30,20,"OLED-TEST");OLED_ShowString(5,30,"YOU ARE WELCOME");OLED_ShowString(0,50,"****************");OLED_Refresh_Gram();}int main(void){Stm32_Clock_Init(9); //系统时钟设置delay_init(72); //延时初始化JTAG_Set(JTAG_SWD_DISABLE); //关闭JTAG接口JTAG_Set(SWD_ENABLE); //打开SWD接口Oled_Init();while(1){Oled_Show();}}。
LCD驱动程序开发指南LCD驱动开发指引1、LCD驱动概述LCD驱动程序调试,是整个⼿机研发过程中⾮常重要的⼀个环节,在每个新的机型开发的初期,最先都要调试LCD驱动程序,我们俗称“点屏”。
“点屏”的调试包括两个部分,⼀是点亮LCD的背光,⼆是调试LCD显⽰。
背光驱动调试的⽅法与技巧,会在背光⽂档中叙述,暂不在这篇⽂档⾥讨论,本⽂将重点讨论LCD的电路原理、驱动程序分析、LCD驱动调试经验总结和具体驱动调试案例的分析。
2、LCD原理及电路分析相关概念:LCD:全称是Liquid Crystal Display 液晶显⽰屏LCM:全称是Liquid Crystal Module指的是液晶显术模块,包括液晶屏及液晶的外围FPC电路和结构件。
LCD的FPC电路:指LCM模块中的液晶外围电路,这部分电路由LCD模组⼚家按照我们对LCD的接⼝要求进⾏设计的。
在LCD驱动调试中,看FPC电路图也是很重要的⼀个环节。
LCD外围电路:我们通常也简称为LCD电路,指的是baseband端的LCD接⼝电路部分,这部分电路由我们⾃⾏设计。
LCD模组⼚家:指信利,天马,京东⽅这些⼚家。
他们将LCD制作成可以供我们⽣产使⽤的LCM模组。
2.1LCD芯⽚介绍⽬前⼿机使⽤的⼤部分显⽰器件都是LCD(Liguid Crystal Display)器件,⽬前康佳使⽤的LCM模块由信利、京东⽅、天马、凌达这⼏家⼚商供货。
但是LCM⽣产⼚家对我们调试驱动并没有任何关系,我们需要了解的是LCM所使⽤的IC型号。
因为,我们实际上是对LCD的IC进⾏编程,间接控制LCD⾯板,常⽤的IC有HD66773、S6B33B2/ S6B33B6、HD66777等。
LCD驱动的编程,除了要关注IC的型号,还要关注LCD FPC的电路设计,LCD外围电路设计,基带芯⽚的LCD接⼝单元,背光IC的控制等⼏个⽅⾯,当然也包括软件的上层程序。
下⾯我们就先了解⼀下LCD IC的内部结构,这是编程要关注的最主要⽅⾯。
PC处理器的萌芽时期,MOTOROLA的M6800和INTEL的I8080就成为当时微处理器的杰出代表而在随后几十年间广泛应用于工业及控制领域,不过MOTOROLA的强项不在微处理器设计上,后来又出来的M6800也不能挽回失地,在2004年的时候MOTO剥离其半导体部门成立了freescale(飞思卡尔),它在汽车电子和DSP控制领域还是占有非常大的份额,而消费类电子领域则鲜有建树。
读写的控制,采用不同的方式:
8080是通过“读使能(RE)”和“写使能(WE)”两条控制线进行读写操作
6800是通过“总使能(E)”和“读写选择(W/R)”两条控制线进行
很多MCU或者LCD模块外部接口一般采用并行方式,并行接口接口线的读写时序常见以下两种模式:
(1)8080模式。
这类模式通常有下列接口信号:
/RES(复位线),DB0~DB7(双向数据线),D/I(数据/指令选择线,1:数据读写,0:命令读写),CS(片选信号线,如果有多片组合,可有多条片选信号线),/WR(MPU向LCD写入数据控制线),/RD(MPU从LCD读入数据控制线);
(2)6800模式。
在这种模式下,/RES、DB0~DB7、D/I的功能同模式(1),其他信号线为:R/W读写控制(1:MPU 读, 0:MPU写)。
E,允许信号(多片组合时,可有多条允许信号线)。
M68是摩托罗拉的标准接口,I80是英特尔的标准接口
差别在控制信号!
M6800: /CS, RS, R/(/W), E
I8080: /CS, RS, /WR, /RD。