zigbee学习之OLED

OLED模块如下:

#include <ioCC2530.h>
#define LCD_SCL P1_2       //SCLK  时钟 D0(SCLK)
#define LCD_SDA P1_3       //SDA   D1(MOSI) 数据
#define LCD_RST P1_7       //_RES  hardware reset   复位 
#define LCD_DC  P0_0       //A0  H/L 命令数据选通端,H:数据,L:命令

#define XLevelL        0x00
#define XLevelH        0x10
#define XLevel         ((XLevelH&0x0F)*16+XLevelL)
#define Max_Column     128
#define Max_Row        64
#define Brightness     0xCF 
#define X_WIDTH        128
#define Y_WIDTH        64

void DelayMS(unsigned int msec)

    unsigned int i,j;
    
    for (i=0; i<msec; i++)
        for (j=0; j<530; j++);
}

/*********************LCD 延时1ms************************************/
void LCD_DLY_ms(unsigned int ms)
{                         
    unsigned int a;
    while(ms)
    {
        a=1800;
        while(a--);
        ms--;
    }
    return;
}
/*********************LCD写数据************************************/ 
void LCD_WrDat(unsigned char dat)     
{
    unsigned char i=8, temp=0;
    LCD_DC=1;  
    for(i=0;i<8;i++) //发送一个八位数据 
    {
        LCD_SCL=0;  
        
        temp = dat&0x80;
        if (temp == 0)
        {
            LCD_SDA = 0;
        }
        else
        {
            LCD_SDA = 1;
        }
        LCD_SCL=1;             
        dat<<=1;    
    }
}
/*********************LCD写命令************************************/                                        
void LCD_WrCmd(unsigned char cmd)
{
    unsigned char i=8, temp=0;
    LCD_DC=0;
    for(i=0;i<8;i++) //发送一个八位数据 
    { 
        LCD_SCL=0; 
       
        temp = cmd&0x80;
        if (temp == 0)
        {
            LCD_SDA = 0;
        }
        else
        {
            LCD_SDA = 1;
        }
        LCD_SCL=1;
        cmd<<=1;;        
    }     
}
/*********************LCD 设置坐标************************************/
void LCD_Set_Pos(unsigned char x, unsigned char y) 

    LCD_WrCmd(0xb0+y);
    LCD_WrCmd(((x&0xf0)>>4)|0x10);
    LCD_WrCmd((x&0x0f)|0x01); 

/*********************LCD全屏************************************/
void LCD_Fill(unsigned char bmp_dat) 
{
    unsigned char y,x;
    for(y=0;y<8;y++)
    {
        LCD_WrCmd(0xb0+y);
        LCD_WrCmd(0x01);
        LCD_WrCmd(0x10);
        for(x=0;x<X_WIDTH;x++)
            LCD_WrDat(bmp_dat);
    }
}
/*********************LCD复位************************************/
void LCD_CLS(void)
{
    unsigned char y,x;    
    for(y=0;y<8;y++)
    {
        LCD_WrCmd(0xb0+y);
        LCD_WrCmd(0x01);
        LCD_WrCmd(0x10); 
        for(x=0;x<X_WIDTH;x++)
            LCD_WrDat(0);
    }
}
/*********************LCD初始化************************************/
void LCD_Init(void)     
{  
    P0SEL &= 0xFE; //让P0.0为普通IO口,
    P0DIR |= 0x01; //让P0.0为为输出

    P1SEL &= 0x73; //让 P1.2 P1.3 P1.7为普通IO口
    P1DIR |= 0x8C; //把 P1.2 P1.3 1.7设置为输出
    
    LCD_SCL=1;
    LCD_RST=0;
    LCD_DLY_ms(50);
    LCD_RST=1;      //从上电到下面开始初始化要有足够的时间,即等待RC复位完毕   
    LCD_WrCmd(0xae);//--turn off oled panel
    LCD_WrCmd(0x00);//---set low column address
    LCD_WrCmd(0x10);//---set high column address
    LCD_WrCmd(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
    LCD_WrCmd(0x81);//--set contrast control register
    LCD_WrCmd(0xcf); // Set SEG Output Current Brightness
    LCD_WrCmd(0xa1);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
    LCD_WrCmd(0xc8);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
    LCD_WrCmd(0xa6);//--set normal display
    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(0xd5);//--set display clock divide ratio/oscillator frequency
    LCD_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
    LCD_WrCmd(0xd9);//--set pre-charge period
    LCD_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
    LCD_WrCmd(0xda);//--set com pins hardware configuration
    LCD_WrCmd(0x12);
    LCD_WrCmd(0xdb);//--set vcomh
    LCD_WrCmd(0x40);//Set VCOM Deselect Level
    LCD_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)
    LCD_WrCmd(0x02);//
    LCD_WrCmd(0x8d);//--set Charge Pump enable/disable
    LCD_WrCmd(0x14);//--set(0x10) disable
    LCD_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)
    LCD_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7) 
    LCD_WrCmd(0xaf);//--turn on oled panel
    LCD_Fill(0xff);  //初始清屏
    LCD_Set_Pos(0,0);     

/***************功能描述:显示6*8一组标准ASCII字符串    显示的坐标(x,y),y为页范围0~7****************/
void LCD_P6x8Str(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++;}
        LCD_Set_Pos(x,y);    
        for(i=0;i<6;i++)     
            LCD_WrDat(F6x8[c][i]);  
        x+=6;
        j++;
    }
}
/*******************功能描述:显示8*16一组标准ASCII字符串     显示的坐标(x,y),y为页范围0~7****************/
void LCD_P8x16Str(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>120){x=0;y++;}
        LCD_Set_Pos(x,y);    
        for(i=0;i<8;i++)     
            LCD_WrDat(F8X16[c*16+i]);
        LCD_Set_Pos(x,y+1);    
        for(i=0;i<8;i++)     
            LCD_WrDat(F8X16[c*16+i+8]);  
        x+=8;
        j++;
    }
}
/*****************功能描述:显示16*16点阵  显示的坐标(x,y),y为页范围0~7****************************/
void LCD_P16x16Ch(unsigned char x, unsigned char y, unsigned char N)
{
    unsigned char wm=0;
    unsigned int adder=32*N;  //      
    LCD_Set_Pos(x , y);
    for(wm = 0;wm < 16;wm++)  //             
    {
        LCD_WrDat(F16x16[adder]);    
        adder += 1;
    }      
    LCD_Set_Pos(x,y + 1); 
    for(wm = 0;wm < 16;wm++) //         
    {
        LCD_WrDat(F16x16[adder]);
        adder += 1;
    }           
}
/***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/
void Draw_BMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
{     
    unsigned int j=0;
    unsigned char x,y;
    
    if(y1%8==0) y=y1/8;      
    else y=y1/8+1;
    for(y=y0;y<y1;y++)
    {
        LCD_Set_Pos(x0,y);                
        for(x=x0;x<x1;x++)
        {      
            LCD_WrDat(BMP[j++]);            
        }
    }

时间: 2024-10-22 09:24:48

zigbee学习之OLED的相关文章

zigbee学习之中断led

从今天开始我就得开始学习zigBee了,一直由于学校有两个创新项目需要我做,二是发现者现在无线传输还是比较有优势的,顺便学习一下,多掌握点技能毕竟不是坏处,学习zigbee的同时我也得继续研究学习Linux驱动,也会写一些相关的文章.下面是我自己的总结,不会给你一行一行的分析代码,我只是把我理解的东西写上来,也是一些重点,加上自己的总结.不喜欢的勿喷,请多多指教,第一天学习zigbee感觉上手还是挺快的,毕竟有51加上stm32的硬件基础. #define LED1 P1_0       //

zigbee学习之串口通信

纠错:U0DBUF发送缓冲区,但是我在中文手册手册上没有找的到这个寄存器,手册上只有U0BUF,U0BUF编译会出错, 我去查了下英文手册,才发现原来是翻译人员翻译错误了,只有U0DBUF,建议看英文手册. 串口通信: P_2 接收端 P_3发送端(单片机和电脑的电频不同,通过PL2303转换,这是针对zigbee模块的 ,想51单片机可以通过232,485来转换). TTL 输出:低电平小于0.8,高电平大于2.4 .TTL 输入:低电平小于1.2,高电平大于2 P_2和P_3可以复用到串口,

zigbee学习之ADC采集芯片内部的温度

这个章节没得什么讲得,用的时候记得调用模块,自己配置一些寄存器. ADC对自身芯片温度的采集: void InitClock(void)//还是原来的味道 {        CLKCONCMD &= ~0x40;              //设置系统时钟源为 32MHZ晶振     while(CLKCONSTA & 0x40);         //等待晶振稳定      CLKCONCMD &= ~0x47;              //设置系统主时钟频率为 32MHZ }

zigbee学习之睡眠定时器

睡眠定时器: void InitSleepTimer(void)  {      ST2 = 0x00; //设置时间     ST1 = 0x00;      ST0 = 0x00;      EA = 1;     //开中断      STIE = 1;   //睡眠定时器中断使能 0: 中断禁止     1: 中断使能     STIF = 0;   //睡眠定时器中断标志 0: 无中断未决   1: 中断未决 } void SysPowerMode(uchar mode) //设置系统

zigbee学习之看门狗定时器

看门狗的理解: 用的是独立的时钟源. void Init_Watchdog(void) //初始化看门狗 { WDCTL = 0x00;       //打开IDLE==0置看门狗 WDCTL |= 0x08;      //看起看门狗模式 WDCTL &= ~0x03;      //1s没有喂狗就发生复位 } void FeetDog(void) //喂狗 {      WDCTL = 0xa0;       //清除定时器.当0xA跟随0x5写到这些位,定时器被清除     WDCTL =

zigbee学习之定时器

以下是我自己的总结,我不会分析代码,代码简单讲起来没有好大意思,主要是抓住核心知识框架. 脉冲:32MHZ就是一秒钟32000000个脉冲 时钟周期:1/f=1/32us 指令周期等于时钟周期(在51中是机械周期=12*时钟周期) 内部是16MHZ,定时器内部一个脉冲,定时器计数就加一 定时器 1(查询法) T1CTL寄存器 定时器1控制和状态: T1CTL (Bit 3:2) 分频器划分值,如下:  00: 标记频率/1  01: 标记频率/8  10: 标记频率/32  11: 标记频率/1

zigbee学习之DHT11

DHT11模块代码如下 #include <ioCC2530.h> typedef unsigned char uchar; typedef unsigned int  uint; #define DATA_PIN P0_7 //温湿度定义 uchar ucharFLAG,uchartemp; uchar shidu_shi,shidu_ge,wendu_shi,wendu_ge=4; uchar ucharT_data_H,ucharT_data_L,ucharRH_data_H,uchar

zigbee学习总结

我们修改代码主要是在SampleApp.c这个文件夹下面, SampleApp_ProcessEvent() 用户应用任务的事件处理函数 下面有两个系统消息 消息一SYS_EVENT_MSG 普通的事件 if ( events & SYS_EVENT_MSG ) //接收系统消息再进行判断 //接收属于本应用任务 SampleApp的消息,以 SampleApp_TaskID标记  MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( Sampl

【STM32 .Net MF开发板学习-16】Zigbee遥控智能小车

Zigbee技术目前在物联网领域和RFID一样,受关注度非常高.日前中科院上海微系统与信息技术研究所.无锡物联网产业研究院等传感器网络标准工作组成员单位联合发布了名为VW628.WSNS1_SCBR的两款中国自主知识产权的无线传感网SoC芯片,其中WSNS1_SCBR为中国首款符合IEEE802.15.4g标准的验证型全集成传感网节点SoC芯片. 其实封装好的Zigbee模块,使用起来和操作串口一样,特别是我们把其通信模式设置为透明传输模式,这时候我们已经感觉不到是在用Zigbee模块,而觉得是