|
某宝淘了个单片机温度计,没显示,没代码,没参数,没有图,除了便宜,再没优点,几乎就壳子能用,老板按壳子价出的。自用手电透光法画出了单片机定意图,弄了两程序,成功驱动。
电路原理图如下:
- #include "STC15.H"
- #include "codetab_Hygrothermograph.h"//OLED字库
- #include "OLED_Hygrothermograph.h"//OLED基本驱动函数
- void OLED_FormName(unsigned char x, y)//在指定位置显示HFont字符组
- {
- unsigned char i=0,j=0;
- for(j=0;j<17;j++)
- {
- OLED_Set_Pos(x,y);
- for(i=0;i<6;i++)
- OLED_WrDat(HFont[i+j*6]);
- x+=6;
- }
- }
- void OLED_FormLine(unsigned char x, y)//在指定位置显示HFont字符组
- {
- unsigned char i=0,j=0;
- for(j=0;j<18;j++)
- {
- OLED_Set_Pos(x,y);
- for(i=0;i<6;i++)
- OLED_WrDat(LineFont[i]);
- x+=6;
- }
- }
- void OLED_FormTitle(unsigned char x,y)//主标题
- {
- unsigned char i=0,j=0;
- for(j=0;j<13;j++)
- {
- OLED_Set_Pos(x,y);
- for(i=0;i<8;i++)
- {
- OLED_WrDat(TitleFont[j*16+i]);
- }
- OLED_Set_Pos(x,y+1);
-
- for(i=0;i<8;i++)
- {
- OLED_WrDat(TitleFont[j*16+i+8]);
- }
- x+=8;
- }
- }
- void OLED_FormTemp(unsigned char x,y)//温度标识
- {
- unsigned char i=0,j=0;
- for(j=0;j<5;j++)
- {
- OLED_Set_Pos(x,y);
- for(i=0;i<8;i++)
- {
- OLED_WrDat(TempFont[j*16+i]);
- }
- OLED_Set_Pos(x,y+1);
-
- for(i=0;i<8;i++)
- {
- OLED_WrDat(TempFont[j*16+i+8]);
- }
- x+=8;
- }
- }
- void OLED_FormHumi(unsigned char x,y)//湿度标识
- {
- unsigned char i=0,j=0;
- for(j=0;j<4;j++)
- {
- OLED_Set_Pos(x,y);
- for(i=0;i<8;i++)
- {
- OLED_WrDat(HumiFont[j*16+i]);
- }
- OLED_Set_Pos(x,y+1);
-
- for(i=0;i<8;i++)
- {
- OLED_WrDat(HumiFont[j*16+i+8]);
- }
- x+=8;
- }
- }
- void OLED_AnyChar_16X16(unsigned char x, y,unsigned char anystr_temp[])//在指定位置显示一个指定的16X16字符
- //x:选定行第几个像素点;y:选定的行数(以16个列像素为单位);待显示的字符串
- {
- unsigned char i=0;
- if(x>112)//如果指定的行超界,那么转到下一行第一个位置
- {
- x=0;y++;
- }
-
- OLED_Set_Pos(x,y);//置写入位
-
- for(i=0;i<16;i++)
- {
- OLED_WrDat(anystr_temp[i]);//在字模表中查找相应位置的字模,并写入到指定位置
- }
-
- OLED_Set_Pos(x,y+1);//写入位下移半个单位
-
- for(i=0;i<16;i++)
- {
- OLED_WrDat(anystr_temp[i+16]);
- }
- }
- void OLED_AnyChar_8X16(unsigned char x, y,unsigned char anystr_temp[])//在指定位置显示一个指定的8X16字符
- //x:选定行第几个像素点;y:选定的行数(以16个列像素为单位);待显示的字符串
- {
- unsigned char i=0;
- if(x>112)//如果指定的行超界,那么转到下一行第一个位置
- {
- x=0;y++;
- }
-
- OLED_Set_Pos(x,y);//置写入位
-
- for(i=0;i<8;i++)
- {
- OLED_WrDat(anystr_temp[i]);//在字模表中查找相应位置的字模,并写入到指定位置
- }
-
- OLED_Set_Pos(x,y+1);//写入位下移半个单位
-
- for(i=0;i<8;i++)
- {
- OLED_WrDat(anystr_temp[i+8]);
- }
- }
- void OLED_DataDisplay_H(unsigned char x, y,unsigned int display_temp[])//定制的数据显示函数
- //x:选定行第几个像素点;y:选定的行数(以16个列像素为单位);待显示的数字字符串
- {
- unsigned char i=0,j=0;
- for(j=0;j<2;j++)//写整数数据
- {
- OLED_Set_Pos(x,y);//置写入位
- for(i=0;i<8;i++)
- {
- OLED_WrDat(NumberFont[display_temp[j]*16+i]);//在字模表中查找相应位置的字模,并写入到指定位置
- }
- OLED_Set_Pos(x,y+1);//写入位下移半个单位
- for(i=0;i<8;i++)
- {
- OLED_WrDat(NumberFont[display_temp[j]*16+i+8]);
- }
- x+=8;
- }
- }
- void OLED_DataDisplay_T(unsigned char x, y,unsigned int display_temp[])//定制的数据显示函数
- //x:选定行第几个像素点;y:选定的行数(以16个列像素为单位);待显示的数字字符串
- {
- unsigned char i=0,j=0;
- for(j=0;j<2;j++)//写整数数据
- {
- OLED_Set_Pos(x,y);//置写入位
- for(i=0;i<8;i++)
- {
- OLED_WrDat(NumberFont[display_temp[j]*16+i]);//在字模表中查找相应位置的字模,并写入到指定位置
- }
- OLED_Set_Pos(x,y+1);//写入位下移半个单位
- for(i=0;i<8;i++)
- {
- OLED_WrDat(NumberFont[display_temp[j]*16+i+8]);
- }
- x+=8;
- }
- x+=8;
- OLED_Set_Pos(x,y);//置写入位
- for(i=0;i<8;i++)
- {
- OLED_WrDat(NumberFont[display_temp[j]*16+i]);//在字模表中查找相应位置的字模,并写入到指定位置
- }
- OLED_Set_Pos(x,y+1);//写入位下移半个单位
- for(i=0;i<8;i++)
- {
- OLED_WrDat(NumberFont[display_temp[j]*16+i+8]);
- }
- }
复制代码
|
评分
-
查看全部评分
|