123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975 |
- #include "oled.h"
- #include "oledfont.h"
- #include "delay.h"
- #include "QR_Encode.h"
- #include <stdarg.h> // 标准头文件
- #include "stdio.h"
- #include "w25qxx.h"
- void IIC_Start()
- {
- OLED_SCLK_Set() ;
- OLED_SDIN_Set();
- OLED_SDIN_Clr();
- OLED_SCLK_Clr();
- }
- void IIC_Stop()
- {
- OLED_SCLK_Set() ;
- OLED_SDIN_Clr();
- OLED_SDIN_Set();
-
- }
- void IIC_Wait_Ack()
- {
-
-
-
-
- OLED_SCLK_Set() ;
- OLED_SCLK_Clr();
- }
- void Write_IIC_Byte(unsigned char IIC_Byte)
- {
- unsigned char i;
- unsigned char m,da;
- da=IIC_Byte;
- OLED_SCLK_Clr();
- for(i=0;i<8;i++)
- {
- m=da;
-
- m=m&0x80;
- if(m==0x80)
- {OLED_SDIN_Set();}
- else OLED_SDIN_Clr();
- da=da<<1;
- OLED_SCLK_Set();
- OLED_SCLK_Clr();
- }
- }
- void Write_IIC_Command(unsigned char IIC_Command)
- {
- IIC_Start();
- Write_IIC_Byte(0x78);
- IIC_Wait_Ack();
- Write_IIC_Byte(0x00);
- IIC_Wait_Ack();
- Write_IIC_Byte(IIC_Command);
- IIC_Wait_Ack();
- IIC_Stop();
- }
- void Write_IIC_Data(unsigned char IIC_Data)
- {
- IIC_Start();
- Write_IIC_Byte(0x78);
- IIC_Wait_Ack();
- Write_IIC_Byte(0x40);
- IIC_Wait_Ack();
- Write_IIC_Byte(IIC_Data);
- IIC_Wait_Ack();
- IIC_Stop();
- }
- void OLED_WR_Byte(unsigned dat,unsigned cmd)
- {
- if(cmd)
- {
- Write_IIC_Data(dat);
-
- }
- else {
- Write_IIC_Command(dat);
-
- }
- }
- void fill_picture(unsigned char fill_Data)
- {
- unsigned char m,n;
- for(m=0;m<8;m++)
- {
- OLED_WR_Byte(0xb0+m,0);
- OLED_WR_Byte(0x00,0);
- OLED_WR_Byte(0x10,0);
- for(n=0;n<128;n++)
- {
- OLED_WR_Byte(fill_Data,1);
- }
- }
- }
- void Delay_50ms(unsigned int Del_50ms)
- {
- unsigned int m;
- for(;Del_50ms>0;Del_50ms--)
- for(m=6245;m>0;m--);
- }
- void Delay_1ms(unsigned int Del_1ms)
- {
- unsigned char j;
- while(Del_1ms--)
- {
- for(j=0;j<123;j++);
- }
- }
- void OLED_Set_Pos(unsigned char x, unsigned char y)
- {
- OLED_WR_Byte(0xb0+y,OLED_CMD);
- OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
- OLED_WR_Byte((x&0x0f),OLED_CMD);
- }
- void OLED_Display_On(void)
- {
- OLED_WR_Byte(0X8D,OLED_CMD);
- OLED_WR_Byte(0X14,OLED_CMD);
- OLED_WR_Byte(0XAF,OLED_CMD);
- }
- void OLED_Display_Off(void)
- {
- OLED_WR_Byte(0X8D,OLED_CMD);
- OLED_WR_Byte(0X10,OLED_CMD);
- OLED_WR_Byte(0XAE,OLED_CMD);
- }
- void OLED_Clear(void)
- {
- u8 i,n;
- for(i=0;i<8;i++)
- {
- OLED_WR_Byte (0xb0+i,OLED_CMD);
- OLED_WR_Byte (0x00,OLED_CMD);
- OLED_WR_Byte (0x10,OLED_CMD);
- for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
- }
- }
- void OLED_On(void)
- {
- u8 i,n;
- for(i=0;i<8;i++)
- {
- OLED_WR_Byte (0xb0+i,OLED_CMD);
- OLED_WR_Byte (0x00,OLED_CMD);
- OLED_WR_Byte (0x10,OLED_CMD);
- for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);
- }
- }
- void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
- {
- unsigned char c=0,i=0;
- c=chr-' ';
- if(x>Max_Column-1){x=0;y=y+2;}
- if(Char_Size ==16)
- {
- OLED_Set_Pos(x,y);
- for(i=0;i<8;i++)
- OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
- OLED_Set_Pos(x,y+1);
- for(i=0;i<8;i++)
- OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
- }
- else {
- OLED_Set_Pos(x,y);
- for(i=0;i<6;i++)
- OLED_WR_Byte(F6x8[c][i],OLED_DATA);
-
- }
- }
- u32 oled_pow(u8 m,u8 n)
- {
- u32 result=1;
- while(n--)result*=m;
- return result;
- }
- void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
- {
- 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+(size2/2)*t,y,' ',size2);
- continue;
- }else enshow=1;
-
- }
- OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
- }
- }
- void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
- {
- unsigned char j=0;
- while (chr[j]!='\0')
- { OLED_ShowChar(x,y,chr[j],Char_Size);
- x+=8;
- if(x>120){x=0;y+=2;}
- j++;
- }
- }
- void OLED_ShowCHinese(u8 x,u8 y,u8 no)
- {
- u8 t,adder=0;
- OLED_Set_Pos(x,y);
- for(t=0;t<16;t++)
- {
- OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
- adder+=1;
- }
- OLED_Set_Pos(x,y+1);
- for(t=0;t<16;t++)
- {
- OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
- adder+=1;
- }
- }
- void OLED_DrawBMP(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++)
- {
- OLED_Set_Pos(x0,y);
- for(x=x0;x<x1;x++)
- {
- OLED_WR_Byte(BMP[j++],OLED_DATA);
- }
- }
- }
- void OLED_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_SetBits(GPIOB,GPIO_Pin_2);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOF, &GPIO_InitStructure);
- GPIO_SetBits(GPIOF,GPIO_Pin_10);
-
- delay_ms(800);
-
- OLED_WR_Byte(0xAE,OLED_CMD);
- OLED_WR_Byte(0xD5,OLED_CMD);
- OLED_WR_Byte(80,OLED_CMD);
- OLED_WR_Byte(0xA8,OLED_CMD);
- OLED_WR_Byte(0X3F,OLED_CMD);
- OLED_WR_Byte(0xD3,OLED_CMD);
- OLED_WR_Byte(0X00,OLED_CMD);
- OLED_WR_Byte(0x40,OLED_CMD);
-
- OLED_WR_Byte(0x8D,OLED_CMD);
- OLED_WR_Byte(0x14,OLED_CMD);
- OLED_WR_Byte(0x20,OLED_CMD);
- OLED_WR_Byte(0x02,OLED_CMD);
- OLED_WR_Byte(0xA1,OLED_CMD);
- OLED_WR_Byte(0xC0,OLED_CMD);
- OLED_WR_Byte(0xDA,OLED_CMD);
- OLED_WR_Byte(0x12,OLED_CMD);
-
- OLED_WR_Byte(0x81,OLED_CMD);
- OLED_WR_Byte(0xEF,OLED_CMD);
- OLED_WR_Byte(0xD9,OLED_CMD);
- OLED_WR_Byte(0xf1,OLED_CMD);
- OLED_WR_Byte(0xDB,OLED_CMD);
- OLED_WR_Byte(0x30,OLED_CMD);
- OLED_WR_Byte(0xA4,OLED_CMD);
- OLED_WR_Byte(0xA6,OLED_CMD);
- OLED_WR_Byte(0xAF,OLED_CMD);
- }
-
- u8 OLED_GRAM[128][8];
- void OLED_Refresh_Gram(void)
- {
- u8 i, n;
- for(i = 0; i < 8; i++)
- {
- OLED_WR_Byte(0xb0 + i,OLED_CMD);
- 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 MyOLED_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);
- t ? (OLED_GRAM[x][pos] |= temp) : (OLED_GRAM[x][pos] &= ~temp);
- }
- void OLED_DrawLine(u8 x0, u8 y, u8 x1, u8 t)
- {
- u8 x_0, x_1, i;
- if (x0 > x1)
- {
- x_0 = x1;
- x_1 = x0;
- }
- else
- {
- x_0 = x0;
- x_1 = x1;
- }
-
- for (i = x_0 ; i <= x_1; i++)
- {
- OLED_DrawPoint(i, y, t);
- }
- OLED_Refresh_Gram();
- }
- void OLED_DrawRow(u8 x, u8 y0, u8 y1, u8 t)
- {
- u8 y_0, y_1, i;
- if (y0 > y1)
- {
- y_0 = y1;
- y_1 = y0;
- }
- else
- {
- y_0 = y0;
- y_1 = y1;
- }
-
- for (i = y_0 ; i <= y_1; i++)
- {
- OLED_DrawPoint(x, i, t);
- }
- OLED_Refresh_Gram();
- }
- void OLED_DrawRectangle(u8 x0, u8 y0, u8 x1, u8 y1, u8 t)
- {
- u8 y_0, y_1, x_0, x_1, i;
- if (y0 > y1)
- {
- y_0 = y1;
- y_1 = y0;
- }
- else
- {
- y_0 = y0;
- y_1 = y1;
- }
-
- if (x0 > x1)
- {
- x_0 = x1;
- x_1 = x0;
- }
- else
- {
- x_0 = x0;
- x_1 = x1;
- }
-
- for (i = x_0 ; i <= x_1; i++)
- {
- OLED_DrawPoint(i, y0, t);
- OLED_DrawPoint(i, y1, t);
- }
-
- for (i = y_0 ; i <= y_1; i++)
- {
- OLED_DrawPoint(x0, i, t);
- OLED_DrawPoint(x1, i, t);
- }
- OLED_Refresh_Gram();
- }
- void OLED_Fill2(u8 x0, u8 y0, u8 x1, u8 y1, u8 dot)
- {
- u8 x, y;
- for (x = x0; x < x1; x++)
- {
- for (y = y0; y < y1; y++)
- {
- OLED_DrawPoint(x, y, dot);
- }
- }
- }
- u32 OLED_Pow(u8 m, u8 n)
- {
- u32 result = 1;
- while (n--)
- {
- result *= m;
- }
- return result;
- }
- void OLED_QRcode_Display(char *str,uint8_t offset,uint8_t colour)
- {
- uint32_t i,j,point;
- uint8_t exp = 1;
- uint8_t pos_X,pos_Y;
- if(colour)
- point = 1;
- else
- point = 0;
-
- EncodeData(str);
- exp = 64 / m_nSymbleSize;
- pos_Y = (64 - exp*m_nSymbleSize)/2;
- pos_X = pos_Y + offset;
-
- if(point==0)
- OLED_Fill2(pos_X-2,pos_Y-2,pos_X + exp*m_nSymbleSize+2,pos_Y + exp*m_nSymbleSize+2,1);
-
- for(i=0;i<m_nSymbleSize;i++)
- {
- for(j=0;j<m_nSymbleSize;j++)
- {
- if(m_byModuleData[i][j] == 1)
- {
- OLED_Fill2(pos_X,pos_Y,pos_X+exp,pos_Y+exp,point);
- }
- if(m_byModuleData[i][j] == 0)
- {
- OLED_Fill2(pos_X,pos_Y,pos_X+exp,pos_Y+exp,1-point);
- }
- pos_Y += exp;
- }
- pos_X += exp;
- pos_Y -= m_nSymbleSize*exp;
- }
- OLED_Refresh_Gram();
- }
- void oled_printf(char x,char y,char *p,...)
- {
- char LcdBuff[16]={0};
- va_list ap;
- va_start(ap,p);
- vsprintf(LcdBuff,p,ap);
- va_end(ap);
- OLED_ShowString(x,y,(u8*)LcdBuff,16);
-
- }
- void OLED_DrawPoint1(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_ShowChar1(u8 x,u8 y,u8 chr,u8 size,u8 mode)
- {
- u8 temp,t,t1;
- u8 y0=y;
- u8 csize=(size/8+((size%8)?1:0))*(size/2);
- chr=chr-' ';
- for(t=0;t<csize;t++)
- {
- if(size==12)temp=asc2_1206_oled[chr][t];
- else if(size==16)temp=asc2_1608_oled[chr][t];
- else if(size==24)temp=asc2_2412_oled[chr][t];
- else return;
- for(t1=0;t1<8;t1++)
- {
- if(temp&0x80)OLED_DrawPoint1(x,y,mode);
- else OLED_DrawPoint1(x,y,!mode);
- temp<<=1;
- y++;
- if((y-y0)==size)
- {
- y=y0;
- x++;
- break;
- }
- }
- }
-
- }
- void OLED_ShowString1(u8 x,u8 y,const char *p,char size)
- {
- while((*p<='~')&&(*p>=' '))
- {
- if(x>(128-(size/2))){x=0;y+=size;}
- if(y>(64-size)){y=x=0;OLED_Clear();}
- OLED_ShowChar1(x,y,*p,size,1);
- x+=size/2;
- p++;
- }
-
- }
- void OLED_Refresh_Gram1(void)
- {
- u8 i,n;
- for(i=0;i<8;i++)
- {
- OLED_WR_Byte (0xb0+i,OLED_CMD);
- 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_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot)
- {
- u8 x,y;
- for(x=x1;x<=x2;x++)
- {
- for(y=y1;y<=y2;y++)OLED_DrawPoint(x,y,dot);
- }
- OLED_Refresh_Gram();
- }
- void OLED_ShowCHinese1(u8 x,u8 y,u8 no)
- {
- u8 t,adder=0;
- OLED_Set_Pos(x,y);
- for(t=0;t<16;t++)
- {
-
- adder+=1;
- }
- OLED_Set_Pos(x,y+1);
- for(t=0;t<16;t++)
- {
-
- adder+=1;
- }
- }
- void OLED_Get_HzMat(unsigned char *code,unsigned char *mat,u8 size)
- {
- unsigned char qh,ql;
- unsigned char i;
- unsigned long foffset;
- u8 csize=(size/8+((size%8)?1:0))*(size);
- qh=*code;
- ql=*(++code);
- if(qh<0x81||ql<0x40||ql==0xff||qh==0xff)
- {
- for(i=0;i<csize;i++)*mat++=0x00;
- return;
- }
- if(ql<0x7f)ql-=0x40;
- else ql-=0x41;
- qh-=0x81;
- foffset=((unsigned long)190*qh+ql)*csize;
- switch(size)
- {
- case 12:
-
- W25QXX_Read(mat,foffset+0,csize);
- break;
- case 16:
- W25QXX_Read(mat,574560+foffset,csize);
- break;
- case 24:
-
- break;
- }
- }
- void Show_Font_Fury(u16 x,u16 y,u8 *font,u8 size,u8 mode)
- {
- u8 temp,t,t1;
- u16 y0=y;
- u8 dzk[72];
- u8 csize=(size/8+((size%8)?1:0))*(size);
- if(size!=12&&size!=16&&size!=24)return;
- OLED_Get_HzMat(font,dzk,size);
- for(t=0;t<csize;t++)
- {
- temp=dzk[t];
- for(t1=0;t1<8;t1++)
- {
- if(temp&0x80)OLED_DrawPoint(x,y,1);
- else if(mode==0)OLED_DrawPoint(x,y,0);
- temp<<=1;
- y++;
- if((y-y0)==size)
- {
- y=y0;
- x++;
- break;
- }
- }
- }
- }
- void Show_Str_Fury(u16 x,u16 y,u16 width,u16 height,u8*str,u8 size)
- {
- u16 x0=x;
- u16 y0=y;
- u8 bHz=0;
- while(*str!=0)
- {
- if(!bHz)
- {
- if(*str>0x80)bHz=1;
- else
- {
- if(x>(x0+width-size/2))
- {
- y+=size;
- x=x0;
- }
- if(y>(y0+height-size))break;
- if(*str==13)
- {
- y+=size;
- x=x0;
- str++;
- }
- else OLED_ShowChar1(x,y,*str,size,1);
- str++;
- x+=size/2;
- }
- }else
- {
- bHz=0;
- if(x>(x0+width-size))
- {
- y+=size;
- x=x0;
- }
- if(y>(y0+height-size))break;
- Show_Font_Fury(x,y,str,size,0);
- str+=2;
- x+=size;
- }
- }
-
- }
-
|