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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3334|回復: 0
打印 上一主題 下一主題
收起左側(cè)

基于單片機的倒計時牌控制系統(tǒng)仿真+實物設計

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:267779 發(fā)表于 2017-12-27 15:50 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機倒計時牌仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


實物圖:


倒計時牌單片機源程序如下:
  1. #include<reg52.h>
  2. #include<lcd1602.h>        //LCD1602頭文件
  3. #include<ds1302.h>         //DS1302時鐘頭文件
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit key1=P1^0;            //調(diào)整模式選擇按鍵
  7. sbit key2=P1^1;            //加按鍵
  8. sbit key3=P1^2;            //減按鍵
  9. sbit key4=P1^3;            //跳出調(diào)整模式
  10. sbit key5=P1^4;
  11. sbit SPK=P1^7;             //接鬧鐘
  12. int aa=80;
  13. uchar code table2[]="Alarm:  :  :  ";
  14. uchar code table3[]="  CD:  -  -  ";
  15. uchar num,keynum,dj=255,flag1=0;
  16. char sec,min,hour,date,month,year,day,flag;
  17. char year1=9,month1=12,date1=10,hour1=12,min1=0,sec1=0;
  18. void init()               //定時器T0初始化函數(shù)
  19. {
  20.    TMOD=0x01;             //設置定時器T0為工作方式1
  21.    TH0=(65536-50000)/256;  //裝入1ms的初值
  22.    TL0=(65536-50000)%256;  //作為蜂鳴器的周期
  23.    EA=1;
  24.    ET0=1;
  25. }
  26. void T0_timer()interrupt 1  //定時器T0中斷服務程序
  27.   {            
  28.     TH0=(65536-1000)/256;   //重裝初值
  29.     TL0=(65536-1000)%256;
  30.           SPK=!SPK;  
  31.                   
  32.    }

  33. void keyscan()        //鍵盤掃描函數(shù)   
  34. {
  35.   if(key4==0)          //如果key4按下跳出調(diào)整模式
  36.   {
  37.     delay(5);
  38.     if(key4==0)
  39.       goto Tuichu;
  40.     while(!key4)
  41.       ;
  42.     }
  43.   
  44.   if(key1==0)             //判斷key1是否按下
  45.   {
  46.    delay(5);
  47.    if(key1==0)
  48.    {
  49.     while(!key1);
  50.     keynum++;
  51.         switch(keynum)
  52.     {
  53.          case 1:
  54.             write_com(0x0f);  //開光標閃爍:0x0f
  55.             gotoxy(2,6);     //按一次鍵,時間停止,秒光標閃爍
  56.             flag=1;
  57.                         break;
  58.      case 2:  
  59.              gotoxy(2,3);     //分調(diào)整模式
  60.                             break;
  61.      case 3:
  62.            gotoxy(2,0);              //小時調(diào)整模式
  63.                            break;
  64.      case 4:
  65.            gotoxy(1,15);          //星期調(diào)整模式
  66.                       break;
  67.      case 5:
  68.            gotoxy(1,8);              //日調(diào)整模式
  69.                    break;
  70.      case 6:
  71.             gotoxy(1,5);          //月調(diào)整模式
  72.                         break;
  73.      case 7:
  74.             gotoxy(1,2);      //年調(diào)整模式
  75.                         break;
  76.      case 8:
  77.             gotoxy(2,10);
  78.             write_str("CD:");
  79.             gotoxy(2,13);
  80.             write_date(0x30+dj/100);
  81.             gotoxy(2,14);
  82.             write_num(dj%100);
  83.             gotoxy(2,15);
  84.             break;
  85.          case 9:                      //鬧鐘,倒計時調(diào)整模式界面顯示
  86.                          write_com(0x01);
  87.                          gotoxy(1,0);
  88.                             write_str(&table2);
  89.              gotoxy(2,0);
  90.                          write_str(&table3);
  91.                          gotoxy(1,6);
  92.                          write_num(hour1);
  93.                          gotoxy(1,9);
  94.                          write_num(min1);
  95.                          gotoxy(1,12);
  96.                          write_num(sec1);
  97.                          gotoxy(2,5);
  98.                          write_num(year1);
  99.                          gotoxy(2,8);
  100.                          write_num(month1);
  101.                          gotoxy(2,11);
  102.                          write_num(date1);
  103.                          gotoxy(1,12);     //鬧鐘秒調(diào)整模式
  104.                          break;
  105.      case 10:                      //鬧鐘分調(diào)整模式
  106.                  gotoxy(1,9);
  107.                      break;
  108.           case 11:                      //鬧鐘小時調(diào)整模式
  109.                  gotoxy(1,6);
  110.                          break;
  111.      case 12:                 //倒計時年調(diào)整模式
  112.                   gotoxy(2,11);         
  113.                           break;
  114.          case 13:                          //倒計時月調(diào)整模式
  115.                   gotoxy(2,8);
  116.                           break;
  117.          case 14:                 //倒計時日調(diào)整模式
  118.                  gotoxy(2,5);
  119.                          break;   
  120.          
  121. Tuichu: case 15:              //跳出調(diào)整模式
  122.                     keynum=0;
  123.                     write_com(0x01);
  124.                     write_com(0x0c);
  125.                      tubiao();           
  126.                     settime_ds1302(0x80,sec);
  127.                     settime_ds1302(0x82,min);
  128.                     settime_ds1302(0x84,hour);
  129.                     settime_ds1302(0x86,date);
  130.                     settime_ds1302(0x88,month);
  131.                     settime_ds1302(0x8a,day);
  132.                     settime_ds1302(0x8c,year);
  133.                     flag=0;
  134.             break;
  135.            }
  136.   }
  137. }
  138. /*****加按鍵****/
  139. if(keynum!=0)
  140.   {
  141.    if(key2==0)
  142.    {
  143.     delay(5);
  144.     if(key2==0)
  145.     {
  146.      while(!key2);
  147.      switch(keynum)
  148.          {
  149.       case 1:                    //秒加1
  150.                  sec++;
  151.            if(sec==60)
  152.                sec=0;
  153.            gotoxy(2,6);
  154.            write_num(sec);
  155.            gotoxy(2,7);
  156.                    break;
  157.       case 2:               //分加1
  158.             min++;
  159.                     if(min==60)
  160.                       min=0;
  161.                     gotoxy(2,3);
  162.                     write_num(min);
  163.                     gotoxy(2,4);
  164.                         break;
  165.       case 3:                        //小時加1
  166.             hour++;
  167.                 if(hour==24)
  168.                            hour=0;
  169.                 gotoxy(2,0);
  170.                 write_num(hour);
  171.                 gotoxy(2,1);
  172.                  break;
  173.      case 4:                        //星期加1
  174.             day++;
  175.             if(day==8)
  176.                 day=0;
  177.                     gotoxy(1,15);
  178.                     write_date(0x30+day);
  179.                     gotoxy(1,15);
  180.                     break;
  181.       case 5:                      //日加1
  182.             date++;
  183.             if(date==32)
  184.                date=0;
  185.                 gotoxy(1,8);
  186.                 write_num(date);
  187.                 gotoxy(1,9);
  188.                     break;
  189.       case 6:                    //月加1
  190.             month++;
  191.             if(month==13)
  192.                 month=1;
  193.             gotoxy(1,5);
  194.             write_num(month);
  195.             gotoxy(1,6);
  196.                         break;
  197.       case 7:                         //年加1
  198.             year++;
  199.             gotoxy(1,2);
  200.             write_num(year);
  201.             gotoxy(1,3);
  202.                         break;
  203.       case 8:                  //倒計時間加1
  204.             dj++;
  205.             if(dj==201)
  206.                dj=0;
  207.             gotoxy(2,13);
  208.             write_date(0x30+dj/100);
  209.             gotoxy(2,14);
  210.             write_num(dj%100);
  211.             gotoxy(2,15);
  212.             break;
  213.             
  214.       case 9:                            //鬧鐘秒加1
  215.                      sec1++;
  216.                      gotoxy(1,12);
  217.                          if(sec1==60)
  218.                           sec1=0;
  219.                      write_num(sec1);
  220.                      gotoxy(1,13);
  221.                       break;
  222.           case 10:                        //鬧鐘分加1
  223.                      min1++;
  224.                          if(min1==60)
  225.                             min1=0;
  226.                      gotoxy(1,9);
  227.                      write_num(min1);
  228.                      gotoxy(1,10);
  229.                          break;
  230.      case 11:                        //鬧鐘小時加1
  231.                      hour1++;
  232.                          if(hour1==24)
  233.                               hour1=0;
  234.                      gotoxy(1,6);
  235.                      write_num(hour1);
  236.              gotoxy(1,7);
  237.                          break;
  238.       
  239.      case 12:                 //倒計時日加
  240.                  date1++;
  241.                          if(date1==32)
  242.                          date1=0;
  243.                          gotoxy(2,11);
  244.                          write_num(date1);
  245.                          gotoxy(2,12);
  246.                          break;
  247.          case 13:                  //倒計時月加
  248.                  month1++;
  249.                          if(month1==13)
  250.                              month1=0;
  251.                          gotoxy(2,8);
  252.                          write_num(month1);
  253.                          gotoxy(2,9);
  254.                          break;
  255.           case 14:                 //倒計時年加
  256.                  year1++;
  257.                          gotoxy(2,5);
  258.                          write_num(year1);
  259.                          gotoxy(2,6);
  260.                          break;              
  261.                    }
  262.           }
  263.    }
  264.    }
  265.   //減操作
  266.    if(key3==0)
  267.    {
  268.       delay(5);
  269.       if(key3==0)
  270.      {
  271.        while(!key3);
  272.            switch(keynum)
  273.        {
  274.              case 1:              //秒減1
  275.              sec--;
  276.              if(sec==-1)
  277.                 sec=59;
  278.              gotoxy(2,6);
  279.              write_num(sec);
  280.              gotoxy(2,7);
  281.                          break;
  282.         case 2:               //分加1
  283.              min--;
  284.              if(min==-1)
  285.                  min=59;
  286.              gotoxy(2,3);
  287.              write_num(min);
  288.              gotoxy(2,4);
  289.                          break;
  290.       case 3:                 //小時加1
  291.                      hour--;
  292.                      if(hour==-1)
  293.                         hour=23;
  294.                      gotoxy(2,0);
  295.                      write_num(hour);
  296.                      gotoxy(2,1);
  297.                          break;
  298.       case 4:                              //星期加1
  299.            day--;
  300.            if(day==0)
  301.                day=7;
  302.            gotoxy(1,15);
  303.            write_date(0x30+day);
  304.            gotoxy(1,15);
  305.                    break;
  306.      case 5:                  //日加1
  307.                date--;
  308.                if(date==0)
  309.                    date=31;
  310.                gotoxy(1,8);
  311.                write_num(date);
  312.                gotoxy(1,9);
  313.                    break;
  314.      case 6:                   //月加1
  315.                     month--;
  316.                     if(month==0)
  317.                        month=12;
  318.                     gotoxy(1,5);
  319.                     write_num(month);
  320.                     gotoxy(1,6);
  321.                         break;
  322.       case 7:                         //年加1
  323.             year--;
  324.             gotoxy(1,2);
  325.             write_num(year);
  326.             gotoxy(1,3);
  327.                         break;
  328.       case 8:                   //倒計時間減1
  329.             dj--;
  330.            if(dj==0)
  331.                dj=200;
  332.             gotoxy(2,13);
  333.             write_date(0x30+dj/100);
  334.             gotoxy(2,14);
  335.             write_num(dj%100);
  336.             gotoxy(2,15);
  337.             break;
  338.           case 9:                   //鬧鐘秒加1
  339.             sec1--;
  340.                 if(sec1==-1)
  341.                   sec1=59;
  342.             gotoxy(1,12);
  343.             write_num(sec1);
  344.             gotoxy(1,13);
  345.                         break;
  346.           case 10:                 //鬧鐘分加1
  347.              min1--;
  348.                  if(min1==-1)
  349.                     min1=59;
  350.              gotoxy(1,9);
  351.              write_num(min1);
  352.              gotoxy(1,10);
  353.                          break;
  354.       case 11:                   //鬧鐘小時加1
  355.                       hour1--;
  356.                           if(hour1==-1)
  357.                           hour1=23;
  358.                       gotoxy(1,6);
  359.                       write_num(hour1);
  360.                       gotoxy(1,7);
  361.                           break;
  362.        case 12:                   //倒計時日加1
  363.                  date1--;
  364.                          if(date1==0)
  365.                          date1=31;
  366.                          gotoxy(2,11);
  367.                          write_num(date1);
  368.                          gotoxy(2,12);
  369.                          break;
  370.            case 13:                   //倒計時月加1
  371.                   month1--;
  372.                           if(month1==0)
  373.                               month1=12;
  374.                           gotoxy(2,8);
  375.                           write_num(month1);
  376.                           gotoxy(2,9);
  377.                           break;
  378.           case 14:                    //倒計時年加1
  379.                   year1--;
  380.                           gotoxy(2,5);
  381.                           write_num(year1);
  382.                           gotoxy(2,6);
  383.                           break;
  384.       }
  385.     }
  386.    }
  387.   }
  388. /***************主函數(shù)*****************/
  389. void main()
  390. {
  391.    init_lcd();       //液晶初始化
  392.    init();           //定時器T0初始化
  393.    kxcs();
  394.    write_com(0x01);  //清屏
  395.    tubiao();         //顯示字符              
  396. while(1)
  397. {   
  398.    if(hour1==hour&&min1==min&&sec1==sec&&keynum==0&&!key5)       //鬧鐘判斷
  399.                     TR0=1;
  400.    if(year1==year&&month1==month&&date1==date&&keynum==0&&!key5)//倒計時日期判斷
  401.       {
  402.             flag1=1;  //倒計時顯示標志位
  403.             TR0=1;    //啟動定時器1鬧鐘提示            
  404.             year1++;  
  405.       }
  406.       
  407.     if(key1==0||key2==0||key3==0||key4==0||key5)  //按任意鍵跳出鬧鐘
  408.              TR0=0;
  409.     keyscan();       //鍵盤掃描
  410.     if(flag==0)      //flag是判斷是否有鍵按下,有鍵按下時flag為1
  411.     {
  412.        if(hour==23&&min==59&&sec==59&&flag1)//當flag1為1時且時間為23:59:59:時
  413.        {                                    //倒計時間減1
  414.            dj--;
  415.            delay(1000);                     //1s延時很必要
  416.        }
  417.        if(flag1==1&&aa>0)     //倒計時顯示:flag1==1時顯示
  418.        {  
  419.           if(aa==80)         //顯示倒計時畫面時循環(huán)顯示80次
  420.           {
  421.             write_com(0x01);
  422. ……………………

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

所有資料51hei提供下載:
基于單片機的倒計時牌控制系統(tǒng)設計.rar (160.93 KB, 下載次數(shù): 36)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产欧美在线 | 中文字幕一区二区三区乱码在线 | 欧美三级三级三级爽爽爽 | 精品视频国产 | 日韩中文字幕在线视频观看 | 欧美精品久久 | 羞羞网站在线观看 | 久久久精品综合 | 久久精品一区 | 国产福利视频导航 | 男人天堂网址 | 国产欧美视频一区二区三区 | 日韩一区二区三区视频 | 欧美在线观看一区 | 日韩成人 | 亚洲欧美一区二区三区视频 | 国产精品久久久久久一区二区三区 | 欧美一级片在线观看 | 亚洲精品久久久久久国产精华液 | 久久久久国产一区二区三区四区 | 中文字幕一区在线观看视频 | 精品在线一区二区 | 久久久精品一区二区三区四季av | 国产偷录视频叫床高潮对白 | 精品久久99 | 一区二区三区在线播放 | 一区二区在线免费观看 | 久久精品国产久精国产 | 日韩中文字幕在线视频观看 | 99精品在线 | 精品综合久久久 | 成人影院av | 日本不卡一区二区三区在线观看 | 99re6在线 | 久久99精品久久久久久国产越南 | 中文字幕乱码一区二区三区 | 国产精品99久 | 成人不卡 | 综合一区二区三区 | 国产高清视频在线播放 | 国产91网站在线观看 |