找回密码
 立即注册

QQ登录

只需一步,快速开始

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

以单片机为核心的厨房定时器设计

[复制链接]
跳转到指定楼层
楼主
这是我花了两个星期做的以单片机为核心的厨房定时器报警电路设计其实功能有 启动 暂停 加一 减一
第一次发帖,希望大家体谅


电路原理图如下:


单片机源程序如下:
  1. /*
  2. 1、按键可以调整当时时间
  3. 2、按键可以调节定时时间
  4. 3、定时时间到继电器吸合

  5. *8位数码管显示 时间格式格式 12-08-00 标示12点08分00秒

  6. S1 用于小时 加1操作  
  7. S2 用于分钟 加1操作
  8. S2 用于分钟减1操作
  9. */

  10. #include <reg52.h>


  11. sbit KEY1=P3^2;
  12. sbit KEY2=P3^3;
  13. sbit KEY3=P3^4;


  14. sbit LED=P1^2;
  15. code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  16.                         //共阴数码管 0-9
  17. unsigned char StrTab[8];  //定义缓冲区
  18. unsigned char minute=30,hour=12,second;  //定义并且初始化值 12:30:00

  19. void delay(unsigned int cnt)//延时函数
  20. {
  21. while(--cnt);
  22. }


  23. void Displaypro(void)
  24. {

  25.                 StrTab[0]=tab[hour/10];    //显示正常时间
  26.                         StrTab[1]=tab[hour%10];
  27.                         StrTab[2]=0x40;
  28.                         StrTab[3]=tab[minute/10];
  29.                         StrTab[4]=tab[minute%10];
  30.                         StrTab[5]=0x40;
  31.             StrTab[6]=tab[second/10];
  32.                         StrTab[7]=tab[second%10];
  33.        
  34. }

  35. main()//主函数
  36. {

  37.    
  38.     TMOD |=0x01;//定时器0 10ms in 12M crystal 用于计时
  39.         TH0=0xd8;
  40.         TL0=0xf0;
  41.         ET0=1;
  42.         TR0=1;

  43.     TMOD |=0x10; //定时器1用于动态扫描
  44.         TH1=0xF8;
  45.         TL1=0xf0;
  46.         ET1=1;
  47.         TR1=1;
  48.     EA =1;
  49.    

  50. Displaypro();

  51. while(1)//主循环
  52.   {
  53.    
  54. /////////////////////////////////////////////////////////////////
  55.   if(!KEY1) //按键1去抖以及动作
  56.     {
  57.     delay(10000);
  58.     if(!KEY1)
  59.            {         
  60.              hour++;if(hour==24)hour=0;     //正常时间 小时 加1
  61.          Displaypro();
  62.            }
  63.         }
  64. ////////////////////////////////////////////////////////////////
  65. /////////////////////////////////////////////////////////////////
  66.   if(!KEY2) //按键去抖以及动作
  67.     {
  68.     delay(10000);
  69.     if(!KEY2)
  70.            {
  71.             minute++;if(minute==59)minute=0;//分加1
  72.             Displaypro();
  73.           }
  74.         }
  75. /////////////////////////////////////////////////////////////////
  76.   if(!KEY3) //按键去抖以及动作
  77.     {
  78.     delay(10000);
  79.     if(!KEY3)
  80.            {
  81.             minute--;if(minute==0)minute=59;  //分减1
  82.             Displaypro();
  83.           }
  84.         }
  85.   }
  86. }
  87. ////////////////////////////////////////////////////////////////
  88. /********************************/
  89. /*      定时中断1                */
  90. /********************************/
  91. void time1_isr(void) interrupt 3 using 0//定时器1用来动态扫描
  92. {
  93.     static unsigned char num;
  94.     TH1=0xF8;//重入初值
  95.         TL1=0xf0;

  96.         switch (num){
  97.      case 0:P2=0;P0=StrTab[num];break; //分别调用缓冲区的值进行扫描
  98.          case 1:P2=1;P0=StrTab[num];break;
  99.          case 2:P2=2;P0=StrTab[num];break;
  100.          case 3:P2=3;P0=StrTab[num];break;
  101.          case 4:P2=4;P0=StrTab[num];break;
  102.          case 5:P2=5;P0=StrTab[num];break;
  103.      case 6:P2=6;P0=StrTab[num];break;
  104.          case 7:P2=7;P0=StrTab[num];break;
  105.          default:break;
  106. }
  107. num++;     //扫描8次,使用8个数码管
  108. if(num==8)
  109.    num=0;
  110. }
  111. //////////////////////////////////////////////////////////////////
  112. /********************************/
  113. /*      定时中断0                */
  114. /********************************/
  115. void tim(void) interrupt 1 using 1
  116. {
  117. static unsigned char count;//定义内部静态变量

  118. TH0=0xd8;//重新赋值
  119. TL0=0xf0;
  120. count++;
  121.    switch (count)
  122.           {
  123.            case 0:
  124.            case 20:
  125.            case 40:
  126.            case 60:
  127.            case 80:Displaypro(); //隔一定时间调用显示处理
  128.                    break;
  129.            case 50:LED=!LED; //半秒 LED闪烁
  130.                    break;
  131.            default:break;
  132.           }

  133. if (count==100)
  134.     {
  135.     count=0;
  136.     second++;//秒加1
  137.         if(second==60)
  138.            {
  139.            second=0;
  140.            minute++; //分加1
  141.            if(minute==60)
  142.                   {
  143.                    minute=0;
  144.                    hour++;  //时加1
  145.                    if(hour==24)
  146.                       hour=0;
  147.                   }  
  148.       
  149.            }
  150.    
  151.    }

  152. }
复制代码

所有资料51hei提供下载:
203-普通定时器时钟.zip (26.33 KB, 下载次数: 19)


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

使用道具 举报

沙发
ID:162136 发表于 2018-6-11 23:24 | 只看该作者
鼓励动手。这具体的作用是什么?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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