PointShow.java

本文提供了一个简单的 Java 示例代码,展示了如何创建一个名为 PointDemo 的类并初始化一个具有特定参数的对象。通过 main 方法调用 showPoints() 函数来演示点的属性。

public class PointShow{

  public static void main(String[]args){

    PointDemo demo=new PointDemo(5);

 

    demo.showPoints();

  }

}

#include "oled.h" #include "stdlib.h" #include "oledfont.h" #include "delay.h" u8 OLED_GRAM[144][8]; //反显函数 void OLED_ColorTurn(u8 i) { if(i==0) { OLED_WR_Byte(0xA6,OLED_CMD);//正常显示 } if(i==1) { OLED_WR_Byte(0xA7,OLED_CMD);//反色显示 } } //屏幕旋转180度 void OLED_DisplayTurn(u8 i) { if(i==0) { OLED_WR_Byte(0xC8,OLED_CMD);//正常显示 OLED_WR_Byte(0xA1,OLED_CMD); } if(i==1) { OLED_WR_Byte(0xC0,OLED_CMD);//反转显示 OLED_WR_Byte(0xA0,OLED_CMD); } } /********************************************************** * 函 数 名 称:IIC_delay * 函 数 功 能:延时 * 传 入 参 数:无 * 函 数 返 回:无 * 作 者:www.lckfb.com * 备 注: **********************************************************/ void IIC_delay(void) { delay_us(13); } //起始信号 void I2C_Start(void) { OLED_SDA_Set(); OLED_SCL_Set(); IIC_delay(); OLED_SDA_Clr(); IIC_delay(); OLED_SCL_Clr(); IIC_delay(); } //结束信号 void I2C_Stop(void) { OLED_SDA_Clr(); OLED_SCL_Set(); IIC_delay(); OLED_SDA_Set(); } //等待信号响应 void I2C_WAITACK(void) //测数据信号的电平 { OLED_SDA_Set(); IIC_delay(); OLED_SCL_Set(); IIC_delay(); OLED_SCL_Clr(); IIC_delay(); } //写入一个字节 void SEND_BYTE(u8 dat) { u8 i; for(i=0;i<8;i++) { if(dat&0x80)//将dat的8位从最高位依次写入 { OLED_SDA_Set(); } else { OLED_SDA_Clr(); } IIC_delay(); OLED_SCL_Set(); IIC_delay(); OLED_SCL_Clr();//将时钟信号设置为低电平 dat<<=1; } } //发送一个字节 //mode:数据/命令标志 0,表示命令;1,表示数据; void OLED_WR_Byte(u8 dat,u8 mode) { I2C_Start(); SEND_BYTE(0x78); I2C_WAITACK(); if(mode){SEND_BYTE(0x40);} else{SEND_BYTE(0x00);} I2C_WAITACK(); SEND_BYTE(dat); I2C_WAITACK(); I2C_Stop(); } //开启OLED显示 void OLED_DisPlay_On(void) { OLED_WR_Byte(0x8D,OLED_CMD);//电荷泵使能 OLED_WR_Byte(0x14,OLED_CMD);//开启电荷泵 OLED_WR_Byte(0xAF,OLED_CMD);//点亮屏幕 } //关闭OLED显示 void OLED_DisPlay_Off(void) { OLED_WR_Byte(0x8D,OLED_CMD);//电荷泵使能 OLED_WR_Byte(0x10,OLED_CMD);//关闭电荷泵 OLED_WR_Byte(0xAE,OLED_CMD);//关闭屏幕 } //更新显存到OLED void OLED_Refresh(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); //设置高列起始地址 I2C_Start(); SEND_BYTE(0x78); I2C_WAITACK(); SEND_BYTE(0x40); I2C_WAITACK(); for(n=0;n<128;n++) { SEND_BYTE(OLED_GRAM[n][i]); I2C_WAITACK(); } I2C_Stop(); } } //清屏函数 void OLED_Clear(void) { u8 i,n; for(i=0;i<8;i++) { for(n=0;n<128;n++) { OLED_GRAM[n][i]=0;//清除所有数据 } } OLED_Refresh();//更新显示 } //画点 //x:0~127 //y:0~63 //t:1 填充 0,清空 void OLED_DrawPoint(u8 x,u8 y,u8 t) { u8 i,m,n; i=y/8; m=y%8; n=1<<m; if(t){OLED_GRAM[x][i]|=n;} else { OLED_GRAM[x][i]=~OLED_GRAM[x][i]; OLED_GRAM[x][i]|=n; OLED_GRAM[x][i]=~OLED_GRAM[x][i]; } } //画线 //x1,y1:起点坐标 //x2,y2:结束坐标 void OLED_DrawLine(u8 x1,u8 y1,u8 x2,u8 y2,u8 mode) { u16 t; int xerr=0,yerr=0,delta_x,delta_y,distance; int incx,incy,uRow,uCol; delta_x=x2-x1; //计算坐标增量 delta_y=y2-y1; uRow=x1;//画线起点坐标 uCol=y1; if(delta_x>0)incx=1; //设置单步方向 else if (delta_x==0)incx=0;//垂直线 else {incx=-1;delta_x=-delta_x;} if(delta_y>0)incy=1; else if (delta_y==0)incy=0;//水平线 else {incy=-1;delta_y=-delta_x;} if(delta_x>delta_y)distance=delta_x; //选取基本增量坐标轴 else distance=delta_y; for(t=0;t<distance+1;t++) { OLED_DrawPoint(uRow,uCol,mode);//画点 xerr+=delta_x; yerr+=delta_y; if(xerr>distance) { xerr-=distance; uRow+=incx; } if(yerr>distance) { yerr-=distance; uCol+=incy; } } } //x,y:圆心坐标 //r:圆的半径 void OLED_DrawCircle(u8 x,u8 y,u8 r) { int a, b,num; a = 0; b = r; while(2 * b * b >= r * r) { OLED_DrawPoint(x + a, y - b,1); OLED_DrawPoint(x - a, y - b,1); OLED_DrawPoint(x - a, y + b,1); OLED_DrawPoint(x + a, y + b,1); OLED_DrawPoint(x + b, y + a,1); OLED_DrawPoint(x + b, y - a,1); OLED_DrawPoint(x - b, y - a,1); OLED_DrawPoint(x - b, y + a,1); a++; num = (a * a + b * b) - r*r;//计算画的点离圆心的距离 if(num > 0) { b--; a--; } } } //在指定位置显示一个字符,包括部分字符 //x:0~127 //y:0~63 //size1:选择字体 6x8/6x12/8x16/12x24 //mode:0,反色显示;1,正常显示 void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size1,u8 mode) { u8 i,m,temp,size2,chr1; u8 x0=x,y0=y; if(size1==8)size2=6; else size2=(size1/8+((size1%8)?1:0))*(size1/2); //得到字体一个字符对应点阵集所占的字节数 chr1=chr-' '; //计算偏移后的值 for(i=0;i<size2;i++) { if(size1==8) {temp=asc2_0806[chr1][i];} //调用0806字体 else if(size1==12) {temp=asc2_1206[chr1][i];} //调用1206字体 else if(size1==16) {temp=asc2_1608[chr1][i];} //调用1608字体 else if(size1==24) {temp=asc2_2412[chr1][i];} //调用2412字体 else return; for(m=0;m<8;m++) { if(temp&0x01)OLED_DrawPoint(x,y,mode); else OLED_DrawPoint(x,y,!mode); temp>>=1; y++; } x++; if((size1!=8)&&((x-x0)==size1/2)) {x=x0;y0=y0+8;} y=y0; } } //显示字符串 //x,y:起点坐标 //size1:字体大小 //*chr:字符串起始地址 //mode:0,反色显示;1,正常显示 void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 size1,u8 mode) { while((*chr>=' ')&&(*chr<='~'))//判断是不是非法字符! { OLED_ShowChar(x,y,*chr,size1,mode); if(size1==8)x+=6; else x+=size1/2; chr++; } } //m^n u32 OLED_Pow(u8 m,u8 n) { u32 result=1; while(n--) { result*=m; } return result; } //显示数字 //x,y :起点坐标 //num :要显示的数字 //len :数字的位数 //size:字体大小 //mode:0,反色显示;1,正常显示 void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size1,u8 mode) { u8 t,temp,m=0; if(size1==8)m=2; for(t=0;t<len;t++) { temp=(num/OLED_Pow(10,len-t-1))%10; if(temp==0) { OLED_ShowChar(x+(size1/2+m)*t,y,'0',size1,mode); } else { OLED_ShowChar(x+(size1/2+m)*t,y,temp+'0',size1,mode); } } } //显示汉字 //x,y:起点坐标 //num:汉字对应的序号 //mode:0,反色显示;1,正常显示 void OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1,u8 mode) { u8 m,temp; u8 x0=x,y0=y; u16 i,size3=(size1/8+((size1%8)?1:0))*size1; //得到字体一个字符对应点阵集所占的字节数 for(i=0;i<size3;i++) { if(size1==16) {temp=Hzk1[num][i];}//调用16*16字体 else if(size1==24) {temp=Hzk2[num][i];}//调用24*24字体 else if(size1==32) {temp=Hzk3[num][i];}//调用32*32字体 else if(size1==64) {temp=Hzk4[num][i];}//调用64*64字体 else return; for(m=0;m<8;m++) { if(temp&0x01)OLED_DrawPoint(x,y,mode); else OLED_DrawPoint(x,y,!mode); temp>>=1; y++; } x++; if((x-x0)==size1) {x=x0;y0=y0+8;} y=y0; } } //num 显示汉字的个数 //space 每一遍显示的间隔 //mode:0,反色显示;1,正常显示 void OLED_ScrollDisplay(u8 num,u8 space,u8 mode) { u8 i,n,t=0,m=0,r; while(1) { if(m==0) { OLED_ShowChinese(128,24,t,16,mode); //写入一个汉字保存在OLED_GRAM[][]数组中 t++; } if(t==num) { for(r=0;r<16*space;r++) //显示间隔 { for(i=1;i<144;i++) { for(n=0;n<8;n++) { OLED_GRAM[i-1][n]=OLED_GRAM[i][n]; } } OLED_Refresh(); } t=0; } m++; if(m==16){m=0;} for(i=1;i<144;i++) //实现左移 { for(n=0;n<8;n++) { OLED_GRAM[i-1][n]=OLED_GRAM[i][n]; } } OLED_Refresh(); } } //x,y:起点坐标 //sizex,sizey,图片长宽 //BMP[]:要写入的图片数组 //mode:0,反色显示;1,正常显示 void OLED_ShowPicture(u8 x,u8 y,u8 sizex,u8 sizey,u8 BMP[],u8 mode) { u16 j=0; u8 i,n,temp,m; u8 x0=x,y0=y; sizey=sizey/8+((sizey%8)?1:0); for(n=0;n<sizey;n++) { for(i=0;i<sizex;i++) { temp=BMP[j]; j++; for(m=0;m<8;m++) { if(temp&0x01)OLED_DrawPoint(x,y,mode); else OLED_DrawPoint(x,y,!mode); temp>>=1; y++; } x++; if((x-x0)==sizex) { x=x0; y0=y0+8; } y=y0; } } } //OLED的初始化 void OLED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);//使能GPIO时钟 //GPIO初始化设置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 delay_ms(200); 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_Clear(); OLED_WR_Byte(0xAF,OLED_CMD); } //显示负数、浮点数字 //x,y :起点坐标 //num :要显示的数字 //len :数字的位数 //size:字体大小 //mode:0,反色显示;1,正常显示 //@n,小数点后位数,默认为2 void OLED_ShowFNum(u8 x,u8 y,double num,u8 len,u8 size,u8 mode) { u8 t,temp,i=0,m=0,n=2; u8 enshow=0,pointshow=0; u32 k; len--; if(size==8)m=2; if(num<0) { num=-num; i=1; //负数标志 } k=num*OLED_Pow(10,n); //此处为显示一位小数*10转化为整数,若要显示几位就@我(自己想办法) for(t=0;t<len;t++) { temp=(k/OLED_Pow(10,len-t-1 ))%10; if(enshow==0&&t<(len-2)) { if(temp==0) { if(((k/OLED_Pow(10,len-t-2)%10)!=0)&&(i==1))//判断是否为负数且在最高位前一位 { OLED_ShowChar(x+(size/2+m)*t,y,'-',size,mode); i=0; //清除判断后一位的标志 }else OLED_ShowChar(x+(size/2+m)*t,y,'0',size,mode);//如果没到数字就显示0 continue; }else enshow=1; //此处是判断是否要显示数字 } if(t==len-n)//判断是否为最后一位的前一位(显示一位小数) { OLED_ShowChar(x+(size/2+m)*t,y,'.',size,mode); OLED_ShowChar(x+(size/2+m)*(t+1),y,temp+'0',size,mode); pointshow=1; continue; } if(pointshow==1){ OLED_ShowChar(x+(size/2+m)*(t+1),y,temp+'0',size,mode); }else OLED_ShowChar(x+(size/2+m)*t,y,temp+'0',size,mode); //一位一位显示下去 } }(检查一下这个OLED配置,怎么使用才能保证oled数据刷新的时间更快)
08-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值