找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3213|回复: 6
收起左侧

二手STC15F104E单片机温度器升级

[复制链接]
ID:358930 发表于 2018-11-20 23:02 | 显示全部楼层 |阅读模式
某宝淘了个单片机温度计,没显示,没代码,没参数,没有图,除了便宜,再没优点,几乎就壳子能用,老板按壳子价出的。自用手电透光法画出了单片机定意图,弄了两程序,成功驱动。

电路原理图如下:
20181119_223407.jpg

20181120_001002.jpg 20181120_001219.jpg
  1. #include "STC15.H"
  2. #include "codetab_Hygrothermograph.h"//OLED字库
  3. #include "OLED_Hygrothermograph.h"//OLED基本驱动函数

  4. void OLED_FormName(unsigned char x, y)//在指定位置显示HFont字符组
  5. {
  6.         unsigned char i=0,j=0;
  7.         for(j=0;j<17;j++)
  8.         {
  9.                 OLED_Set_Pos(x,y);
  10.                 for(i=0;i<6;i++)
  11.                 OLED_WrDat(HFont[i+j*6]);
  12.                 x+=6;
  13.         }
  14. }

  15. void OLED_FormLine(unsigned char x, y)//在指定位置显示HFont字符组
  16. {
  17.         unsigned char i=0,j=0;
  18.         for(j=0;j<18;j++)
  19.         {
  20.                 OLED_Set_Pos(x,y);
  21.                 for(i=0;i<6;i++)
  22.                 OLED_WrDat(LineFont[i]);
  23.                 x+=6;
  24.         }
  25. }

  26. void OLED_FormTitle(unsigned char x,y)//主标题
  27. {
  28.         unsigned char i=0,j=0;
  29.         for(j=0;j<13;j++)
  30.         {
  31.                 OLED_Set_Pos(x,y);

  32.                 for(i=0;i<8;i++)
  33.                 {
  34.                         OLED_WrDat(TitleFont[j*16+i]);
  35.                 }
  36.                 OLED_Set_Pos(x,y+1);
  37.                
  38.                 for(i=0;i<8;i++)
  39.                 {
  40.                         OLED_WrDat(TitleFont[j*16+i+8]);
  41.                 }
  42.                 x+=8;
  43.         }
  44. }

  45. void OLED_FormTemp(unsigned char x,y)//温度标识
  46. {
  47.         unsigned char i=0,j=0;
  48.         for(j=0;j<5;j++)
  49.         {
  50.                 OLED_Set_Pos(x,y);

  51.                 for(i=0;i<8;i++)
  52.                 {
  53.                         OLED_WrDat(TempFont[j*16+i]);
  54.                 }
  55.                 OLED_Set_Pos(x,y+1);
  56.                
  57.                 for(i=0;i<8;i++)
  58.                 {
  59.                         OLED_WrDat(TempFont[j*16+i+8]);
  60.                 }
  61.                 x+=8;
  62.         }
  63. }

  64. void OLED_FormHumi(unsigned char x,y)//湿度标识
  65. {
  66.         unsigned char i=0,j=0;
  67.         for(j=0;j<4;j++)
  68.         {
  69.                 OLED_Set_Pos(x,y);

  70.                 for(i=0;i<8;i++)
  71.                 {
  72.                         OLED_WrDat(HumiFont[j*16+i]);
  73.                 }
  74.                 OLED_Set_Pos(x,y+1);
  75.                
  76.                 for(i=0;i<8;i++)
  77.                 {
  78.                         OLED_WrDat(HumiFont[j*16+i+8]);
  79.                 }
  80.                 x+=8;
  81.         }
  82. }

  83. void OLED_AnyChar_16X16(unsigned char x, y,unsigned char anystr_temp[])//在指定位置显示一个指定的16X16字符
  84. //x:选定行第几个像素点;y:选定的行数(以16个列像素为单位);待显示的字符串
  85. {
  86.         unsigned char i=0;
  87.         if(x>112)//如果指定的行超界,那么转到下一行第一个位置
  88.         {
  89.                 x=0;y++;
  90.         }
  91.         
  92.         OLED_Set_Pos(x,y);//置写入位
  93.         
  94.         for(i=0;i<16;i++)
  95.         {
  96.         OLED_WrDat(anystr_temp[i]);//在字模表中查找相应位置的字模,并写入到指定位置
  97.         }
  98.         
  99.         OLED_Set_Pos(x,y+1);//写入位下移半个单位
  100.                
  101.         for(i=0;i<16;i++)
  102.         {
  103.                 OLED_WrDat(anystr_temp[i+16]);
  104.         }
  105. }

  106. void OLED_AnyChar_8X16(unsigned char x, y,unsigned char anystr_temp[])//在指定位置显示一个指定的8X16字符
  107. //x:选定行第几个像素点;y:选定的行数(以16个列像素为单位);待显示的字符串
  108. {
  109.         unsigned char i=0;
  110.         if(x>112)//如果指定的行超界,那么转到下一行第一个位置
  111.         {
  112.                 x=0;y++;
  113.         }
  114.         
  115.         OLED_Set_Pos(x,y);//置写入位
  116.         
  117.         for(i=0;i<8;i++)
  118.         {
  119.         OLED_WrDat(anystr_temp[i]);//在字模表中查找相应位置的字模,并写入到指定位置
  120.         }
  121.         
  122.         OLED_Set_Pos(x,y+1);//写入位下移半个单位
  123.                
  124.         for(i=0;i<8;i++)
  125.         {
  126.                 OLED_WrDat(anystr_temp[i+8]);
  127.         }
  128. }

  129. void OLED_DataDisplay_H(unsigned char x, y,unsigned int display_temp[])//定制的数据显示函数
  130. //x:选定行第几个像素点;y:选定的行数(以16个列像素为单位);待显示的数字字符串
  131. {
  132.         unsigned char i=0,j=0;
  133.         for(j=0;j<2;j++)//写整数数据
  134.         {
  135.                 OLED_Set_Pos(x,y);//置写入位
  136.                 for(i=0;i<8;i++)
  137.                 {
  138.                         OLED_WrDat(NumberFont[display_temp[j]*16+i]);//在字模表中查找相应位置的字模,并写入到指定位置
  139.                 }
  140.                 OLED_Set_Pos(x,y+1);//写入位下移半个单位
  141.                 for(i=0;i<8;i++)
  142.                 {
  143.                         OLED_WrDat(NumberFont[display_temp[j]*16+i+8]);
  144.                 }
  145.                 x+=8;
  146.         }
  147. }

  148. void OLED_DataDisplay_T(unsigned char x, y,unsigned int display_temp[])//定制的数据显示函数
  149. //x:选定行第几个像素点;y:选定的行数(以16个列像素为单位);待显示的数字字符串
  150. {
  151.         unsigned char i=0,j=0;
  152.         for(j=0;j<2;j++)//写整数数据
  153.         {
  154.                 OLED_Set_Pos(x,y);//置写入位
  155.                 for(i=0;i<8;i++)
  156.                 {
  157.                         OLED_WrDat(NumberFont[display_temp[j]*16+i]);//在字模表中查找相应位置的字模,并写入到指定位置
  158.                 }
  159.                 OLED_Set_Pos(x,y+1);//写入位下移半个单位
  160.                 for(i=0;i<8;i++)
  161.                 {
  162.                         OLED_WrDat(NumberFont[display_temp[j]*16+i+8]);
  163.                 }
  164.                 x+=8;
  165.         }
  166.         x+=8;
  167.                 OLED_Set_Pos(x,y);//置写入位
  168.                 for(i=0;i<8;i++)
  169.                 {
  170.                         OLED_WrDat(NumberFont[display_temp[j]*16+i]);//在字模表中查找相应位置的字模,并写入到指定位置
  171.                 }
  172.                 OLED_Set_Pos(x,y+1);//写入位下移半个单位
  173.                 for(i=0;i<8;i++)
  174.                 {
  175.                         OLED_WrDat(NumberFont[display_temp[j]*16+i+8]);
  176.                 }
  177. }
复制代码


595数码显STC15F104E18B20温度OK.zip

59.03 KB, 下载次数: 27, 下载积分: 黑币 -5

OLED128显STC15F104EHT11温湿计OK2.zip

54.69 KB, 下载次数: 29, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:358930 发表于 2018-11-20 23:07 | 显示全部楼层
样子不错,没科技感,主要没源代码不受控制,只能升级了。
15427262601830.33752576610976504.jpg
15427262601830.33752576610976504.jpg
回复

使用道具 举报

ID:442950 发表于 2018-12-25 18:13 | 显示全部楼层
这传感器用的什么的
回复

使用道具 举报

ID:358930 发表于 2018-12-27 04:43 | 显示全部楼层
三种,18B20和DHT12和LM35A
原装的是LM35A论坛我发过原装LM35A测温度的,很好用。
回复

使用道具 举报

ID:412814 发表于 2019-1-25 14:40 | 显示全部楼层
厉害了,研究下。谢谢楼主
回复

使用道具 举报

ID:1030595 发表于 2023-12-26 10:38 | 显示全部楼层
如何接显示屏?
回复

使用道具 举报

ID:1030595 发表于 2023-12-26 11:15 | 显示全部楼层
厉害了我的果,8个脚mcu,玩出了最多的功能!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表