CC2530之OLED12864程序详解

CC2530之OLED12864程序详解暂时先贴上程序 我再整理整理 include code tab h defineLCD SCLP0 4 串行时钟输入 defineLCD SDAP0 5 串行数据输入 defineLCD RSTP0 6 复位输入端 defineLCD DCP0 7 数据 命令控制 defineXLevel

暂时先贴上程序:(我再整理整理)

#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 panel oledWrCmd(0x00); // set low column address oledWrCmd(0x10); // set high column address oledWrCmd(0x40); // set start line address Set Mapping RAM Display Start Line (0x00~0x3F) oledWrCmd(0x81); // set contrast control register oledWrCmd(0x8f); // Set SEG Output Current Brightness oledWrCmd(0xa1); // Set SEG/Column Mapping 0xa0左右反置 0xa1正常 oledWrCmd(0xc8); // Set COM/Row Scan Direction 0xc0上下反置 0xc8正常 oledWrCmd(0xa6); // set normal display oledWrCmd(0xa8); // set multiplex ratio(1 to 64) oledWrCmd(0x1f); // 1/32 duty oledWrCmd(0xd3); // set display offset Shift Mapping RAM Counter (0x00~0x3F) oledWrCmd(0x00); // not offset oledWrCmd(0xd5); // set display clock divide ratio/oscillator frequency oledWrCmd(0x80); // set divide ratio, Set Clock as 100 Frames/Sec oledWrCmd(0xd9); // set pre-charge period oledWrCmd(0xf1); // Set Pre-Charge as 15 Clocks & Discharge as 1 Clock oledWrCmd(0xda); // set com pins hardware configuration oledWrCmd(0x02); oledWrCmd(0xdb); // set vcomh oledWrCmd(0x40); // Set VCOM Deselect Level oledWrCmd(0x20); // Set Page Addressing Mode (0x00/0x01/0x02) oledWrCmd(0x02); // oledWrCmd(0x8d); // set Charge Pump enable/disable oledWrCmd(0x14); // set(0x10) disable oledWrCmd(0xa4); // Disable Entire Display On (0xa4/0xa5) oledWrCmd(0xa6); // Disable Inverse Display On (0xa6/a7)  oledWrCmd(0xaf); // --turn on oled panel oledFill(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 
  
    / * 复位清屏 */ 
   void oledClear( 
   void) { uchar y, x; 
   for (y= 
   0; y< 
   8; y++) { oledWrCmd( 
   0xb0+y); oledWrCmd( 
   0x01); oledWrCmd( 
   0x10); 
   for(x= 
   0; x 
   
     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 
    
      for (x=x0; x 
      
     
    
  
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178067.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午6:06
下一篇 2026年3月26日 下午6:06


相关推荐

  • Java JSON解析_javaxml解析

    Java JSON解析_javaxml解析JavaJSON解析教程

    2025年9月2日
    7
  • linux没有lsof命令

    linux没有lsof命令root rootbin lsof i 80 bash lsof commandnotfo 执行下面命令进行安装 yuminstallls 安装过程如图

    2026年3月18日
    0
  • U盘安装window系统[通俗易懂]

    U盘安装window系统[通俗易懂]U盘安装window系统:1.制作系统启动U盘,推荐使用老毛桃。2.电脑上插入U盘,启动系统,选择U盘启动。3.进入老毛桃选择界面,选择生成PE系统。推荐win8,之前在一个戴尔电脑上使用win

    2022年8月1日
    9
  • 关于sql和MySQL的语句执行顺序(必看)「建议收藏」

    关于sql和MySQL的语句执行顺序(必看)「建议收藏」今天遇到一个问题就是mysql中insertinto和update以及delete语句中能使用as别名吗?目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序:sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。一、sql执行顺序(1)from(3)join(2)on(4)where…

    2022年6月21日
    22
  • 解析近期爆发的服务器挖矿病毒原理

    解析近期爆发的服务器挖矿病毒原理事情起因:同事解决服务器中挖矿病毒的过程可以看到,病毒的主要起因是利用了Linux预加载型恶意动态链接库的后门,关于Linux预加载的知识可以参考这一篇文章:警惕利用Linux预加载型恶意动态链接库的后门 一、准备工作我们导出病毒文件 libioset.so,然后利用IDA反编译该so文件,得到如下图的函数列表:可以看到,里面有许多我们熟悉的库函数,例如fope…

    2022年5月2日
    136
  • 阿基里斯追乌龟的思考,空间,时间,速度非连续

    阿基里斯追乌龟的思考,空间,时间,速度非连续高中的时候才接触和了解,诺阿基里斯追乌龟的悖论,一直萦绕在自己的心头。在上大学的时候,学习了微积分,自己以为自己懂了,但是最近又思考的时候,发现大学里的那种想法还是存在着一些矛盾,自己没有意识到。再度思考,将自己的想法记录下来,如果存在问题,还请多多指教。按照积分将追逐的过程映射为无限级数的和,然后极限求解,但是极限本身就是一个无限接近但是不可到达的过程,因此在我看来…

    2022年6月18日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号