久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2111|回復: 0
打印 上一主題 下一主題
收起左側

STC15F2K60S2單片機萬年歷代碼 DS1302、內部eeprom、DHT11、1.3寸OLED

[復制鏈接]
跳轉到指定樓層
樓主


目前只實現了1、2、3、4和1、2、4
DS1302、內部eeprom、DHT11、1.3寸OLED

單片機源程序如下:
  1. #include <STC15F2K60S2.H>
  2. #include "oled.h"
  3. #include "Delay.h"
  4. #include <DHT.h>
  5. #include "MatrixKey.h"
  6. #include "Buzzer.h"
  7. #include "UART.h"
  8. #include "DS1302.H"
  9. #include "Timer0.h"
  10. #include "esp8266.h"
  11. #include "eeprom.h"

  12. sbit LED = P3^4;
  13. #define IAP_ADDRESS 0X000

  14. unsigned char tempH,MiniSec,tempL,humiH,humiL,KeyNum,MODE=0,Run=0,i,j,temp,TimeSetselect;
  15. unsigned char Sec=0,Min=0,Hour=0;
  16. unsigned char ReadTime[14];
  17. unsigned char receive[4];
  18. unsigned char code table[]="AT+CIPMUX=1\r\n";
  19. unsigned char code table1[]="AT+CIPSERVER=1,8080\r\n";
  20. char xdata clock1_hour=0,clock1_min=0;
  21. //unsigned char xdata clock1[7]="00:00";
  22. static unsigned int T0Count3;

  23. void TimeShow(void);
  24. void Stopwatch();
  25. void TimeSet(void);
  26. void Clock(void);
  27. void ESP8266(void);
  28. void Buzzer(void);
  29. void esp_init();
  30. void int_init();
  31. void eeprom(void);
  32. void EEPROM_Init(void);
  33. void Judge_Clock(void);

  34. void main(void)
  35. {
  36.         DHT11_Rst();
  37.         OLED_Init(); //初始化OLED  
  38.         OLED_Clear();
  39.          Buzzer();
  40.         UART_Init();
  41.         DS1302_Init();
  42.         Timer0Init();
  43.          EEPROM_Init();
  44. //                DS1302_SetTime();
  45. //                 DS1302_WriteByte(0x80,0x07);//關閉1302寫保護
  46. //        EEPROM_Erase(0);
  47.                 while(1)
  48.                 {
  49. //                LED=~LED;
  50. //                        OLED_ShowString(0,0,"hello");
  51.                 KeyNum=MatrixKey();
  52.         
  53.                 P42=0;
  54.                 if(KeyNum==13)
  55.                 {
  56.                                         P42=1;
  57.                                         Delay(100);
  58.                                         P42=0;
  59.                                 if(MODE==0){MODE=1;TimeSetselect=0;}
  60.                                 else if(MODE==1){MODE=0;OLED_Clear();DS1302_SetTime();}
  61.                 }
  62.                         if(KeyNum==14)
  63.                 {
  64.                                         P42=1;
  65.                                         Delay(100);
  66.                                         P42=0;
  67.                                 if(MODE==0){MODE=2;        OLED_Clear();}
  68.                                 else if(MODE==2){MODE=0;        OLED_Clear();         }
  69.                 }
  70.                                         if(KeyNum==15)
  71.                 {
  72.                                         P42=1;
  73.                                         Delay(100);
  74.                                         P42=0;
  75.                                 if(MODE==0){MODE=3;        OLED_Clear();}
  76.                                 else if(MODE==3){MODE=0;        OLED_Clear();        Judge_Clock(); }
  77.                 }
  78.                 if(KeyNum==9)
  79.                 {
  80.                                 P42=1;
  81.                                         Delay(100);
  82.                                         P42=0;
  83.                         Run=~Run;        
  84. //                                                Run=1;        
  85.                 }
  86.                         if(KeyNum==10)
  87.                         {
  88.                                         P42=1;
  89.                                         Delay(100);
  90.                                         P42=0;
  91.                                 Sec=0;
  92.                                 Min=0;
  93.                                 MiniSec=0;
  94.                         }
  95.                                         if(KeyNum==7)
  96.                 {
  97.                                         P42=1;
  98.                                         Delay(100);
  99.                                         P42=0;
  100.                                 if(MODE==0){MODE=4;        OLED_Clear();}
  101.                                 else if(MODE==4){MODE=0;        OLED_Clear();         }
  102.                 }
  103.                                                 if(KeyNum==8)
  104.                 {
  105.                                         P42=1;
  106.                                         Delay(100);
  107.                                         P42=0;
  108.                                 if(MODE==0){MODE=5;        OLED_Clear();}
  109.                                 else if(MODE==5){MODE=0;        OLED_Clear();         }
  110.                 }
  111.                 switch(MODE)
  112.                 {
  113.                         case 0:TimeShow();break;
  114.                         case 1:TimeSet();break;
  115.                         case 2:Stopwatch();break;
  116.                         case 3:Clock();break;
  117.                         case 4:ESP8266();break;
  118.                         case 5:eeprom();break;
  119.                 }

  120.                 }
  121.         }
  122. void ESP8266(void)
  123. {
  124. //        int_init();                                                                //中斷初始化,定時器初始化
  125. //        esp_init();                                                //模塊初始化,發送那兩條指令
  126. //                if(receive[1]=='1'){                                //收到1點亮LED
  127. //                                P34 =0 ;
  128. //                }
  129. //                else P34 =1;        

  130.         DS1302_ReadTime2();
  131.         ReadTime[0]=(DS1302_Time[0]>>4);   //分離出年十位
  132.   ReadTime[1]=(DS1302_Time[0]&0x0F); //分離出年個位
  133.   
  134.         ReadTime[2]=(DS1302_Time[1]>>4);   //分離出月十位
  135.   ReadTime[3]=(DS1302_Time[1]&0x0F); //分離出月個位

  136.   ReadTime[4]=(DS1302_Time[2]>>4);   //分離出日十位
  137.   ReadTime[5]=(DS1302_Time[2]&0x0F); //分離出日個位

  138.   ReadTime[6]=(DS1302_Time[3]>>4);   //分離出小時十位
  139.   ReadTime[7]=(DS1302_Time[3]&0x0F); //分離出小時個位

  140.   ReadTime[8]=(DS1302_Time[4]>>4);   //分離出分鐘十位
  141.   ReadTime[9]=(DS1302_Time[4]&0x0F); //分離出分鐘個位
  142.   ReadTime[10]=(DS1302_Time[5]>>4);   //分離出秒鐘十位
  143.   ReadTime[11]=(DS1302_Time[5]&0x0F); //分離出秒鐘個位
  144.   Delay(10);
  145.         EA=0;
  146.         UART_SendByte(ReadTime[0]+48);//年
  147.         UART_SendByte(ReadTime[1]+48);
  148.         
  149.         UART_SendByte('-');

  150.         UART_SendByte(ReadTime[2]+48);//月
  151.         UART_SendByte(ReadTime[3]+48);   

  152.         UART_SendByte('-');

  153.   UART_SendByte(ReadTime[4]+48);//日
  154.         UART_SendByte(ReadTime[5]+48);

  155.         UART_SendByte(' ');

  156.   UART_SendByte(ReadTime[6]+48);//時
  157.         UART_SendByte(ReadTime[7]+48);

  158.         UART_SendByte(':');

  159.         UART_SendByte(ReadTime[8]+48);//分
  160.         UART_SendByte(ReadTime[9]+48);

  161.         UART_SendByte(':');

  162.         UART_SendByte(ReadTime[10]+48);//秒
  163.         UART_SendByte(ReadTime[11]+48);

  164.         UART_SendByte('\n');
  165.         SBUF='\n';
  166.           while(!TI);      //等待發送完畢
  167.     TI=0;           //清中斷
  168.                 EA=1;

  169.                 Delay(1000);
  170.                
  171. }
  172. void eeprom(void)
  173. {
  174.         unsigned char i;
  175. //        EEPROM_Erase(0x000);

  176.         for(i=0;i<1;i++)
  177.         {
  178.                 UART_SendByte(EERPOM_ReadByte(0x000));
  179.         }
  180.         

  181. }
  182. void Clock(void)
  183. {
  184. //                        OLED_Clear();
  185. //                        clock1_hour=EERPOM_ReadByte(0x000);
  186.                         OLED_ShowString(0,0,"    Clock");
  187.                         OLED_ShowString(47,2,":");
  188.                         OLED_ShowNum(30,2,clock1_hour,2,16);
  189.                         OLED_ShowNum(54,2,clock1_min,2,16);
  190.                         
  191.                         if(KeyNum==1)        {clock1_hour++;if(clock1_hour>=24) clock1_hour=0;}
  192.                         if(KeyNum==2)        {clock1_hour--;if(clock1_hour<0) clock1_hour=23;}
  193.                         if(KeyNum==3) {clock1_min++;if(clock1_min>=60) clock1_min=0;}
  194.                         if(KeyNum==4)        {clock1_min--;if(clock1_min<0) clock1_min=59;}
  195. //                        EEPROM_WriteByte(0x000,clock1_hour);
  196.                         
  197. }
  198. void TimeShow(void)
  199. {
  200. //        Delay(1200);
  201.         DS1302_ReadTime();
  202.         OLED_ShowNum(0,0,DS1302_Time[0],2,16);
  203.         OLED_ShowString(17,0,"-");
  204.         OLED_ShowNum(24,0,DS1302_Time[1],2,16);
  205.         OLED_ShowString(41,0,"-");
  206.         OLED_ShowNum(48,0,DS1302_Time[2],2,16);
  207.         OLED_ShowNum(30,2,DS1302_Time[3],2,16);
  208.         OLED_ShowString(47,2,":");
  209.         OLED_ShowNum(54,2,DS1302_Time[4],2,16);
  210.         OLED_ShowString(71,2,":");
  211.         OLED_ShowNum(78,2,DS1302_Time[5],2,16);
  212.         OLED_ShowString(87,0,"DAY:");
  213.         OLED_ShowNum(120,0,DS1302_Time[6],1,16);
  214.         
  215.   DHT11_Read_Data(&tempH,&tempL,&humiH,&humiL);

  216.         OLED_ShowString(75,6,"T:");
  217.         OLED_ShowNum(95,6,tempH,2,16);                                                                                                   
  218. //        OLED_ShowNum(119,6,tempL,2,16);
  219.         OLED_ShowString(0,6,"H:");
  220.         OLED_ShowNum(20,6,humiH,2,16);
  221. //        OLED_ShowNum(44,6,humiL,2,16);
  222. //        OLED_ShowString(37,6,".");               

  223.         OLED_ShowString(50,6,"%");
  224.         

  225. }
  226. void TimeSet(void)
  227. {
  228.         
  229.                 if(KeyNum==16)
  230.         {
  231.                         P42=1;
  232.                         Delay(100);
  233.                         P42=0;
  234.                 TimeSetselect++;
  235.                 TimeSetselect%=6;
  236.         }
  237.                 OLED_ShowNum(102,2,TimeSetselect,2,16);
  238.         if(KeyNum==5)
  239.         {
  240.                        
  241.                 DS1302_Time[TimeSetselect]++;
  242.                 if(DS1302_Time[0]>99){DS1302_Time[0]=0;}
  243.                 if(DS1302_Time[1]>12){DS1302_Time[1]=1;}
  244.                 if(DS1302_Time[1]==1||DS1302_Time[1]==3||DS1302_Time[1]==3||DS1302_Time[1]==5||DS1302_Time[1]==7||DS1302_Time[1]==8||DS1302_Time[1]==10||DS1302_Time[1]==12){if(DS1302_Time[2]>31)
  245.                         {
  246.                         if(DS1302_Time[2]<1){DS1302_Time[2]=31;}//大月
  247.                         if(DS1302_Time[2]>31){DS1302_Time[2]=1;}}
  248.                         }
  249.                 else if(DS1302_Time[1]==4||DS1302_Time[1]==6||DS1302_Time[1]==9||DS1302_Time[1]==11)
  250.                         {
  251.                         if(DS1302_Time[2]<1){DS1302_Time[2]=30;}//小月
  252.                         if(DS1302_Time[2]>30){DS1302_Time[2]=1;}
  253.                         }
  254.                         else if(DS1302_Time[1]==2)
  255.                 {
  256.                         if(DS1302_Time[0]%4==0)
  257.                         {
  258.                                 if(DS1302_Time[2]<1){DS1302_Time[2]=29;}//閏年2月
  259.                                 if(DS1302_Time[2]>29){DS1302_Time[2]=1;}
  260.                         }
  261.                         else
  262.                         {
  263.                                 if(DS1302_Time[2]<1){DS1302_Time[2]=28;}//平年2月
  264.                                 if(DS1302_Time[2]>28){DS1302_Time[2]=1;}
  265.                         }
  266.                 }
  267.                 if(DS1302_Time[3]>23){DS1302_Time[3]=0;}
  268.                 if(DS1302_Time[4]>59){DS1302_Time[4]=0;}
  269.                 if(DS1302_Time[5]>59){DS1302_Time[5]=0;}
  270.                 }
  271.         if(KeyNum==6)//按鍵3按下
  272.         {
  273.                 DS1302_Time[TimeSetselect]--;//時間設置位數值減1
  274.                 if(DS1302_Time[0]<0){DS1302_Time[0]=99;}//年越界判斷
  275.                 if(DS1302_Time[1]<1){DS1302_Time[1]=12;}//月越界判斷
  276.                 if( DS1302_Time[1]==1 || DS1302_Time[1]==3 || DS1302_Time[1]==5 || DS1302_Time[1]==7 ||
  277.                         DS1302_Time[1]==8 || DS1302_Time[1]==10 || DS1302_Time[1]==12)//日越界判斷
  278.                 {
  279.                         if(DS1302_Time[2]<1){DS1302_Time[2]=31;}//大月
  280.                         if(DS1302_Time[2]>31){DS1302_Time[2]=1;}
  281.                 }
  282.                 else if(DS1302_Time[1]==4 || DS1302_Time[1]==6 || DS1302_Time[1]==9 || DS1302_Time[1]==11)
  283.                 {
  284.                         if(DS1302_Time[2]<1){DS1302_Time[2]=30;}//小月
  285.                         if(DS1302_Time[2]>30){DS1302_Time[2]=1;}
  286.                 }
  287.                 else if(DS1302_Time[1]==2)
  288.                 {
  289.                         if(DS1302_Time[0]%4==0)
  290.                         {
  291.                                 if(DS1302_Time[2]<1){DS1302_Time[2]=29;}//閏年2月
  292.                                 if(DS1302_Time[2]>29){DS1302_Time[2]=1;}
  293.                         }
  294.                         else
  295.                         {
  296.                                 if(DS1302_Time[2]<1){DS1302_Time[2]=28;}//平年2月
  297.                                 if(DS1302_Time[2]>28){DS1302_Time[2]=1;}
  298.                         }
  299.                 }
  300.                 if(DS1302_Time[3]<0){DS1302_Time[3]=23;}//時越界判斷
  301.                 if(DS1302_Time[4]<0){DS1302_Time[4]=59;}//分越界判斷
  302.                 if(DS1302_Time[5]<0){DS1302_Time[5]=59;}//秒越界判斷
  303.         }
  304.         OLED_ShowNum(0,0,DS1302_Time[0],2,16);
  305.         OLED_ShowString(17,0,"-");
  306.         OLED_ShowNum(24,0,DS1302_Time[1],2,16);
  307.         OLED_ShowString(41,0,"-");
  308.         OLED_ShowNum(48,0,DS1302_Time[2],2,16);
  309.         OLED_ShowNum(30,2,DS1302_Time[3],2,16);
  310.         OLED_ShowString(47,2,":");
  311.         OLED_ShowNum(54,2,DS1302_Time[4],2,16);
  312.         OLED_ShowString(71,2,":");
  313.         OLED_ShowNum(78,2,DS1302_Time[5],2,16);
  314. //        OLED_Clear();
  315. }
  316. void Stopwatch()
  317. {
  318. //                LED=~LED;
  319. //        KeyNum=MatrixKey();
  320. //        OLED_Clear();
  321.                 OLED_ShowString(4,0,"    StopWatch");
  322.         OLED_ShowNum(30,2,MiniSec,2,16);
  323.         OLED_ShowString(47,2,":");
  324.         OLED_ShowNum(54,2,Sec,2,16);
  325.         OLED_ShowString(71,2,":");
  326.         OLED_ShowNum(78,2,Min,2,16);
  327. //        if(KeyNum==9)
  328. //        {
  329. //                Buzzer_Time(100);
  330. //                Run=1;
  331. //        Delay(100);
  332. //        LED=~LED;
  333. //        }
  334.         
  335. }
  336. void Sec_Loop(void)
  337. {
  338. //        if(Run)
  339. //        {
  340.                 MiniSec++;
  341.                 if(MiniSec>=10)
  342.                 {
  343.                         MiniSec=0;
  344.                         Sec++;
  345.                         if(Sec>=60)
  346.                         {
  347.                                 Sec=0;
  348.                                 Min++;
  349.                                 if(Min>=60)
  350.                                 {
  351.                                         Min=0;
  352.                                 }
  353.                         }
  354.                 }
  355. //        }
  356. }
  357. void Buzzer(void)
  358. {
  359.         P4M1=0X00;
  360.         P4M0=0x04;
  361. //        P42=1;
  362. //        Delay(100);
  363. //        P42=0;
  364. }
  365. void EEPROM_Init(void)
  366. {
  367.         if(EERPOM_ReadByte(0)==0xff)//可用一個校驗位來判斷是否進行擦寫
  368.         {
  369.                 P34=~P34;
  370.         }
  371.         else
  372.         {
  373.                 clock1_hour=EERPOM_ReadByte(0);
  374.                 clock1_min =EERPOM_ReadByte(0x001);
  375.         }
  376. }

  377. void Judge_Clock(void)
  378. {
  379.                 EEPROM_Erase(0);
  380.                
  381.                 EEPROM_WriteByte(0x000,clock1_hour);
  382.         
  383. //                EEPROM_Erase(0x400);
  384.         
  385.                 EEPROM_WriteByte(0x001,clock1_min);
  386. }
  387. void shortdelay(unsigned int n){                //短延時
  388.         unsigned int i,j;
  389.         for(i=n;i>0;i--){
  390.                 for(j=110;j>0;j--){;}
  391.         }
  392. }

  393. void esp_init()
  394. {
  395.         unsigned char a=0,b=0;
  396.     while(table[a]!='\0')
  397.     {
  398.         SBUF=table[a];                //寫入要發送的字符
  399.         while(!TI);                        //等待發送完成
  400.         TI=0;                                //發送
  401.         a++;
  402.     }
  403.     shortdelay(50);                        //延時函數
  404.     while(table1[b]!='\0')
  405.     {
  406.                 SBUF=table1[b];
  407.                 while(!TI);                        //等待發送完成
  408.                 TI=0;
  409.                 b++;
  410.     }
  411. }

  412. void int_init(){                        //開啟定時器1,產生9600波特率
  413.         TMOD = 0x20;                        //定時器1工作在方式2八位自動重裝模式
  414. ……………………

  415. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

Keil代碼下載:
代碼.zip (155.92 KB, 下載次數: 57)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜爽爽爽男女免费观看影院 | 99精品国产一区二区三区 | 毛片在线看看 | 精品一区二区三区在线视频 | 国产第一区二区 | 亚洲精品成人 | 久久精品日产第一区二区三区 | 激情欧美一区二区三区中文字幕 | 色香婷婷 | 日韩午夜影院 | 久草网在线视频 | 成年人在线视频 | 国产h在线 | 国产精品久久国产精品99 | 精品欧美乱码久久久久久 | 91久久综合亚洲鲁鲁五月天 | 成人免费视频 | 国产无套一区二区三区久久 | 色婷综合网 | 亚洲成人免费 | 久久国产婷婷国产香蕉 | 精品国产一区二区三区久久久蜜月 | 成人影| www.亚洲精品 | 日韩成人在线视频 | 噜噜噜噜狠狠狠7777视频 | 最近日韩中文字幕 | 免费黄网站在线观看 | 毛片一级片 | 亚洲一区二区av | 欧美aⅴ片| 国产精品久久久久999 | 国产成视频在线观看 | a欧美 | 国产精品久久久久久久久久久免费看 | 久久久久国产精品一区二区 | 中文字幕 亚洲一区 | 看片国产| 亚洲天堂av在线 | 中文av字幕 | 91最新视频 |