|
|
#include "all.H" void IIC_Delay() { _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); } void IIC_Init() { P2M0&=0x3f; P2M1&=0x3f; SCL_GPIO=1;//ê±Öó _nop_(); SDA_GPIO=1;//êy¾Y _nop_(); } void IIC_Start() //Æeê¼DÅoÅ { SDA_GPIO=1; SCL_GPIO=1; IIC_Delay(); SDA_GPIO=0; IIC_Delay(); SCL_GPIO=0; IIC_Delay(); } void IIC_Stop() //í£Ö1DÅoÅ { SDA_GPIO=0; SCL_GPIO=1; IIC_Delay(); SDA_GPIO=1; IIC_Delay(); } void IIC_Write_Byte(u8 IIC_Byte)//Ïò×üÏß·¢Ëíò»¸ö×Ö½ú { u8 i; SCL_GPIO=0; SDA_GPIO=1; for(i=0;i<8;i++) { SDA_GPIO=(bit)(IIC_Byte&0x80); IIC_Byte<<=1; SCL_GPIO=1; IIC_Delay(); SCL_GPIO=0; IIC_Delay(); } SDA_GPIO=1; } u8 IIC_Read_Byte()//¶áè¡êy¾Y·μ»Ø { u8 i,Value; SCL_GPIO=0; SDA_GPIO=1; for(i=0;i<8;i++) { Value=(Value<<1)|SDA_GPIO; SCL_GPIO=1; IIC_Delay(); SCL_GPIO=0; IIC_Delay(); } return Value; } u8 IIC_Read_Ack()//μ¥Ƭ»ú¼ì2aIIC′ó»ú·¢à′μÄó|′eDÅoÅ { u8 ack=1,i=0; SCL_GPIO=1; IIC_Delay(); while((ack)&&(i<5))//ÕaÑùD′2»»áËàÑ-»· { ack=SDA_GPIO; i++; } SCL_GPIO=0; return ack; } void IIC_Write_Ack(bit Ack)//μ¥Ƭ»ú·¢Ëíó|′e¸ø′ó»ú { SDA_GPIO=Ack; IIC_Delay(); SCL_GPIO=1; IIC_Delay(); SCL_GPIO=0; IIC_Delay(); SDA_GPIO=1; IIC_Delay(); } |
|
#include "all.H" u8 xdata OLED_Write_Buffer[8][8][16]; u8 xdata OLED_Modify_Allow=0; void OLED_Write_Reg(u8 Reg) { IIC_Start(); IIC_Write_Byte(0x78); IIC_Read_Ack(); IIC_Write_Byte(0x00); IIC_Read_Ack(); IIC_Write_Byte(Reg); IIC_Read_Ack(); IIC_Stop(); } void OLED_Write_Data(u8 PAGE,u8 SEG16) { u8 i; PAGE=0; SEG16=0; OLED_Write_Reg(0xb0+PAGE); OLED_Write_Reg(SEG16|0x10); OLED_Write_Reg(0); IIC_Start(); IIC_Write_Byte(0x78); IIC_Read_Ack(); IIC_Write_Byte(0x40); IIC_Read_Ack(); for(i=0;i<16;i++) { IIC_Write_Byte(OLED_Write_Buffer[PAGE][SEG16][i]); IIC_Read_Ack(); } IIC_Stop(); } void OLED_New_Display_Ser() { static xdata u8 count; static xdata u8 PAGE=0; switch(count) { case 10:/*OLED_Modify_Allow=0;*/OLED_Write_Data(PAGE,0);break; case 20:OLED_Write_Data(PAGE,1);break; case 30:OLED_Write_Data(PAGE,2);break; case 40:OLED_Write_Data(PAGE,3);break; case 50:OLED_Write_Data(PAGE,4);break; case 60:OLED_Write_Data(PAGE,5);break; case 70:OLED_Write_Data(PAGE,6);break; case 80:OLED_Write_Data(PAGE,7);count=0;PAGE++;PAGE=PAGE%8;break; default:OLED_Modify_Allow=1;break; } count++; } void OLED_Display_Symbor_ser(u8 PAGE,u8 SEG16,u8 Dat1,u8 Dat2) { u8 data i,Value1,Value2; Value1=Dat1-' '; Value2=Dat2-' '; for(i=0;i<8;i++) { OLED_Write_Buffer[PAGE][SEG16][i]=F8X16[Value1*16+i]; } for(i=0;i<8;i++) { OLED_Write_Buffer[PAGE][SEG16][i+8]=F8X16[Value2*16+i]; } for(i=0;i<8;i++) { OLED_Write_Buffer[PAGE+1][SEG16][i]=F8X16[Value1*16+8+i]; } for(i=0;i<8;i++) { OLED_Write_Buffer[PAGE+1][SEG16][i+8]=F8X16[Value2*16+8+i]; } } void OLED_Display_Chines_Ser(u8 PAGE,u8 SEG16,u8 Dat) //ÖDÎÄÏÔê¾ { u8 xdata i=0; for(i=0;i<16;i++) { OLED_Write_Buffer[PAGE][SEG16][i]=Hzk[Dat][i]; } for(i=0;i<16;i++) { OLED_Write_Buffer[PAGE+1][SEG16][i]=Hzk[Dat+1][i]; } } void OLED_Write_fixed_Buffer() { OLED_Display_Symbor_Ser(0,0,'*','*'); OLED_Display_Symbor_Ser(0,1,'*',' '); OLED_Display_Chines_Ser(0,2,0); OLED_Display_Chines_Ser(0,3,2); OLED_Display_Chines_Ser(0,4,4); OLED_Display_Chines_Ser(0,5,6); OLED_Display_Symbor_Ser(0,6,'*','*'); OLED_Display_Symbor_Ser(0,7,'*','*'); OLED_Display_Symbor_Ser(2,0,'2','0'); OLED_Display_Symbor_Ser(2,1,' ',' '); OLED_Display_Chines_Ser(2,2,8); OLED_Display_Symbor_Ser(2,3,' ',' '); OLED_Display_Chines_Ser(2,4,10); OLED_Display_Symbor_Ser(2,5,' ',' '); OLED_Display_Chines_Ser(2,6,32); OLED_Display_Symbor_Ser(2,7,' ',' '); OLED_Display_Chines_Ser(4,0,16); OLED_Display_Chines_Ser(4,1,18); OLED_Display_Symbor_Ser(4,2,' ',' '); OLED_Display_Symbor_Ser(4,3,' ',' '); OLED_Display_Chines_Ser(4,4,12); OLED_Display_Symbor_Ser(4,5,' ',' '); OLED_Display_Chines_Ser(4,6,14); OLED_Display_Symbor_Ser(4,7,' ',' '); OLED_Display_Symbor_Ser(6,0,'w','q'); OLED_Display_Symbor_Ser(6,1,'x','d'); OLED_Display_Symbor_Ser(6,2,'z','.'); OLED_Display_Symbor_Ser(6,3,'t','a'); OLED_Display_Symbor_Ser(6,4,'o','b'); OLED_Display_Symbor_Ser(6,5,'a','o'); OLED_Display_Symbor_Ser(6,6,'.','c'); OLED_Display_Symbor_Ser(6,7,'o','m'); } void OLED_Init() { OLED_Write_Reg(0x40); OLED_Write_Reg(0x81); OLED_Write_Reg(0xff); OLED_Write_Reg(0xda); OLED_Write_Reg(0x12); OLED_Write_Reg(0xc8); OLED_Write_Reg(0xa1); OLED_Write_Reg(0xa6); OLED_Write_Reg(0xa8); OLED_Write_Reg(0x3f); OLED_Write_Reg(0x20); OLED_Write_Reg(0x00); OLED_Write_Reg(0x8d); OLED_Write_Reg(0x14); OLED_Write_Reg(0xa4); OLED_Write_Reg(0xaf); OLED_Write_Reg(0xd3); OLED_Write_Reg(0x00); OLED_Write_Reg(0xd5); OLED_Write_Reg(0x00); OLED_Write_Reg(0xd9); OLED_Write_Reg(0x22); OLED_Write_Reg(0xdb); OLED_Write_Reg(0x20); OLED_Write_Data(0,0); OLED_Write_fixed_Buffer(); } |
xjx51 發表于 2021-4-17 10:54 ASIC 字符用的幾個用漢字 取模 旋轉一下搞定,90度旋轉的指令沒找到 |
zxq9781 發表于 2021-4-9 22:51 你直接在字模軟件里改變取模方式就行了,OLED的控制器有專用的90度顯示指令,好好看芯片手冊 |
zxq9781 發表于 2021-4-9 22:51 那就需要90度計算,比較麻煩 |
| 請教樓主,OLED 顯示數字 數列排版 字符旋轉90度 有什么思路 |