
repo
Dependencies: mbed BLE_API nRF51822 X_NUCLEO_IDB0XA1
oled.h
- Committer:
- orshefi
- Date:
- 2019-10-31
- Revision:
- 81:b26ba1ec7625
- Parent:
- 80:4fbfa09ac26c
File content as of revision 81:b26ba1ec7625:
#include "fonts.h" #include "mbed.h" #include "ble/BLE.h" #include <stdbool.h> #include <stdint.h> DigitalOut SCLK(P0_8); DigitalOut SDIN(P0_10); DigitalOut RES(P0_18); DigitalOut CS(P0_29); DigitalOut DC(P0_28); #define Max_Column 160 #define Max_Row 136 #define Brightness 0xcf void oledwrite(int num1,int num2,int num3, int analog_read); int num1; int num2; int num3; void part_num(int analog_read) { for(int q = 0;q<=3;q++) { int num = analog_read; for(int k = 0;k<3;k++) { switch(k) { case 0: num3 = (num%10); num = num/10; break; case 1: num2 = (num%10); num = num/10; break; case 2: num1 = (num%10); num = num/10; break; } } } oledwrite(num1,num2,num3,analog_read); } void Write_Command(unsigned char Data) { unsigned char i; CS=0; DC=0; for (i=0; i<8; i++) { SCLK=0; SDIN=(Data&0x80)>>7; Data = Data << 1; SCLK=1; } DC=1; CS=1; } void Write_Data(unsigned char Data) { unsigned char i; CS=0; DC=1; for (i=0; i<8; i++) { SCLK=0; SDIN=(Data&0x80)>>7; Data = Data << 1; SCLK=1; } DC=1; CS=1; } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Instruction Setting //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void Set_Start_Column(unsigned char d) { Write_Command(0x00+d%16); // Set Lower Column Start Address for Page Addressing Mode // Default => 0x00 Write_Command(0x10+d/16); // Set Higher Column Start Address for Page Addressing Mode // Default => 0x10 } void Set_Page_Addressing_Mode(void) { Write_Command(0x20); // Set Memory Page Addressing Mode } void Set_Vertical_Addressing_Mode(void) { Write_Command(0x21); // Set Memory Vertical Addressing Mode } void Set_Contrast_Control(unsigned char d) { Write_Command(0x81); // Set Contrast Control Write_Command(d); // Default => 0x7F } void Set_Segment_Remap(unsigned char d) { Write_Command(d); // Set Segment Re-Map // Default => 0xA0 // 0xA0 => Column Address 0 Mapped to SEG0 // 0xA1 => Column Address 0 Mapped to SEG127 } void Set_Entire_Display(unsigned char d) { Write_Command(d); // Set Entire Display On / Off // Default => 0xA4 // 0xA4 => Normal Display // 0xA5 => Entire Display On } void Set_Inverse_Display(unsigned char d) { Write_Command(d); // Set Inverse Display On/Off // Default => 0xA6 // 0xA6 => Normal Display // 0xA7 => Inverse Display On } void Set_DCDC_Control_Mode(unsigned char d) { Write_Command(0xad); //Set DC-DC Control Mode Write_Command(d); //DC-DC Setting Mode Set } void Set_Display_On_Off(unsigned char d) { Write_Command(d); // Set Display On/Off // Default => 0xAE // 0xAE => Display Off // 0xAF => Display On } void Set_Page_Address(unsigned char d) { Write_Command(0xb0); // Set Page Address Write_Command(d); // Page Address } void Set_Common_Remap(unsigned char d) { Write_Command(d); // Set COM Output Scan Direction // Default => 0xC0 // 0xC0 => Scan from COM0 to COM[N-1] // 0xC8 => Scan from COM[N-1] to COM0 } void Set_Display_Resolution(unsigned char d) { Write_Command(0xa9); //Set Display Resolution Command Write_Command(d); //00= 64 COM⊙ 160 SEG //01= 96 COM⊙ 160 SEG //02=128 COM⊙ 160 SEG //03=160 COM⊙ 160 SEG } void Set_Display_Clock(unsigned char d) { Write_Command(0xD5); // Set Display Clock Divide Ratio / Oscillator Frequency Write_Command(d); // Default => 0x50 // D[3:0] => Display Clock Divider // D[7:4] => Oscillator Frequency } void Set_Precharge_Period(unsigned char d) { Write_Command(0xD9); // Set Pre-Charge Period Write_Command(d); // Default => 0x22 (2 Display Clocks [Phase 2] / 2 Display Clocks [Phase 1]) // D[3:0] => Phase 1 Period in 1~15 Display Clocks // D[7:4] => Phase 2 Period in 1~15 Display Clocks } void Set_VCOMH(unsigned char d) { Write_Command(0xDB); // Set VCOMH Deselect Level Write_Command(d); // Default => 0x35 (VCOMH = 1 x VREF ) } void Set_VSEGH(unsigned char d) { Write_Command(0xDC); // Set VSEGH Deselect Level Write_Command(d); // Default => 0x35 (VSEGH = 1 x VREF ) } void Set_VSL(unsigned char d) { Write_Command(d); // Set VSL // Default => 0x30 } void Read_Modify_Write_Start(void) { Write_Command(0xe0); //Read-Modify-Write Start } void Read_Modify_Write_End(void) { Write_Command(0xee); //Read-Modify-Write End } void Set_NOP() { Write_Command(0xE3); // Command for No Operation } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Show Character (5x7) // // a: Database // b: Ascii // c: Start Page // d: Start Column //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void Show_Font_big(unsigned char a, unsigned char b, unsigned char c, unsigned char d) { unsigned char i; Set_Page_Address(c); Set_Start_Column(d); for(i=0;i<11;i++) { Write_Data(Shefi[b-1][i]); } Write_Data(0x00); } void Show_Font_num(unsigned char a, unsigned char b, unsigned char c, unsigned char d) { unsigned int i; Set_Page_Address(c); Set_Start_Column(d); for(i=0;i<22;i++) { Write_Data(Shefinum[b-1][i]); } Write_Data(0x00); } void Show_Font57(unsigned char a, unsigned char b, unsigned char c, unsigned char d) { unsigned char i; Set_Page_Address(c); Set_Start_Column(d); for(i=0;i<5;i++) { Write_Data(Ascii_1[b-1][i]); } Write_Data(0x00); } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Show String // // a: Database // b: Start Page // c: Start Column // * Must write "0" in the end... //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void Show_String_big(unsigned char a, unsigned char *Data_Pointer, unsigned char b, unsigned char c) { unsigned char *Src_Pointer; Src_Pointer=Data_Pointer; Show_Font57(1,96,b,c); // No-Break Space // Must be written first before the string start... while(1) { Show_Font_big(a,*Src_Pointer,b,c); Src_Pointer++; c+=13; if(*Src_Pointer == 0) break; } } void Show_String_num(unsigned char a, unsigned char *Data_Pointer, unsigned char b, unsigned char c) { unsigned char *Src_Pointer; Src_Pointer=Data_Pointer; Show_Font57(1,96,b,c); // No-Break Space // Must be written first before the string start... while(1) { Show_Font_num(a,*Src_Pointer,b,c); Src_Pointer++; c+=26; if(*Src_Pointer == 0) break; } } void Show_String(unsigned char a, unsigned char *Data_Pointer, unsigned char b, unsigned char c) { unsigned char *Src_Pointer; Src_Pointer=Data_Pointer; Show_Font57(1,96,b,c); // No-Break Space // Must be written first before the string start... while(1) { Show_Font57(a,*Src_Pointer,b,c); Src_Pointer++; c+=6; if(*Src_Pointer == 0) break; } } void OLED_initial(void) //SH1108 { unsigned char i,j; RES = 1; Set_Display_On_Off(0xAE); //Display off Set_Contrast_Control(Brightness); //set contrast Set_Page_Addressing_Mode(); //Set Memory Page addressing mode Set_Segment_Remap(0xA0); //set segment re-map 0xA0 => Column Address 0 Mapped to SEG0 Set_Entire_Display(0xA4); //set entire display off Set_Inverse_Display(0xA6); //set normal display Set_DCDC_Control_Mode(0x80); //set DC-DC off Set_Common_Remap(0xC0); //set commom output scan direction 0xC0 => Scan from COM0 to COM[N-1] Set_Display_Clock(0x60); //set display clock divide ratio/osc frequency Set_Precharge_Period(0x47); //set dis-charge/pre-charge period Set_VCOMH(0x35); //set VCOM deselect level Set_VSEGH(0x35); //set VSEGM deselect level Set_VSL(0x30); // SET VSL Set_Display_Resolution(0x03); // Set display resolution 03=160 COM⊙ 160 SEG for(i=0;i<=16;i++) { Set_Start_Column(0x00); //set column address Set_Page_Address(i); //Set Page Address for(j=0;j<Max_Column;j++) { Write_Data(0x00); } } Set_Display_On_Off(0xAF); //display on } void Frame_pattern()//Frame Pattern { unsigned char i,j; for(i=0;i<=16;i++) { Set_Start_Column(0x00); //set column address Set_Page_Address(i); //Set Page Address for(j=0;j<Max_Column;j++) { Write_Data(FramePic[i*Max_Column+j]); } } } void clear_screen() { unsigned char clearodd[2] = {41,0}; unsigned char cleareven[2] = {42,0}; unsigned char clearodd1[2] = {43,0}; unsigned char cleareven1[2] = {44,0}; unsigned char clearodd2[2] = {41,0}; unsigned char cleareven2[2] = {42,0}; unsigned char clearodd3[2] = {43,0}; unsigned char cleareven3[2] = {44,0}; unsigned char clearodd4[2] = {41,0}; unsigned char cleareven4[2] = {42,0}; unsigned char clearodd5[2] = {43,0}; unsigned char cleareven5[2] = {44,0}; Show_String_num(2,clearodd,8,45); Show_String_num(2,cleareven,9,45); Show_String_num(2,clearodd1,10,45); Show_String_num(2,cleareven1,11,45); Show_String_num(2,clearodd2,8,71); Show_String_num(2,cleareven2,9,71); Show_String_num(2,clearodd3,10,71); Show_String_num(2,cleareven3,11,71); Show_String_num(2,clearodd4,8,97); Show_String_num(2,cleareven4,9,97); Show_String_num(2,clearodd5,10,97); Show_String_num(2,cleareven5,11,97); Show_String_num(2,clearodd4,8,58); Show_String_num(2,cleareven4,9,58); Show_String_num(2,clearodd5,10,58); Show_String_num(2,cleareven5,11,58); Show_String_num(2,clearodd4,8,84); Show_String_num(2,cleareven4,9,84); Show_String_num(2,clearodd5,10,84); Show_String_num(2,cleareven5,11,84); } void oledwrite(int num1,int num2,int num3,int analog_read) { unsigned char sh[8] = {1,3,5,7,9,11,13,0}; unsigned char sh1[8] = {2,4,6,8,10,12,14,0}; unsigned char Name[4]={54,33,44,0}; // unsigned char Name[10]={52,69,77,80,82,65,84,85,82,0}; unsigned char dot[2]={14,0}; unsigned char a,b,c; Show_String_big(2,sh,4,35); Show_String_big(2,sh1,5,35); Show_String(1,Name,14,75); // Show_String(1,dot,11,95); clear_screen(); switch(num1) { case 0: a = 1; break; case 1: a = 5; break; case 2: a = 9; break; case 3: a = 13; break; case 4: a = 17; break; case 5: a = 21; break; case 6: a = 25; break; case 7: a = 29; break; case 8: a = 33; break; case 9: a = 37; break; } switch(num2) { case 0: b = 1; break; case 1: b = 5; break; case 2: b = 9; break; case 3: b = 13; break; case 4: b = 17; break; case 5: b = 21; break; case 6: b = 25; break; case 7: b = 29; break; case 8: b = 33; break; case 9: b = 37; break; } switch(num3) { case 0: c = 1; break; case 1: c = 5; break; case 2: c = 9; break; case 3: c = 13; break; case 4: c = 17; break; case 5: c = 21; break; case 6: c = 25; break; case 7: c = 29; break; case 8: c = 33; break; case 9: c = 37; break; } unsigned char numodd[2] = {a,0}; unsigned char numeven[2] = {(a+1),0}; unsigned char numodd1[2] = {(a+2),0}; unsigned char numeven1[2] = {(a+3),0}; unsigned char numodd2[2] = {b,0}; unsigned char numeven2[2] = {(b+1),0}; unsigned char numodd3[2] = {(b+2),0}; unsigned char numeven3[2] = {(b+3),0}; unsigned char numodd4[2] = {c,0}; unsigned char numeven4[2] = {(c+1),0}; unsigned char numodd5[2] = {(c+2),0}; unsigned char numeven5[2] = {(c+3),0}; if(analog_read >=100) { Show_String_num(2,numodd,8,45); Show_String_num(2,numeven,9,45); Show_String_num(2,numodd1,10,45); Show_String_num(2,numeven1,11,45); Show_String_num(2,numodd2,8,71); Show_String_num(2,numeven2,9,71); Show_String_num(2,numodd3,10,71); Show_String_num(2,numeven3,11,71); Show_String_num(2,numodd4,8,97); Show_String_num(2,numeven4,9,97); Show_String_num(2,numodd5,10,97); Show_String_num(2,numeven5,11,97); } else if(analog_read < 10) { Show_String_num(2,numodd4,8,71); Show_String_num(2,numeven4,9,71); Show_String_num(2,numodd5,10,71); Show_String_num(2,numeven5,11,71); } else { Show_String_num(2,numodd2,8,58); Show_String_num(2,numeven2,9,58); Show_String_num(2,numodd3,10,58); Show_String_num(2,numeven3,11,58); Show_String_num(2,numodd4,8,84); Show_String_num(2,numeven4,9,84); Show_String_num(2,numodd5,10,84); Show_String_num(2,numeven5,11,84); } }