基于STC15单片机的智能流量计(7)

2019-03-03 15:30

//向SSD1106写入一个字节。 //dat:要写入的数据/命令

//cmd:数据/命令标志 0,表示命令;1,表示数据; void OLED_WR_Byte(u8 dat,u8 cmd) {

DATAOUT(dat); if(cmd)

OLED_DC_Set(); else

OLED_DC_Clr(); OLED_CS_Clr(); OLED_WR_Clr(); OLED_WR_Set(); OLED_CS_Set(); OLED_DC_Set(); } #else

//向SSD1306写入一个字节。 //dat:要写入的数据/命令

//cmd:数据/命令标志 0,表示命令;1,表示数据; void OLED_WR_Byte(u8 dat,u8 cmd) { u8 i; if(cmd)

OLED_DC_Set(); else

OLED_DC_Clr(); OLED_CS_Clr(); for(i=0;i<8;i++)

{ OLED_SCLK_Clr(); if(dat&0x80) { OLED_SDIN_Set(); } else OLED_SDIN_Clr(); OLED_SCLK_Set(); dat<<=1; } OLED_CS_Set();

OLED_DC_Set(); } #endif

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)|0x01,OLED_CMD);

29

}

//开启OLED显示

void OLED_Display_On(void) {

OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令 OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON }

//关闭OLED显示 void OLED_Display_Off(void) {

OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令 OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF }

//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!! void OLED_Clear(void) {

u8 i,n; for(i=0;i<8;i++) { OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7) OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址 OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址 for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); } //更新显示 }

//在指定位置显示一个字符,包括部分字符 //x:0~127 //y:0~63

//mode:0,反白显示;1,正常显示 //size:选择字体 16/12

void OLED_ShowChar(u8 x,u8 y,u8 chr) {

unsigned char c=0,i=0; c=chr-' ';//得到偏移后的值 if(x>Max_Column-1){x=0;y=y+2;} if(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++)

30

OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA); } else { OLED_Set_Pos(x,y+1); for(i=0;i<6;i++) OLED_WR_Byte(F6x8[c][i],OLED_DATA); } }

//m^n函数

u32 oled_pow(u8 m,u8 n) {

u32 result=1;

while(n--)result*=m; return result; } //显示2个数字 //x,y :起点坐标 //len :数字的位数 //size:字体大小

//mode:模式 0,填充模式;1,叠加模式 //num:数值(0~4294967295);

void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2) { u8 t,temp;

u8 enshow=0; for(t=0;t

OLED_ShowChar(x+(size2/2)*t,y,temp+'0'); } }

//显示一个字符号串

void OLED_ShowString(u8 x,u8 y,u8 *chr) {

31

unsigned char j=0; while (chr[j]!='\\0') { OLED_ShowChar(x,y,chr[j]); 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; } }

/***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/

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

OLED_WR_Byte(BMP[j++],OLED_DATA); }}}

//初始化SSD1306 void OLED_Init(void) {

OLED_RST_Set(); delay_ms(100); OLED_RST_Clr(); delay_ms(100); OLED_RST_Set();

32

OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel

OLED_WR_Byte(0x00,OLED_CMD);//---set low column address OLED_WR_Byte(0x10,OLED_CMD);//---set high column address

OLED_WR_Byte(0x40,OLED_CMD);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)

OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register

OLED_WR_Byte(0xCF,OLED_CMD); // Set SEG Output Current Brightness OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常

OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常

OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display

OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64) OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty

OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)

OLED_WR_Byte(0x00,OLED_CMD);//-not offset

OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency

OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec

OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period

OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock

OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration OLED_WR_Byte(0x12,OLED_CMD);

OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh

OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)

OLED_WR_Byte(0x02,OLED_CMD);//

OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable

OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5) OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7) OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled pane OLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/ OLED_Clear();

OLED_Set_Pos(0,0); }

OLED字库程序

//***************************************************************

33


基于STC15单片机的智能流量计(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高中作文 绝知此事要躬行

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: