找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8526|回复: 36
收起左侧

时间温度控制系统(128*64LCD+ds1302+ds18b20)

  [复制链接]
ID:70481 发表于 2014-12-16 17:02 | 显示全部楼层 |阅读模式
主要功能:
           温度计 时钟 闹铃 密码锁 篮球器 计算器 温度控制 键盘锁 系统设置等。

时间温度控制系统原理图及元器件.pdf (312.48 KB, 下载次数: 216)
回复

使用道具 举报

ID:70481 发表于 2014-12-16 17:02 | 显示全部楼层
接上面:
  1. /*保密导航*/
  2. void passw_func(void)
  3. {
  4.   uchar save,d,key;
  5.   d=0;save=0;
  6.   do
  7.   {
  8.     clear_dis();
  9.     display_cnasc(0x81,2,"保密");
  10.     dis_title();
  11.     display_cnasc(0x88,8,selected[0]);
  12.     con_disp(0xff,0xff,0x8a,0x80,5,16);
  13.     do
  14.     {     
  15.       display_cnasc(0x93,3,secrets_menu[index_p[save].lnum]);
  16.       display_cnasc(0x8b,3,secrets_menu[save]);
  17.       display_cnasc(0x9b,3,secrets_menu[index_p[save].rnum]);  
  18.       d=save;
  19.       while(1)
  20.       {
  21.         key=gotkey();
  22.         if(key==11||key==3){enter_dis();break;}
  23.         if(key==2){save=index_p[d].rnum; key_dis(0x9a);break;}
  24.         if(key==5){save=index_p[d].lnum; key_dis(0x92);break;}
  25.         if(key==1){return;}
  26.       }
  27.       if(key==11||key==3)
  28.       {
  29.         if(d==3) return;        
  30.         clear_dis();
  31.         dis_title_e();
  32.         switch(d)
  33.         {
  34.           case 0:
  35.                   display_cnasc(0x82,3,"密码锁");
  36.                   display_cnasc(0x90,5,"输入密码:");
  37.                   while(1)
  38.                   {
  39.                     key=input_passwork();
  40.                     if(key==10) break;
  41.                     key=passwork_comp();
  42.                     if(key==1)
  43.                     {
  44.                       display_cnasc(0x90,8,"处开启状态,按键");
  45.                       display_cnasc(0x88,8,"□1-常开□2-关闭");
  46.                       display_cnasc(0x98,8,"■自动延时30秒  ");
  47.                       pw_oc=open;
  48.                       save1=i=0;   
  49.                       lock_op=1;   // 开启标记等待延时
  50.                       while(1)
  51.                       {
  52.                         key=gotkey(); // 返回255为延时时间到达
  53.                         if(key==255){ lock_op=0;pw_oc=close;break;}
  54.                         if(key==1)
  55.                         {
  56.                           display_cnasc(0x88,1,"■");
  57.                           display_cnasc(0x98,1,"□");
  58.                           lock_op=0;
  59.                         }
  60.                         if(key==2)
  61.                         {
  62.                           display_cnasc(0x88,1,"□");
  63.                           display_cnasc(0x98,1,"□");
  64.                           display_cnasc(0x8c,1,"■");
  65.                           delay(60000);
  66.                           clear_dis();
  67.                           dis_title_e();
  68.                           display_cnasc(0x82,3,"密码锁");
  69.                           display_cnasc(0x90,5,"密码锁将在");
  70.                           display_cnasc(0x8a,6," 5秒后关闭:");
  71.                           for(save=0;save<5;save++)
  72.                           {
  73.                             display_cnasc(0x99+save,1,"→");
  74.                             delay_pw();
  75.                           }
  76.                           display_cnasc(0x9e,1,"√");
  77.                           pw_oc=open;
  78.                           delay(30000);
  79.                           pw_oc=close;
  80.                           lock_op=0;
  81.                           break;
  82.                         }
  83.                       }
  84.                       break;
  85.                     }
  86.                   }
  87.                   break;
  88.           case 1:
  89.                   display_cnasc(0x82,3,"更  改");
  90.                   display_cnasc(0x90,6,"输入旧密码:");
  91.                   while(1)
  92.                   {
  93.                     key=input_passwork();
  94.                     if(key==10) break;
  95.                     key=passwork_comp();
  96.                     if(key==1)
  97.                     {
  98.                       display_cnasc(0x92,1,"新");
  99.                       display_cnasc(0x89,6,"            ");
  100.                       key=input_passwork();
  101.                       if(key==10) break;
  102.                       display_cnasc(0x90,6,"确认密码:  ");
  103.                       input_second_passwork();
  104.                       break;            
  105.                     }
  106.                   }
  107.                   break;
  108.           case 2:
  109.                   display_cnasc(0x82,3,"初始化");
  110.                   display_cnasc(0x91,6,"是否初始化? ");
  111.                   display_cnasc(0x89,6,"Y(OK)\\N(./S)");
  112.                   while(1)
  113.                   {
  114.                     key=gotkey();
  115.                     if(key==11)
  116.                         {
  117.                       clear_dis();
  118.                       dis_title_e();
  119.                       display_cnasc(0x82,3,"初始化");
  120.                       display_cnasc(0x90,5,"输入密码:");
  121.                       do
  122.                       {
  123.                         key=input_passwork();
  124.                         if(key==10) break;
  125.                         key=passwork_comp();
  126.                         if(key==1)
  127.                         {
  128.                           display_cnasc(0x90,5,"密码正确!");
  129.                           display_cnasc(0x89,7,"\x10 初始化中... ");
  130.                           init_ds1302();
  131.                           rds1302_data();
  132.                           delay_pw();
  133.                           display_cnasc(0x9a,6,"\x10 完成!(OK)");
  134.                           while(gotkey()!=11);
  135.                           key=10;
  136.                           break;
  137.                         }
  138.                       }while(1);
  139.                         }
  140.                     if(key==10) break;
  141.                   }
  142.                   break;
  143.         }
  144.         key=99;save=d;
  145.       }
  146.       if(key==99) break;
  147.     }while(1);
  148.   }while(1);
  149. }


  150. /*=====================================================================================
  151. 函数名称:版本信息
  152. 功能描述:  
  153. 全局变量:
  154. 参数说明:见函数
  155. 返回说明:无
  156. 设 计 人:JZHG
  157. 版    本:1.0
  158. 说    明:
  159. ======================================================================================*/

  160. void version_func(void)
  161. {
  162.   uchar save,v=0;
  163.   display_cnasc(0x82,3,"版  本");
  164.   dis_title_e();
  165.   do
  166.   {
  167.     display_cnasc(0x90,8,version[v]);
  168.     display_cnasc(0x88,8,version[v+1]);
  169.     display_cnasc(0x98,8,version[v+2]);
  170.     if(v!=0) display_cnasc(0x97,1," \x1e");
  171.     else if(v==0)
  172.       display_cnasc(0x97,1,"院");
  173.     else display_cnasc(0x97,1,"  ");
  174.     if(v!=7) display_cnasc(0x9f,1," \x1f");
  175.     else display_cnasc(0x9f,1,"  ");
  176.     save=gotkey();
  177.     if(save==2&&v<7)
  178.     {
  179.       display_cnasc(0x9f,1," \x04");
  180.       delay(30000);
  181.       v++;
  182.     }
  183.     if(save==5&&v>0)
  184.     {
  185.       display_cnasc(0x97,1," \x04");
  186.       delay(30000);
  187.       v--;
  188.     }
  189.     if(save==1) return;
  190.     if((save==11||save==3)&&v==7)
  191.     {
  192.       display_cnasc(0x9e,2,") \x09 ");
  193.       delay(30000);
  194.       return;     
  195.     }
  196.   }while(1);
  197. }



  198. /*=====================================================================================
  199. 函数名称:系统主函数
  200. 功能描述:  
  201. 全局变量:
  202. 参数说明:见函数
  203. 返回说明:无
  204. 设 计 人:JZHG
  205. 版    本:1.0
  206. 说    明:
  207. ======================================================================================*/
  208. void main()
  209. {
  210.   uchar key,ys;                          
  211.   init_lcd();                         // 初始化lcd
  212.   lcd_bl=als_tl=als_th=buzzer=pw_oc=close;
  213.   key=r1302(d02_initsi+1);            // 读出1302初始化标记位
  214.   if(bl1) lcd_bl=close;
  215.   else lcd_bl=open;
  216.   for(ys=8;ys>0;ys--)
  217.   {
  218.       display_cnasc(0x92,4,"志高电子");   // 显示开机画面“志高电子”
  219.       display_cnasc(0x9d,3,"—JZHG");
  220.       delay_pw();
  221.   }
  222.   if(key!=0xb4)  init_ds1302();       // DS1302初始化
  223.   rds1302_data();                     // 开机读回设置数据
  224.   rds1302_date();
  225.   rds1302_time();                     // 读日期时间   
  226.   if(!ds18b20) init_ds18b20();        // 初始化18b20
  227.   if(ds18b20)
  228.   {                                 
  229.     ds18b20_func();                    // 读出温度
  230.   }
  231.   time_init();                         // 定时器初始化
  232.   delay_pw();resu[11]=0;
  233.   while(1)
  234.   {  
  235.     EA=1;
  236.     TR0=1;
  237.     dis_sig=1;  
  238.     clear_dis();
  239.     if(di0){init_d2=1;dis_mode2();init_d2=0;}
  240.     else if(di1) dis_mode3();
  241.     else dis_mode1();   
  242.     do
  243.     {
  244.       key=gotkey();
  245.       if(key==255)          // 键盘密码输入
  246.       {
  247.         TR0=0;
  248.         dis_sig=0;
  249.         clear_dis();
  250.         dis_title_e();
  251.         display_cnasc(0x82,3,"键盘锁");
  252.         display_cnasc(0x90,5,"输入密码:");
  253.         while(1)
  254.         {
  255.           keb=0;
  256.           key=input_passwork();
  257.           if(key==10) {keb=1;resu[11]=2;break;}
  258.           key=passwork_comp();
  259.           if(key==1) {keb=1;resu[11]=0;break;}   
  260.         }
  261.         rds1302_date();
  262.         rds1302_time();
  263.         save_time=now;
  264.         break;
  265.       }
  266.       if(key==11)
  267.       {
  268.         dis_menu_key(1);
  269.         delay(35000);
  270.         do
  271.         {
  272.           dis_sig=0;
  273.           TR0=0;
  274.           clear_dis();
  275.           key=dis_menu();
  276.           clear_dis();
  277.           if(key==0) adjust_func();
  278.           else if(key==1) // 调用相应程序功能S
  279.           {
  280.             while(1)
  281.             {
  282.               clear_dis();
  283.               key=tool_func();
  284.               if(key==4) break;
  285.               clear_dis();
  286.               switch(key)
  287.               {
  288.                 case 0: calculator();
  289.                         break;
  290.                 case 1: temp_func();
  291.                         break;
  292.                 case 2: alarm_func();
  293.                         break;
  294.                 case 3: nba_timer();
  295.                         break;
  296.               }
  297.             }
  298.           }
  299.           else if(key==2)   set_func();
  300.           else if(key==3)   passw_func();
  301.           else if(key==4) version_func();
  302.           else
  303.           {
  304.             rds1302_date();
  305.             rds1302_time();
  306.             save_time=now;
  307.             resu[11]=0;
  308.             dis_sig=1;
  309.             break;
  310.           }
  311.         }while(1);
  312.       }
  313.       if(dis_sig) break;
  314.     }while(1);
  315.   }
  316. }
复制代码
回复

使用道具 举报

ID:69553 发表于 2014-12-16 17:11 | 显示全部楼层
支持老师,很少见了
回复

使用道具 举报

ID:69553 发表于 2014-12-16 17:11 | 显示全部楼层
支持老师,很少见了
回复

使用道具 举报

ID:69553 发表于 2014-12-16 17:11 | 显示全部楼层
支持
回复

使用道具 举报

ID:69553 发表于 2014-12-16 17:11 | 显示全部楼层
支持
回复

使用道具 举报

ID:60811 发表于 2014-12-21 10:37 | 显示全部楼层
支持
回复

使用道具 举报

ID:70075 发表于 2014-12-21 17:34 | 显示全部楼层
回复

使用道具 举报

ID:70075 发表于 2014-12-21 17:35 | 显示全部楼层
挺好的
回复

使用道具 举报

ID:70075 发表于 2014-12-21 17:35 | 显示全部楼层
希望更多资料,嘿嘿
回复

使用道具 举报

ID:72399 发表于 2015-1-17 21:18 | 显示全部楼层
呵呵很好值得学习
回复

使用道具 举报

ID:72846 发表于 2015-1-28 11:41 | 显示全部楼层
精致的源代码。感谢
回复

使用道具 举报

ID:72846 发表于 2015-1-28 11:42 | 显示全部楼层
很喜欢。。。。
回复

使用道具 举报

ID:72565 发表于 2015-2-2 01:28 | 显示全部楼层

好好看看   拿走了  谢谢楼主
回复

使用道具 举报

ID:75610 发表于 2015-4-21 12:15 | 显示全部楼层
真是学习的好资料,谢谢分享
回复

使用道具 举报

ID:64540 发表于 2015-5-6 18:35 | 显示全部楼层
确实是好资料!!要是是仿真图就好了,不知道为什么要用矩形键盘
回复

使用道具 举报

ID:80961 发表于 2015-5-24 14:07 | 显示全部楼层
nice!!!!
回复

使用道具 举报

ID:54731 发表于 2015-5-24 19:03 | 显示全部楼层
楼主:你应该把程序写成模块的,这样看会简介明了,你这样写有点乱
回复

使用道具 举报

ID:80741 发表于 2016-1-25 09:23 来自手机 | 显示全部楼层
顶起,,,
回复

使用道具 举报

ID:108622 发表于 2016-3-28 11:37 | 显示全部楼层
数码管能用吗
回复

使用道具 举报

ID:86621 发表于 2016-4-18 14:06 | 显示全部楼层
我要攒
回复

使用道具 举报

ID:128610 发表于 2016-6-29 21:22 | 显示全部楼层
怎么用不了呢
回复

使用道具 举报

ID:102293 发表于 2016-6-29 22:07 | 显示全部楼层
真利害,谢谢分享。
回复

使用道具 举报

ID:128625 发表于 2016-6-29 22:17 | 显示全部楼层
多谢了 谢谢分享
回复

使用道具 举报

ID:10075 发表于 2016-7-11 09:47 | 显示全部楼层
看看产学习学习
回复

使用道具 举报

ID:88643 发表于 2016-7-14 13:17 来自手机 | 显示全部楼层
好东西。
回复

使用道具 举报

ID:88643 发表于 2016-7-14 13:18 来自手机 | 显示全部楼层
好东西。
回复

使用道具 举报

ID:128384 发表于 2016-8-4 16:14 | 显示全部楼层
厉害,支持
回复

使用道具 举报

ID:148094 发表于 2017-1-6 13:58 | 显示全部楼层
很好很好
回复

使用道具 举报

ID:156472 发表于 2017-1-29 21:23 来自手机 | 显示全部楼层
初始密码多少
回复

使用道具 举报

ID:146632 发表于 2017-2-22 16:28 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

ID:135781 发表于 2017-4-8 18:33 | 显示全部楼层
从开始到结尾多少行呀,看得好累呢,要是模块化就好了
回复

使用道具 举报

ID:306530 发表于 2018-4-19 08:56 | 显示全部楼层
很厉害
回复

使用道具 举报

ID:627586 发表于 2019-11-22 10:53 | 显示全部楼层
我用STC89C516RD+单片机运行此程序,时间和日期不走,设置了也不走,希望支持
回复

使用道具 举报

ID:627586 发表于 2019-11-22 11:00 | 显示全部楼层
我用STC89C516RD+单片机运行此程序,时间和日期不走,调整保存成功后也不行,希望支持
回复

使用道具 举报

ID:476271 发表于 2019-11-22 11:26 | 显示全部楼层
学习啦
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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