极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 106457|回复: 53

我的电子闹钟,由Arduino最小系统、LCD12864中文屏幕、DS1302时钟模块、DHT11温湿...

  [复制链接]
发表于 2012-12-8 23:32:03 | 显示全部楼层 |阅读模式
本帖最后由 弘毅 于 2012-12-18 23:44 编辑

最近利用手头的  LCD12864中文屏幕,DS1302时钟模块,DHT11温湿度传感器,自制的Arduino最小系统,芯片为Atmega8 ,开发一个电子闹钟。先上图:
这是正面外观、屏幕显示主界面(左上角的圆圈代表闹铃开启,最下面显示当前温度和湿度)

不做操作10秒后,会自动进入睡眠模式,屏幕背光灯亮度减弱,屏幕随机位置显示时间和温湿度轮换,按任意键唤醒回到主界面。




侧视图:



后视图:





自己做的最小系统,芯片是 Atmega8,之前露过面的哦。





可惜只写了主界面和简化的睡眠模式,Atmega8芯片容量不够了,无法继续写更多功能,只好先来个简化的。



上个视频看看:



随后,换开发用的 Arduino UNO板子,继续写功能模块







好了,终于都写完了,实现了日期、时间、温度、湿度显示,睡眠模式,日期时间设置,闹铃开启关闭,闹铃时间设置功能。

程序大小


上视频:




缺陷:设计睡眠功能,主要是为了防止长期单点显示对屏幕造成伤害,另外减弱背光也是想省电,但省电结果不是很理想,还是比较费电的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-9-28 16:48:00 | 显示全部楼层
// A1/15 确定按钮; A2/16 下移按钮; A3/17 上移按钮; A4/18 返回按钮;
这句代码中,是如何定义A1-A4的按键端口号的?我仿制了一个,能够正确显示图片,但是貌似干扰,图标、设置内容等乱跑。
回复 支持 1 反对 0

使用道具 举报

发表于 2012-12-9 09:07:12 | 显示全部楼层
图片失效啦
回复 支持 反对

使用道具 举报

发表于 2012-12-9 10:40:54 | 显示全部楼层
{:soso_e154:}求图,我也做个学习下!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-9 17:31:12 | 显示全部楼层
幻生幻灭 发表于 2012-12-9 09:07
图片失效啦

我又发了一遍图
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-9 17:31:46 | 显示全部楼层
咯小3虽 发表于 2012-12-9 10:40
求图,我也做个学习下!

我又发了一遍图
回复 支持 反对

使用道具 举报

发表于 2012-12-9 21:22:01 | 显示全部楼层
绿林网页 发表于 2012-12-9 17:31
我又发了一遍图

有图了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-10 20:11:15 | 显示全部楼层
本帖最后由 绿林网页 于 2012-12-10 20:12 编辑

Atmega8最小系统的代码
  1. #include <dht11.h>
  2. #define DHT11PIN A0
  3. dht11 DHT11;
  4. #include <DS1302.h>
  5. //接口定义
  6. //CE(DS1302 pin5) -> Arduino D5
  7. //IO(DS1302 pin6) -> Arduino D6
  8. //SCLK(DS1302 pin7) -> Arduino D7
  9. DS1302 rtc(5, 6, 7);
  10. Time otime;
  11. #include "LCD12864RSPI.h"
  12. //latchPin = 12;
  13. //clockPin = 10;  
  14. //dataPin = 11;  
  15. #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )

  16. // A1/15 确定按钮; A2/16 下移按钮; A3/17 上移按钮; A4/18 返回按钮;
  17. int clockPin=13; //闹铃
  18. int bledPin=9; //背光灯

  19. //  ⊙℃%:
  20. unsigned char str2[][2]={
  21.   0x20,0x20,0xA1,0xD1,0xa1,0xe6,0xa3,0xa5,0xA3,0xBA};
  22. //    周一周二周三周四周五周六周日设置日期时间闹铃开启关闭
  23. unsigned char str4[][4]={
  24.   0x20,0x20,0x20,0x20,0xD6,0xDC,0xD2,0xBB,0xD6,0xDC,0xB6,0xFE,0xD6,0xDC,0xC8,0xFD,0xD6,0xDC,0xCB,0xC4,0xD6,0xDC,0xCE,0xE5,0xD6,0xDC,0xC1,0xF9,0xD6,0xDC,0xC8,0xD5,0xC9,0xE8,0xD6,0xC3,0xC8,0xD5,0xC6,0xDA,0xCA,0xB1,0xBC,0xE4,0xC4,0xD6,0xC1,0xE5,0xBF,0xAA,0xC6,0xF4,0xB9,0xD8,0xB1,0xD5};

  25. int mode=1;//0 睡眠; 1 正常; 2 设置;
  26. int sx=0; //0 主菜单 1 日期 2 时间 3 闹铃
  27. int Isclock=1; //闹铃是否开启
  28. int light=10; //背光亮度

  29. void setup()
  30. {
  31.   Serial.begin(9600);
  32.   rtc.write_protect(false);
  33.   rtc.halt(false);
  34.   LCDA.Initialise();
  35.   delay(100);
  36.   LCDA.CLEAR();
  37.   for(int i=15;i<19;i++) {  
  38.     pinMode(i,INPUT);  
  39.   }
  40.   pinMode(bledPin,OUTPUT);
  41.   digitalWrite(bledPin,HIGH);
  42.   digitalWrite(clockPin,LOW);
  43.   // Time t(2012,12,8,13,53,0,6);
  44.   //  rtc.time(t);
  45.   delay(1000);
  46. }

  47. void loop()
  48. {
  49.   switch(mode)
  50.   {
  51.   case 0:
  52.     s_ls();
  53.     break;
  54.   case 2:
  55.     break;
  56.   default :
  57.     s_nr();
  58.     break;   
  59.   }
  60. }
  61. void s_nr()
  62. {
  63.   LCDA.CLEAR();
  64.   delay(10);
  65.   digitalWrite(bledPin,HIGH);
  66.   int js=0;
  67.   while(1)
  68.   {
  69.     // c_clock();
  70.     s_fdate();
  71.     delay(300);
  72.     js++;
  73.     if(js>50)
  74.     {
  75.       mode=0;
  76.       break;
  77.     }
  78.   }
  79. }
  80. void s_ls()
  81. {
  82.   analogWrite(bledPin,light);
  83.   int tr=0,tc=0;
  84.   while(1)
  85.   {
  86.     //if(c_clock()>0){
  87.     //   mode=1;
  88.     //   break;
  89.     // }
  90.     if( c_btn()>0){
  91.       mode=1;
  92.       break;
  93.     }
  94.     LCDA.CLEAR();
  95.     delay(10);
  96.     tr= (int)random(4);
  97.     tc=(int)random(5);
  98.     s_time(tr,tc);
  99.     delay(5000);  
  100.   }
  101. }
  102. int c_btn()
  103. {
  104.   int r=0;
  105.   for(int i=15;i<19;i++) {  
  106.     if(digitalRead(i)==HIGH){
  107.       delay(10);
  108.       if(digitalRead(i)==HIGH)
  109.       {
  110.         r=i-14;
  111.         break;
  112.       }
  113.     }
  114.   }
  115.   return r;
  116. }
  117. //int c_clock()
  118. //{
  119. //  return 0;
  120. //}
  121. void s_fdate()
  122. {  
  123.   LCDA.DisplayString(0,0,(unsigned char *)str2[Isclock],sizeof(str2[Isclock]));
  124.   char tca1[18];
  125.   otime = rtc.time();   
  126.   snprintf(tca1, sizeof(tca1), "%04d-%02d-%02d  %s",otime.yr, otime.mon,otime.date,str4[otime.day]);
  127.   LCDA.DisplayString(1,0,(unsigned char *)tca1,sizeof(tca1));  
  128.   char tca2[9];
  129.   snprintf(tca2, sizeof(tca2), "%02d:%02d:%02d",otime.hr, otime.min,otime.sec);
  130.   LCDA.DisplayString(2,2,(unsigned char *)tca2,sizeof(tca2));
  131.   s_wsd(3,1);
  132. }
  133. void s_time(int r,int c)
  134. {
  135.   char tca2[6];
  136.   otime = rtc.time();  
  137.   snprintf(tca2, sizeof(tca2), "%02d:%02d",otime.hr, otime.min);
  138.   LCDA.DisplayString(r,c,(unsigned char *)tca2,sizeof(tca2));
  139. }
  140. void s_wsd(int r,int c)
  141. {
  142.   char tws[11];
  143.   DHT11.read(DHT11PIN);
  144.   snprintf(tws, sizeof(tws), "%2d%.2s  %2d%.2s",(DHT11.temperature-2),str2[2],DHT11.humidity,str2[3]);
  145.   LCDA.DisplayString(r,c,(unsigned char *)tws,sizeof(tws));
  146. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-11 20:03:10 | 显示全部楼层
Arduino uno 的全部代码
  1. #include <dht11.h>
  2. #define DHT11PIN A0
  3. dht11 DHT11;
  4. #include <DS1302.h>
  5. //接口定义
  6. //CE(DS1302 pin5) -> Arduino D5
  7. //IO(DS1302 pin6) -> Arduino D6
  8. //SCLK(DS1302 pin7) -> Arduino D7
  9. DS1302 rtc(5, 6, 7);
  10. Time otime;
  11. #include "LCD12864RSPI.h"
  12. //latchPin = 12;
  13. //clockPin = 10;  
  14. //dataPin = 11;  
  15. #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )

  16. // A1/15 确定按钮; A2/16 下移按钮; A3/17 上移按钮; A4/18 返回按钮;
  17. int clockledPin=13; //闹铃闪灯
  18. int clockaudioPin=3;//闹铃声音
  19. int bledPin=9; //背光灯

  20. //  ⊙℃%:→▔年月日点分
  21. unsigned char str2[][2]={
  22.   0x20,0x20,0xA1,0xD1,0xA1,0xE6,0xA3,0xA5,0xA3,0xBA,0xA1,0xFA,0xA9,0xA5,0xC4,0xEA,0xD4,0xC2,0xC8,0xD5,0xB5,0xE3,0xB7,0xD6};
  23. //    周一周二周三周四周五周六周日设置日期时间闹铃
  24. unsigned char str4[][4]={
  25.   0x20,0x20,0x20,0x20,0xD6,0xDC,0xD2,0xBB,0xD6,0xDC,0xB6,0xFE,0xD6,0xDC,0xC8,0xFD,0xD6,0xDC,0xCB,0xC4,0xD6,0xDC,0xCE,0xE5,0xD6,0xDC,0xC1,0xF9,0xD6,0xDC,0xC8,0xD5,0xC9,0xE8,0xD6,0xC3,0xC8,0xD5,0xC6,0xDA,0xCA,0xB1,0xBC,0xE4,0xC4,0xD6,0xC1,0xE5};
  26. //关闭开启
  27. unsigned char cstr4[][4]={
  28.   0xB9,0xD8,0xB1,0xD5,0xBF,0xAA,0xC6,0xF4};
  29. int mode=1;//0 睡眠; 1 正常; 2 设置;
  30. int sx=0; //0 主菜单 1 日期 2 时间 3 闹铃
  31. int Isclock=1; //闹铃是否开启
  32. int cl_hr=6; //闹铃小时
  33. int cl_min=30; //闹铃分钟
  34. int light=10; //背光亮度
  35. int zr=0,zc=0;
  36. void setup()
  37. {
  38.   Serial.begin(9600);
  39.   rtc.write_protect(false);
  40.   rtc.halt(false);
  41.   LCDA.Initialise();
  42.   delay(100);
  43.   LCDA.CLEAR();
  44.   for(int i=15;i<19;i++) {  
  45.     pinMode(i,INPUT);  
  46.   }
  47.   pinMode(bledPin,OUTPUT);
  48.   pinMode(clockaudioPin,OUTPUT);
  49.   pinMode(clockledPin,OUTPUT);
  50.   digitalWrite(bledPin,HIGH);
  51.   digitalWrite(clockaudioPin,LOW);
  52.   digitalWrite(clockledPin,LOW);
  53.   delay(1000);
  54. }

  55. void loop()
  56. {
  57.   switch(mode)
  58.   {
  59.   case 0:
  60.     s_ls();
  61.     break;
  62.   case 2:
  63.     s_set();
  64.     break;
  65.   default :
  66.     s_nr();
  67.     break;   
  68.   }
  69. }
  70. void s_set()
  71. {
  72.   switch(sx)
  73.   {
  74.   case 1:
  75.     s_m1();
  76.     break;
  77.   case 2:
  78.     s_m2();
  79.     break;
  80.   case 3:
  81.     s_m3();
  82.     break;
  83.   default :
  84.     s_m0();
  85.     break;   
  86.   }
  87. }
  88. void s_m0()
  89. {
  90.   LCDA.CLEAR();
  91.   delay(10);
  92.   LCDA.DisplayString(0,0,(unsigned char *)(str4[8]),sizeof(str4[8]));
  93.   LCDA.DisplayString(1,3,(unsigned char *)(str4[9]),sizeof(str4[9]));
  94.   LCDA.DisplayString(2,3,(unsigned char *)(str4[10]),sizeof(str4[10]));
  95.   LCDA.DisplayString(3,3,(unsigned char *)(str4[11]),sizeof(str4[11]));
  96.   zr=1;
  97.   zc=2;
  98.   int btn=0;
  99.   LCDA.DisplayString(zr,zc,(unsigned char *)(str2[5]),sizeof(str2[5]));
  100.   while(1)
  101.   {
  102.     btn=c_btn();
  103.     if(btn==1)    {
  104.       sx=zr;
  105.       break;
  106.     }
  107.     else if(btn== 2){
  108.       m_down();
  109.     }
  110.     else if(btn==3){
  111.       m_up();
  112.     }
  113.     else if(btn==4){
  114.       mode=1;   
  115.       break;
  116.     }
  117.   }
  118. }
  119. void s_m1()
  120. {
  121.   LCDA.CLEAR();
  122.   delay(10);
  123.   LCDA.DisplayString(0,0,(unsigned char *)(str4[8]),sizeof(str4[8]));
  124.   char tca1[17];
  125.   otime = rtc.time();   
  126.   int yr=otime.yr;
  127.   int mon=otime.mon;
  128.   int date=otime.date;
  129.   int day=otime.day;
  130.   snprintf(tca1, sizeof(tca1), "%04d%.2s%02d%.2s%02d%.4s",yr,str2[7], mon,str2[8],date,str4[day]);
  131.   LCDA.DisplayString(1,0,(unsigned char *)tca1,sizeof(tca1));  
  132.   zr=2;
  133.   zc=1;
  134.   LCDA.DisplayString(zr,zc,(unsigned char *)(str2[6]),sizeof(str2[6]));
  135.   int btn=0;
  136.   while(1)
  137.   {
  138.     btn=c_btn();
  139.     if(btn==1){     
  140.       otime = rtc.time();
  141.       Time t(yr,mon,date,otime.hr,otime.min,otime.sec,day);
  142.       rtc.time(t);
  143.       m_right(2,1,7);
  144.     }
  145.     else if(btn== 2){
  146.       switch(zc)
  147.       {
  148.       case 1:
  149.         yr++;
  150.         if(yr>2100)yr=2000;
  151.         break;
  152.       case 3:
  153.         mon++;
  154.         if(mon>12)mon=1;
  155.         break;
  156.       case 5:
  157.         date++;
  158.         if(date>31)date=1;
  159.         break;
  160.       case 7:
  161.         day++;
  162.         if(day>7)day=1;
  163.         break;
  164.       }
  165.       snprintf(tca1, sizeof(tca1), "%04d%.2s%02d%.2s%02d%.4s",yr,str2[7], mon,str2[8],date,str4[day]);
  166.       LCDA.DisplayString(1,0,(unsigned char *)tca1,sizeof(tca1));  
  167.     }
  168.     else if(btn==3){
  169.       switch(zc)
  170.       {
  171.       case 1:
  172.         yr--;
  173.         if(yr<2000)yr=2100;
  174.         break;
  175.       case 3:
  176.         mon--;
  177.         if(mon<1)mon=12;
  178.         break;
  179.       case 5:
  180.         date--;
  181.         if(date<1)date=31;
  182.         break;
  183.       case 7:
  184.         day--;
  185.         if(day<1)day=7;
  186.         break;
  187.       }
  188.       snprintf(tca1, sizeof(tca1), "%04d%.2s%02d%.2s%02d%.4s",yr,str2[7], mon,str2[8],date,str4[day]);
  189.       LCDA.DisplayString(1,0,(unsigned char *)tca1,sizeof(tca1));  
  190.     }
  191.     else if(btn==4){
  192.       sx=0;
  193.       break;
  194.     }
  195.   }
  196. }
  197. void s_m2()
  198. {
  199.   LCDA.CLEAR();
  200.   delay(10);
  201.   LCDA.DisplayString(0,0,(unsigned char *)(str4[8]),sizeof(str4[8]));
  202.   otime = rtc.time();   
  203.   int hr=otime.hr;
  204.   int minu=otime.min;
  205.   char tca2[9];
  206.   snprintf(tca2, sizeof(tca2), "%02d%.2s%02d%.2s",otime.hr,str2[10], otime.min,str2[11]);
  207.   LCDA.DisplayString(1,2,(unsigned char *)tca2,sizeof(tca2));
  208.   zr=2;
  209.   zc=2;
  210.   LCDA.DisplayString(zr,zc,(unsigned char *)(str2[6]),sizeof(str2[6]));
  211.   int btn=0;
  212.   while(1)
  213.   {
  214.     btn=c_btn();
  215.     if(btn==1){     
  216.       otime = rtc.time();
  217.       Time t(otime.yr,otime.mon,otime.date,hr,minu,0,otime.day);
  218.       rtc.time(t);
  219.       m_right(2,2,4);
  220.     }
  221.     else if(btn== 2){
  222.       switch(zc)
  223.       {
  224.       case 2:
  225.         hr++;
  226.         if(hr>23)hr=0;
  227.         break;
  228.       case 4:
  229.         minu++;
  230.         if(minu>59)minu=0;
  231.         break;     
  232.       }
  233.       snprintf(tca2, sizeof(tca2), "%02d%.2s%02d%.2s",hr,str2[10], minu,str2[11]);
  234.       LCDA.DisplayString(1,2,(unsigned char *)tca2,sizeof(tca2));
  235.     }
  236.     else if(btn==3){
  237.       switch(zc)
  238.       {
  239.       case 2:
  240.         hr--;
  241.         if(hr<0)hr=23;
  242.         break;
  243.       case 4:
  244.         minu--;
  245.         if(minu<0)minu=59;
  246.         break;     
  247.       }
  248.       snprintf(tca2, sizeof(tca2), "%02d%.2s%02d%.2s",hr,str2[10], minu,str2[11]);
  249.       LCDA.DisplayString(1,2,(unsigned char *)tca2,sizeof(tca2));
  250.     }
  251.     else if(btn==4){
  252.       sx=0;
  253.       break;
  254.     }
  255.   }
  256. }
  257. void s_m3()
  258. {
  259.   LCDA.CLEAR();
  260.   delay(10);
  261.   LCDA.DisplayString(0,0,(unsigned char *)(str4[8]),sizeof(str4[8]));
  262.   char tca2[11];
  263.   snprintf(tca2, sizeof(tca2), "%.4s%02d%.2s%02d%.2s",cstr4[Isclock],cl_hr,str2[10],cl_min,str2[11]);
  264.   LCDA.DisplayString(1,2,(unsigned char *)tca2,sizeof(tca2));
  265.   zr=2;
  266.   zc=2;
  267.   LCDA.DisplayString(zr,zc,(unsigned char *)(str2[6]),sizeof(str2[6]));
  268.   int btn=0;
  269.   while(1)
  270.   {
  271.     btn=c_btn();
  272.     if(btn==1){
  273.       m_right(2,2,6);
  274.     }
  275.     else if(btn== 2){
  276.       switch(zc)
  277.       {
  278.       case 2:
  279.         Isclock++;
  280.         if(Isclock>1)Isclock=0;
  281.         break;  
  282.       case 4:
  283.         cl_hr++;
  284.         if(cl_hr>23)cl_hr=0;
  285.         break;
  286.       case 6:
  287.         cl_min++;
  288.         if(cl_min>59)cl_min=0;
  289.         break;     
  290.       }
  291.       snprintf(tca2, sizeof(tca2), "%.4s%02d%.2s%02d%.2s",cstr4[Isclock],cl_hr,str2[10],cl_min,str2[11]);
  292.       LCDA.DisplayString(1,2,(unsigned char *)tca2,sizeof(tca2));
  293.     }
  294.     else if(btn==3){
  295.       switch(zc)
  296.       {
  297.       case 2:
  298.         Isclock--;
  299.         if(Isclock<0)Isclock=1;
  300.         break;  
  301.       case 4:
  302.         cl_hr--;
  303.         if(cl_hr<0)cl_hr=23;
  304.         break;
  305.       case 6:
  306.         cl_min--;
  307.         if(cl_min<0)cl_min=59;
  308.         break;     
  309.       }
  310.       snprintf(tca2, sizeof(tca2), "%.4s%02d%.2s%02d%.2s",cstr4[Isclock],cl_hr,str2[10],cl_min,str2[11]);
  311.       LCDA.DisplayString(1,2,(unsigned char *)tca2,sizeof(tca2));
  312.     }
  313.     else if(btn==4){
  314.       sx=0;
  315.       break;
  316.     }
  317.   }
  318. }
  319. void s_nr()
  320. {
  321.   LCDA.CLEAR();
  322.   delay(10);
  323.   digitalWrite(bledPin,HIGH);
  324.   int js=0,btn=0;
  325.   while(1)
  326.   {
  327.     c_clock();
  328.     btn=c_btn();
  329.     if( btn==1){
  330.       mode=2;
  331.       break;
  332.     }
  333.     s_fdate();
  334.     delay(100);
  335.     js++;
  336.     if(js>50)
  337.     {
  338.       mode=0;
  339.       break;
  340.     }
  341.   }
  342. }
  343. void s_ls()
  344. {
  345.   analogWrite(bledPin,light);
  346.   int tr=0,tc=0,js=0;
  347.   while(1)
  348.   {
  349.     if(c_clock()>0){
  350.       mode=1;
  351.       break;
  352.     }
  353.     if( c_btn()>0){
  354.       mode=1;
  355.       break;
  356.     }
  357.     if(js==20)
  358.     {
  359.       LCDA.CLEAR();
  360.       delay(10);
  361.       tr= (int)random(4);
  362.       tc=(int)random(5);
  363.       s_time(tr,tc);
  364.     }
  365.     else if(js==50)
  366.     {
  367.       s_wsd(tr,tc);
  368.       js=0;
  369.     }
  370.     delay(100);  
  371.     js++;
  372.   }
  373. }
  374. void m_up()
  375. {
  376.   LCDA.DisplayString(zr,zc,(unsigned char *)(str2[0]),sizeof(str2[0]));      
  377.   zr--;
  378.   if(zr<1){
  379.     zr=3;      
  380.   }
  381.   LCDA.DisplayString(zr,zc,(unsigned char *)(str2[5]),sizeof(str2[5]));
  382.   delay(10);
  383. }
  384. void m_down(){
  385.   LCDA.DisplayString(zr,zc,(unsigned char *)(str2[0]),sizeof(str2[0]));      
  386.   zr++;
  387.   if(zr>3){
  388.     zr=1;      
  389.   }
  390.   LCDA.DisplayString(zr,zc,(unsigned char *)(str2[5]),sizeof(str2[5]));
  391.   delay(10);
  392. }
  393. void m_right(int s,int sn,int en){
  394.   LCDA.DisplayString(zr,zc,(unsigned char *)(str2[0]),sizeof(str2[0]));      
  395.   zc+=s;
  396.   if(zc>en){
  397.     zc=sn;      
  398.   }
  399.   LCDA.DisplayString(zr,zc,(unsigned char *)(str2[6]),sizeof(str2[6]));
  400.   delay(10);
  401. }
  402. int c_btn()
  403. {
  404.   for(int i=15;i<19;i++) {     
  405.     if(digitalRead(i)==HIGH){
  406.       delay(100);
  407.       if(digitalRead(i)==HIGH)
  408.       {      
  409.         return (i-14);
  410.       }
  411.     }
  412.   }
  413.   return 0;
  414. }
  415. int c_clock()
  416. {
  417.   int r=0;
  418.   if(Isclock==1)
  419.   {
  420.     if((cl_hr==otime.hr)&&(cl_min== otime.min))
  421.     {
  422.       r=1;
  423.       digitalWrite(clockledPin,HIGH);
  424.       tone(clockaudioPin,1209,100);
  425.       tone(clockaudioPin,697,100);
  426.      // tone(clockaudioPin,1336,100);
  427.      // tone(clockaudioPin,697,100);
  428.       delay(10);
  429.     }
  430.     else
  431.     {
  432.       digitalWrite(clockledPin,LOW);
  433.       digitalWrite(clockaudioPin,LOW);
  434.     }
  435.   }
  436.   return r;
  437. }
  438. void s_fdate()
  439. {  
  440.   LCDA.DisplayString(0,0,(unsigned char *)str2[Isclock],sizeof(str2[Isclock]));
  441.   char tca1[18];
  442.   otime = rtc.time();   
  443.   snprintf(tca1, sizeof(tca1), "%04d-%02d-%02d  %s",otime.yr, otime.mon,otime.date,str4[otime.day]);
  444.   LCDA.DisplayString(1,0,(unsigned char *)tca1,sizeof(tca1));  
  445.   char tca2[9];
  446.   snprintf(tca2, sizeof(tca2), "%02d:%02d:%02d",otime.hr, otime.min,otime.sec);
  447.   LCDA.DisplayString(2,2,(unsigned char *)tca2,sizeof(tca2));
  448.   s_wsd(3,1);
  449. }
  450. void s_time(int r,int c)
  451. {
  452.   char tca2[6];
  453.   otime = rtc.time();  
  454.   snprintf(tca2, sizeof(tca2), "%02d:%02d",otime.hr, otime.min);
  455.   LCDA.DisplayString(r,c,(unsigned char *)tca2,sizeof(tca2));
  456. }
  457. void s_wsd(int r,int c)
  458. {
  459.   char tws[11];
  460.   DHT11.read(DHT11PIN);
  461.   snprintf(tws, sizeof(tws), "%2d%.2s  %2d%.2s",(DHT11.temperature-2),str2[2],DHT11.humidity,str2[3]);
  462.   LCDA.DisplayString(r,c,(unsigned char *)tws,sizeof(tws));
  463. }


复制代码

求优化!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-13 19:58:57 | 显示全部楼层
图片怎么老是出错不显示呢?
回复 支持 反对

使用道具 举报

发表于 2012-12-18 23:33:05 | 显示全部楼层
本帖最后由 弘毅 于 2012-12-18 23:43 编辑
绿林网页 发表于 2012-12-13 19:58
图片怎么老是出错不显示呢?


图片你是上传到图片空间,然后引用链接重新调整大小的吧,因为我看了一下后台服务器记录。。。显示是主动删除了。。。是不是因为图片你img代码引用后,显示了2次。。所以你删除了上传的那一部分。上传的删除的。。引用的也自然没了。

直接使用图片上传。。然后插入图片就好。目前上传的图片,因为论坛编辑器限制,没法调整大小=.=

{:soso_e113:} 我从你空间。。把图片重新转过来了,嘿嘿
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-19 07:57:04 | 显示全部楼层
弘毅 发表于 2012-12-18 23:33
图片你是上传到图片空间,然后引用链接重新调整大小的吧,因为我看了一下后台服务器记录。。。显示是主 ...

谢谢站长!
回复 支持 反对

使用道具 举报

发表于 2013-4-18 08:35:06 | 显示全部楼层
霸气的闹钟,用oled 屏幕会比较省电
回复 支持 反对

使用道具 举报

发表于 2013-4-24 22:05:43 | 显示全部楼层
好东西!做记号备用!
回复 支持 反对

使用道具 举报

发表于 2013-4-29 22:30:40 | 显示全部楼层
改用TFT做显示耗电更少而且更漂亮
回复 支持 反对

使用道具 举报

发表于 2013-5-11 14:41:02 | 显示全部楼层
感谢楼主 学习中
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-16 12:25 , Processed in 0.048355 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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