找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7671|回复: 12
打印 上一主题 下一主题
收起左侧

STC15单片机+DS3231+DS18B20+DHT11+OLED12864+ESP8266_01S组成网络时间 有待改善

  [复制链接]
跳转到指定楼层
#
每个文件分开   可以少点弯路   


制作出来的实物图如下:


单片机源程序如下:
  1. #include "delay.h"
  2. #include "oled12864.h"
  3. #include "uart.h"
  4. #include "esp8266.h"
  5. #include "ds18b20.h"
  6. #include "DHT11.h"
  7. #include "DS3231.h"

  8. sbit led1=P0^6;
  9. sbit led2=P0^7;
  10. uint8 a,wendu;
  11. uint16 b,c;

  12. void riqi(void);
  13. void shijian(void);
  14. void Uart2_Init(void);

  15. /*********************定时器函数************************************/

  16. void Timer0Init()                //100微秒@22.1184MHz
  17. {
  18.         AUXR |= 0x80;                //定时器时钟1T模式
  19.         TMOD &= 0xF0;                //设置定时器模式
  20.         TL0 = 0x5C;                //设置定时初始值
  21.         TH0 = 0xF7;                //设置定时初始值
  22.         TF0 = 0;                //清除TF0标志
  23.         TR0 = 1;                //定时器0开始计时
  24. }
  25. void Timer1Init()                //1000微秒@22.1184MHz
  26. {
  27.         AUXR |= 0x40;                //定时器时钟1T模式
  28.         TMOD &= 0x0F;                //设置定时器模式
  29.         TL1 = 0x9A;                //设置定时初始值
  30.         TH1 = 0xA9;                //设置定时初始值
  31.         TF1 = 0;                //清除TF1标志
  32.         TR1 = 1;                //定时器1开始计时
  33. }
  34. void timer0() interrupt 1
  35. {
  36.         TL0 = 0x5C;                //设置定时初始值
  37.         TH0 = 0xF7;                //设置定时初始值
  38.         TF0 = 0;
  39.         b++;
  40.         if(b>1000)
  41.         {
  42.         b=0;
  43.         led1=~led1;
  44.         }
  45. }
  46. void timer1() interrupt 3 //定时器1的中断
  47. {
  48.         TL1 = 0x9A;                //设置定时初始值
  49.         TH1 = 0xA9;                //设置定时初始值
  50.         c++;
  51.         if(c>1000)
  52.         {
  53.         c=0;
  54.         led2=~led2;
  55.         }
  56. }

  57. void duishi()
  58. {
  59.        
  60.         delayms(1000);
  61.         UART2_SendStr("GET http://api.k780.com:88/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json\r\n\r\n");
  62.         nian=(Data[6]-48)*10+(Data[7]-48);
  63.         yue=(Data[9]-48)*10+(Data[10]-48);
  64.         ri=(Data[12]-48)*10+(Data[13]-48);
  65.         zhou=Data2[4]-48;
  66.         shi=(Data[15]-48)*10+(Data[16]-48);
  67.         fen=(Data[18]-48)*10+(Data[19]-48);
  68.         miao=(Data[21]-48)*10+(Data[22]-48)+4;
  69.         if(miao>60)  {miao=60;fen+=1;}
  70.         Ds3231Init();
  71.         //SendString("+++");

  72. }

  73. void main()
  74. {
  75.         Timer0Init();//初始化定时器0
  76.         Timer1Init();//初始化定时器1
  77.        
  78.         EA=1;//开启总中断
  79.         ET0=1;//开启定时器0中断
  80.         ET1=1;//开启定时器1中断
  81.        
  82.         Delayus(6000);
  83.         P0M0=0X00;P0M1=0X00;
  84.         P1M0=0X00;P1M1=0X00;
  85.         P2M0=0X00;P2M1=0X00;
  86.         P3M0=0X00;P3M1=0X00;
  87.         P4M0=0X00;P4M1=0X00;
  88.         P5M0=0X00;P5M1=0X00;
  89.         P6M0=0X00;P6M1=0X00;

  90.         OLED_Init();
  91.         OLED_Fill(0xff);
  92.         delayms(200);
  93.         OLED_Fill(0x00);
  94.         delayms(200);
  95.         OLED_CLS();
  96.        
  97.         Uart2_Init();
  98.        
  99.         zhoucqh();

  100.         ESP8266_Init();
  101.         duishi();

  102.        

  103.        
  104.         while(1)
  105.         {
  106.                 temget();
  107.                 wendu=temget();
  108.                
  109.                 DHT11_receive();
  110.                
  111.                 Ds3231ReadTime();
  112.                 shijian();
  113.                 riqi();
  114.         }       
  115. }

  116. void riqi(void)
  117. {
  118.         OLED_P8x16Ch(0,0,yue/10);
  119.         OLED_P8x16Ch(8,0,yue%10);  
  120.         OLED_P8x16Ch(16,0,13);
  121.         OLED_P8x16Ch(24,0,ri/10);
  122.         OLED_P8x16Ch(32,0,ri%10);
  123.         OLED_P8x16Ch(80,0,12);
  124.         OLED_P8x16Ch(88,0,wendu%100/10);
  125.         OLED_P8x16Ch(96,0,wendu%10);
  126.         OLED_P8x16Ch(104,0,11);
  127.         OLED_P8x16Ch(112,0,RH/10);
  128.         OLED_P8x16Ch(120,0,RH%10);
  129. }
  130. void shijian(void)
  131. {
  132.         OLED_P16x32Ch(0,2,shi/10);
  133.         OLED_P16x32Ch(16,2,shi%10);
  134.         OLED_P16x32Ch(32,2,10);
  135.         OLED_P16x32Ch(48,2,fen/10);
  136.         OLED_P16x32Ch(64,2,fen%10);
  137.         OLED_P16x32Ch(80,2,10);
  138.         OLED_P16x32Ch(96,2,miao/10);
  139.         OLED_P16x32Ch(112,2,miao%10);
  140.        
  141.         OLED_P16x16Ch(0,6,24);
  142.         OLED_P16x16Ch(16,6,25);
  143.         if(zhou==0)OLED_P16x16Ch(32,6,26);
  144.         else OLED_P16x16Ch(32,6,zhou);
  145. }
复制代码

程序还有待改善,大家一起完善下:
oled学习.rar (85.02 KB, 下载次数: 494)


评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏34 分享淘帖 顶5 踩
回复

使用道具 举报

来自 12#
ID:834389 发表于 2021-5-8 07:49 | 只看该作者
本帖最后由 735251 于 2021-5-8 07:59 编辑

备注下:mcu频率为22.1184     esp8266 115200     DHT11对时钟要求较高,个人修改要注意,  定时器为附带,可以删除
回复

使用道具 举报

11#
ID:140489 发表于 2023-2-7 13:48 | 只看该作者
原来WiFi模块插上OLED 屏幕就闪,是我的51开发板的3.3V有问题,换单独的3.3V电源就好了
在串口助手里面设置WiFi模块方法如下:
esp8266获取网络时间
1.使用串口发送指令AT+CWMODE=1设置模块Wi-Fi应用模式为Station模式;

2.发送指令AT+RST重启模块使应用模式更改生效;

3.发送指令AT+CWJAP ="ssid","pwd"连接AP;

4.发送指令AT+CIPMUX=0设置模块为单路连接模式,模块默认为单路连接模式;

5.发送指令AT+CIPSTART="TCP","api.k780.com",80 与服务器建立TCP连接 ;

6.发送指令AT+CIPMODE=1设置模块传输模式为透传模式;

7.发送指令AT+CIPSEND开启透传模式向服务器发送数据,模块收到此指令后先换行后返回“>”

8.剩下只需要发送 GET http://api.k780.com:88/?app=life ... t=json&HTTP/1.1\r\n,就能获取到年月时间。

51hei截图20230207134554.png (100.44 KB, 下载次数: 53)

51hei截图20230207134554.png
回复

使用道具 举报

10#
ID:140489 发表于 2023-2-1 15:18 | 只看该作者
按照楼主的程序,单片机用的STC15F2K60S2,接上WiFi模块(接在单片机的串口2),OLED 屏幕闪烁,不显示字符,不接WiFi模块OLED能正常显示,请教这是什么原因呢?

51hei图片_20230201145845.jpg (72.31 KB, 下载次数: 68)

51hei图片_20230201145845.jpg

51hei图片编辑_20230201145817.jpg (41.3 KB, 下载次数: 60)

51hei图片编辑_20230201145817.jpg
回复

使用道具 举报

9#
ID:140489 发表于 2023-2-1 14:42 | 只看该作者
我单片机用的15F2K60S2,不接WiFi模块OLED能正常显示,接上WiFi模块OLED 屏幕就不停的闪,是什么原因呢?     WiFi模块用串口助手调试能获取到网络时间

51hei图片编辑_20230201145817.jpg (41.3 KB, 下载次数: 65)

51hei图片编辑_20230201145817.jpg

51hei图片_20230201145845.jpg (72.31 KB, 下载次数: 63)

51hei图片_20230201145845.jpg
回复

使用道具 举报

8#
ID:507540 发表于 2022-5-9 16:24 | 只看该作者
稍稍修改一下,ESP8266.c中的串口2中断函数里面,变量a,b应该为static
回复

使用道具 举报

7#
ID:507540 发表于 2022-4-24 14:49 | 只看该作者
非常不错,实测可用
回复

使用道具 举报

6#
ID:644764 发表于 2022-3-3 12:12 | 只看该作者
我正在进行中,学习一下
回复

使用道具 举报

5#
ID:466595 发表于 2022-2-10 17:55 | 只看该作者

谢谢,正在学习。十分感谢。
回复

使用道具 举报

地板
ID:1004419 发表于 2022-2-8 17:12 | 只看该作者
谢谢啦,可以学习一下,可以使用stm32单片机开发
回复

使用道具 举报

板凳
ID:507540 发表于 2021-12-14 16:16 | 只看该作者
相当不错的资源,下载来研究研究
回复

使用道具 举报

沙发
ID:270740 发表于 2021-6-3 10:27 | 只看该作者
谢谢啦,可以学习一下,可以使用stm32单片机开发
回复

使用道具 举报

楼主
ID:161785 发表于 2021-5-14 21:25 来自手机 | 只看该作者
谢谢,正在学习。十分感谢。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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