找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2794|回复: 19
收起左侧

STC8G1K08A单片机硬IIC 1.3 OLED DS18B20光敏传感器白天晚上图片切换程序

  [复制链接]
ID:921294 发表于 2022-11-17 13:25 | 显示全部楼层 |阅读模式
     利用空闲时间自学单片机 ,用1.3寸OLED DS18B20 光敏传感器来显示温度,白天和晚上图片切换。本人用的是1.3寸OLED,若用0.96寸OLED部分代码要做修改(代码中有注释),光敏传感器中的灵敏度可以调整。由于本人时间不是很足,又是自学,有不足的地方还请大家能指正,能学习和进步得更快一些。代码在附件中。

制作出来的实物图如下:
baitian.jpg wanshang.jpg

单片机源程序如下:
  1. #include "oled.h"
  2. #include "DS18b20.h"
  3. #include "gmcg.h"
  4. #include "bmp.h"



  5. int main(void)
  6. {        
  7.         
  8.          P3M1 = 0;   
  9.      P3M0 = 0;                                //P3设置为准双向口
  10.          P5M1 = 0;   
  11.      P5M0 = 0;                                //P3设置为准双向口
  12.          
  13.          iicInit();                               //硬件iic初始化
  14.      P_SW2 = 0x80;        
  15.          OLED_Init();                             //初始化OLED  
  16.          OLED_Clear();                            //清屏
  17.         

  18.             OLED_ShowCHinese(78,6,0);          //显示汉字好
  19.                 OLED_ShowCHinese(96,6,1);          //显示汉字开
  20.             OLED_ShowCHinese(114,6,2);         //显示汉字心
  21.                  OLED_ShowCHinese(0,6,3);          //显示汉字温
  22.                 OLED_ShowCHinese(18,6,4);         //显示汉字度
  23.              OLED_ShowString(34,6,":",16);
  24.             OLED_DrawBMP(90,1,128,5,BMP1);    //显示BMP1笑脸图片
  25.          
  26.         while(1)
  27.         {        
  28.         gettemp();
  29.                 OLED_Showm(43,6,TH,16);
  30.             delay_ms(1000);
  31.          
  32.                 if(gmIN == 0)                     //光敏传感器检测光强度高于一定值,AO针脚输出低电平
  33.      {      
  34.                 OLED_DrawBMP(0,0,88,5,BMP2) ;          //显示BMP2 白天太阳云朵
  35.          }
  36.          
  37.          else                                 //光敏传感器检测光强度低于一定值,AO针脚输出高电平
  38.          {
  39.                 OLED_DrawBMP(0,0,88,5,BMP5);               //显示BMP6 晚上月亮星星云朵
  40.          }

  41.         }         
  42.         
  43. }
  44.         
复制代码

Keil代码下载(附件内只含代码,不含其他任何文件):
(5)STC8G1K08A 硬IIC光敏传感器白天晚上图片切换.zip (181.26 KB, 下载次数: 114)

评分

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

查看全部评分

回复

使用道具 举报

ID:921294 发表于 2022-11-17 13:27 | 显示全部楼层
烧录频率要设为22.1184MHZ
回复

使用道具 举报

ID:237354 发表于 2022-11-17 22:04 | 显示全部楼层
锁紧座电路板起什么作用?
回复

使用道具 举报

ID:921294 发表于 2022-11-18 09:10 | 显示全部楼层
那是STC烧录器,也可以烧录插件IC
回复

使用道具 举报

ID:1047308 发表于 2022-11-18 12:06 | 显示全部楼层
我也在自学,有不明白的地方还要请教
回复

使用道具 举报

ID:688905 发表于 2022-11-18 13:59 来自手机 | 显示全部楼层
给楼主点赞!我也是初学者,请问STC8G1K08A能否实现这个功能:同时输出2路pwm信号。一路频率固定占空比可调,用于产生稳定的直流可调电压;一路输出占空比50%频率可在1-4mhz间调整,用作测试信号。
回复

使用道具 举报

ID:468878 发表于 2022-11-18 14:39 | 显示全部楼层
skyrusher 发表于 2022-11-18 13:59
给楼主点赞!我也是初学者,请问STC8G1K08A能否实现这个功能:同时输出2路pwm信号。一路频率固定占空比可调 ...

你这个功能是可以,但是以单片机的速率,输出4MHZ应该是不可能的,几百PWMK都很勉强。可以输出分频主时钟信号,频率会高点,但也到不了4M。
回复

使用道具 举报

ID:921294 发表于 2022-11-18 17:43 | 显示全部楼层
  用STC8G1K08A可以实现同时输出2路PWM,用PCA    T0    T1  都可以实现PWM,可以参考一下STC—ISP下载软件上的范例程序。和楼上的意见相同,用系统时钟分频,最后输出频率到不了那么高。
回复

使用道具 举报

ID:688905 发表于 2022-11-18 19:02 | 显示全部楼层
:handshake 谢谢上面两位耐心解答!
回复

使用道具 举报

ID:1042619 发表于 2022-11-30 14:38 | 显示全部楼层
JPG.2.png
回复

使用道具 举报

ID:28625 发表于 2022-12-2 08:03 | 显示全部楼层
0.96的4针可以通用吗
回复

使用道具 举报

ID:433219 发表于 2022-12-2 11:34 | 显示全部楼层
gxgllzh123 发表于 2022-12-2 08:03
0.96的4针可以通用吗

要看oled上的驱动ic是什么型号
回复

使用道具 举报

ID:28625 发表于 2022-12-2 20:26 | 显示全部楼层
wkman 发表于 2022-12-2 11:34
要看oled上的驱动ic是什么型号

1306的
回复

使用道具 举报

ID:921294 发表于 2022-12-3 11:11 | 显示全部楼层
    我用的是1.3寸的OLED,有2块分别从2个不同的地方买的,都是IIC的,驱动全是1116的,虽然背面元件排列有点不同,但2个屏完全通用。
回复

使用道具 举报

ID:1042702 发表于 2022-12-5 09:30 | 显示全部楼层

写的太好了,可以好好学习了
回复

使用道具 举报

ID:28625 发表于 2022-12-11 14:09 | 显示全部楼层
我用STC8H8K64U上午芯片点不亮呢?
回复

使用道具 举报

ID:28625 发表于 2022-12-11 15:19 | 显示全部楼层
为什么我用STC8H8K64U写不成功呢
回复

使用道具 举报

ID:654797 发表于 2022-12-11 18:46 | 显示全部楼层
STC8的芯片好像不能用STC89的烧录座烧程序了呀!用什么烧录座才行呀
回复

使用道具 举报

ID:921294 发表于 2022-12-13 19:08 | 显示全部楼层
    今天下午刚收到了一块大科电子的STC8H8K64U的最小系统板,测试了一下,烧录到里面OLED是不亮的。对比了一下8G和8H的手册硬IIC内容,没看出来有什么明显的区别,参照了STC—ISP上的硬IIC例程修改了一下部分代码,还是不行,但是用软IIC 8G和8H就都没有问题。感到一头雾水,为啥硬IIC 8G行,8H就不行。
     看了一些资料,硬IIC和软IIC各有优点:
     1. 硬件IIC用法稍复杂,模拟IIC的流程更清楚一些。
     2. 硬件IIC速度比模拟快,并且可以用DMA
     3. 模拟IIC可以在任何管脚上,而硬件只能在固定管脚上。
     想到了前阵子用硬IIC同一个SDA和SCL接2个器件时,就出现问题,用软IIC也是没有问题。想到这里,我就把 iicInit(); 从MAIN主函数里直接放到void OLED_Init(void)里就好了。
   现在测试好了,显示正常。

   
回复

使用道具 举报

ID:1034178 发表于 2023-10-17 11:07 来自手机 | 显示全部楼层
1306oled屏i2c地址是0x3c还是ox78?我在arduino用3c点亮,怎么keil例程全是0x78?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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