CC2530之OLED12864程序详解
暂时先贴上程序:(我再整理整理)
#include "code_tab.h"#define LCD_SCL P0_4 // 串行时钟输入
#define LCD_SDA P0_5 // 串行数据输入
#define LCD_RST P0_6 // 复位输入端
#define LCD_DC P0_7 // 数据/命令控制#define XLevelL 0x00
#define XLevelH 0x10
#define XLevel ((XLevelH&0x0F)*16 + XLevelL)
#define Max_Column 132
#define Max_Row 32
#define Brightness 0xCF
#define X_WIDTH 132
#define Y_WIDTH 32#define oledWrDat(val) spiWriteByte(val, 1)
#define oledWrCmd(val) spiWriteByte(val, 0)void delay_ms(uint ms)
{unsigned int a;while(ms){a = 1800;while(a--);ms--;}return;
}/** * OLED SSD1306初始化*/
void lcdInit(void)
{ P0DIR = 0xF0; // 设置相关端口LCD_SCL = 1;LCD_RST = 0;delay_ms(50);LCD_RST = 1; // 从上电到下面开始初始化要有足够的时间,即等待RC复位完毕 oledWrCmd(0xae); // turn off oled paneloledWrCmd(0x00); // set low column addressoledWrCmd(0x10); // set high column addressoledWrCmd(0x40); // set start line address Set Mapping RAM Display Start Line (0x00~0x3F)oledWrCmd(0x81); // set contrast control registeroledWrCmd(0x8f); // Set SEG Output Current BrightnessoledWrCmd(0xa1); // Set SEG/Column Mapping 0xa0左右反置 0xa1正常oledWrCmd(0xc8); // Set COM/Row Scan Direction 0xc0上下反置 0xc8正常oledWrCmd(0xa6); // set normal displayoledWrCmd(0xa8); // set multiplex ratio(1 to 64)oledWrCmd(0x1f); // 1/32 dutyoledWrCmd(0xd3); // set display offset Shift Mapping RAM Counter (0x00~0x3F)oledWrCmd(0x00); // not offsetoledWrCmd(0xd5); // set display clock divide ratio/oscillator frequencyoledWrCmd(0x80); // set divide ratio, Set Clock as 100 Frames/SecoledWrCmd(0xd9); // set pre-charge periodoledWrCmd(0xf1); // Set Pre-Charge as 15 Clocks & Discharge as 1 ClockoledWrCmd(0xda); // set com pins hardware configurationoledWrCmd(0x02);oledWrCmd(0xdb); // set vcomholedWrCmd(0x40); // Set VCOM Deselect LeveloledWrCmd(0x20); // Set Page Addressing Mode (0x00/0x01/0x02)oledWrCmd(0x02); //oledWrCmd(0x8d); // set Charge Pump enable/disableoledWrCmd(0x14); // set(0x10) disableoledWrCmd(0xa4); // Disable Entire Display On (0xa4/0xa5)oledWrCmd(0xa6); // Disable Inverse Display On (0xa6/a7) oledWrCmd(0xaf); // --turn on oled paneloledFill(0x00); //初始清屏oledSetPos(0,0);
} /*** 串行数据总线传输一字节数据* @param[in] byte:传输的数据* @param[in] sel:0-写命令,1-写数据*/
static void spiWriteByte(uchar byte, uchar sel)
{uchar i;LCD_DC = 0; if(sel == 1) LCD_DC = 1; for (i=0; i<8; i++) { // 发送一个八位数据 if((byte << i) & 0x80)LCD_SDA = 1;else LCD_SDA = 0;LCD_SCL = 0;LCD_SCL = 1;}
}/*** 设置显示坐标*/
void oledSetPos(uchar x, uchar y)
{ x += 4;oledWrCmd(0xb0+y);oledWrCmd(((x&0xf0)>>4)|0x10);oledWrCmd((x&0x0f)|0x01);
} /** * 全屏*/
void oledFill(uchar bmp_dat)
{unsigned char y, x;for (y=0; y<8; y++) {oledWrCmd(0xb0+y);oledWrCmd(0x01);oledWrCmd(0x10);for(x=0; x<X_WIDTH; x++)oledWrDat(bmp_dat);}
}/** * 复位清屏*/
void oledClear(void)
{uchar y, x; for (y=0; y<8; y++) {oledWrCmd(0xb0+y);oledWrCmd(0x01);oledWrCmd(0x10); for(x=0; x<X_WIDTH; x++)oledWrDat(0);}
}/*** 描述:显示6*8一组标准ASCII字符串,显示的坐标(x,y),y为页范围0~7*/
void lcdP6x8Str(uchar x, uchar y, uchar ch[])
{unsigned char c=0, i=0, j=0; while (ch[j] != '\0') { c = ch[j]-32;if(x>126) {x=0; y++;}oledSetPos(x,y); for(i=0; i<6; i++) oledWrDat(F6x8[c][i]); x += 6;j++;}
}/*** 描述:显示8*16一组标准ASCII字符串,显示的坐标(x,y),y为页范围0~7*/
void lcdP8x16Str(uchar x, uchar y, uchar ch[])
{unsigned char c=0,i=0,j=0;while (ch[j] != '\0') { c = ch[j]-32;if (x>120) { x = 0; y++; }oledSetPos(x,y); for(i=0;i<8;i++) oledWrDat(F8X16[c*16+i]);oledSetPos(x,y+1); for(i=0; i<8; i++) oledWrDat(F8X16[c*16+i+8]); x+=8;j++;}
}/*** 描述:显示显示BMP图片128×64起始点坐标(x0, y0),x的范围0~127,y为页的范围0~7*/
void lcdDrawBMP(uchar x0, uchar y0, uchar x1, uchar y1, uchar BMP[])
{ uint j=0;uchar x, y;if(y1%8 == 0) y = y1/8; else y = y1/8+1;for (y=y0; y<y1; y++) {oledSetPos(x0,y); for (x=x0; x<x1; x++) { oledWrDat(BMP[j++]); }}
}
CC2530之OLED12864程序详解相关推荐
- 从程序详解拒绝服务***
从程序详解拒绝服务*** 拒绝服务(Denial of Service, DoS)***是最简单的网络***形式之一,它只阻止对服务或资源的访问,而不是试图窃取信息.DoS***有两种常见的形式:使 ...
- 车牌识别与计算机编程,基于MATLAB的车牌识别程序详解.ppt
基于MATLAB的车牌识别程序详解 自定义一个字符函数,用来从车牌区域中提取出7个字符,其中利用切割函数来进行切割. 程序:function [word,result]=getword(d) word ...
- 中断程序_ABB机器人中断程序详解(安川FANUC)
ABB机器人中断程序详解 1.新建一个中断程序 test001,类型中断 TRAP hanmianshadiaoliao StopMove; SetDO DO04, 0; !Stop; StartMo ...
- linux系统设置服务开机启动3种方法,Linux开机启动程序详解
linux系统设置服务开机启动 方法1:.利用ntsysv伪图形进行设置,利用root登陆 终端命令下输入ntsysv 回车:如下图 方法2:利用命令行chkconfig命令进行设置 简要说明一下ch ...
- 非局部相似性 matlab,非局部均值滤波(NLM)和MATLAB程序详解视频教程保持图像细节...
[内容简介]<非局部均值滤波与应用和MATLAB程序详解视频>共6章28节视频,总学时698分钟,合11.6小时.主要内容包括:非局部均值滤波类算法入门,基于滤波参数自适应的非局部均值滤波 ...
- STM32利用SPI读写SD卡的程序详解
STM32利用SPI读写SD卡的一些程序详解 关于SD卡的基础知识这里不做过多陈述,如果有对这方面感兴趣的朋友可以直接百度一下,有很多讲SD卡的文章,这里主要是针对SD卡的读写程序实现做一些详细说明. ...
- Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇
Oracle11g安装教程.配置实例.监听.客户端程序详解_Windows篇 文章目录 Oracle11g安装教程.配置实例.监听.客户端程序详解_Windows篇 前言 一.数据库的安装前准备,前提 ...
- Dede二次开发程序详解(dede爱好者必备)
Dede二次开发程序详解(dede爱好者必备) 调用说明:推荐会员(带用户头像) [quote] {dede:sql sql="SELECT mid,mtype,userid,uname, ...
- 诺基亚5800软件测试初学者,诺基亚5800XM的各个程序详解
<诺基亚5800XM的各个程序详解>由会员分享,可在线阅读,更多相关<诺基亚5800XM的各个程序详解(2页珍藏版)>请在人人文库网上搜索. 1.诺基亚5800XM的各个程序详 ...
- 单片机c语言程序流程图,ds1302时钟程序详解,ds1302程序流程图(C程序)
ds1302时钟程序详解 DS1302 的控制字如图2所示.控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RA ...
最新文章
- Android开发者必备的42个链接
- Mac 技术篇-Oracle数据库连接工具SQL Developer启用、关闭自动提交事务,设置自动commit
- Ubuntu通过windows代理上网
- 掌握 Angular2 的服务 (service)
- 华为2015年实习生招聘考试试题
- 【渝粤教育】国家开放大学2018年春季 0064-22T20世纪欧美文学 参考试题
- 周记随笔-php5.6与apache2.4的windows32安装
- SpringBoot简要
- 用Java开发一个停车场系统
- python爬虫网页图片并保存到本地
- C++ STL 源码剖析之 Traits 编程技法
- web_MDN学习资源导航_js初学者快速入门指南项目/javascript高级程序设计vsMDN javascript教程/指南(official)
- java安装后打开jar文件_java环境变量配置好后双击jar文件无法运行的解决办法
- 用excel产生多组随机抽签数
- 在登陆Fedora 9时选择语言
- stm32有源蜂鸣器程序,高效简洁优雅。
- [摘]研究方法 - 实证研究
- docker-compose 安装常用服务
- c语言程序设计超市会员卡管理系统,C语言程序设计课程设计报告超市水果信息管理系统...
- 2018百度沸点国人年度榜单出炉