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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機數字鬧鐘仿真(自動值班打鈴系統)新手的第一個51數碼管鬧鐘

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


單片機源程序:
  1. #include <reg51.h>
  2. #include <intrins.h>                                                                                                                                                                                                                 
  3. #define uchar unsigned char                                                                                                                                                                                               
  4. #define uint unsigned int
  5. uchar code DSY_CODE[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共陰極總段//
  6. uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xff,0,0};//時間顯示時-分 模式
  7. uchar DSY_BUFFER1[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //模式顯示段//
  8. uchar Scan_BIT;//位選擇//
  9. uchar DSY_IDX;//段選擇//
  10. uchar Key_State; //按鍵控制//
  11. uchar s,s100,h1        ;
  12. char  h,m;
  13. sbit dd=P1^7;        //喇叭和led輸出端口//
  14. sbit cc=P1^6;
  15. sbit ss=P1^5; //時間和秒轉換顯示鍵//
  16. void DelayMS(uchar x)
  17. {
  18.   uchar i;
  19.   while(x--) for(i = 0;i<120;i++);
  20.   }
  21. void Increase_Hour()
  22.   {
  23.      if (++h>23) h=0;
  24.          DSY_BUFFER[0] =DSY_CODE[h/10];
  25.          DSY_BUFFER[1] =DSY_CODE[h%10];
  26.          }
  27. void Decrease_Hour()
  28.   {         h--;
  29.      if (h<0) h=23;
  30.          DSY_BUFFER[0] =DSY_CODE[h/10];
  31.          DSY_BUFFER[1] =DSY_CODE[h%10];
  32.          }

  33. void Increase_Minute()
  34.   {
  35.      if(++m>59)
  36.          {
  37.            m=0;Increase_Hour();
  38.            }
  39.                  DSY_BUFFER[3] =DSY_CODE[m/10];
  40.              DSY_BUFFER[4] =DSY_CODE[m%10];
  41.                  }
  42. void Decrease_Minute()
  43.   {           m--;
  44.      if(m<0)           m=59;
  45.                  DSY_BUFFER[3] =DSY_CODE[m/10];
  46.              DSY_BUFFER[4] =DSY_CODE[m%10];
  47.                  }  
  48. void Increase_Hour1()
  49.   {
  50.      if (++h1>7) h1=1;
  51.          DSY_BUFFER[6] =DSY_CODE[h1/10];
  52.          DSY_BUFFER[7] =DSY_CODE[h1%10];
  53.          }
  54. void Increase_Second()
  55.   {
  56.      if(++s>59)
  57.          {
  58.            s=0;Increase_Minute();
  59.            }
  60.                  DSY_BUFFER1[0] =DSY_CODE[s/10];
  61.              DSY_BUFFER1[1] =DSY_CODE[s%10];
  62.                  }
  63.   void T0_INT() interrupt 1         //顯示屏顯示//
  64.   {
  65.     TH0=(65536-1000)/256;
  66.         TL0=(65536-1000)%256;
  67.         if(ss==1)                          //P1.5鍵沒按下,顯示時間//
  68.         {
  69.         P3=Scan_BIT;
  70.         P2=~DSY_BUFFER[DSY_IDX];
  71.         }
  72.         else {                                 //P1.5鍵按下,閃//
  73.                  P3=Scan_BIT;
  74.                 P2=~DSY_BUFFER[DSY_IDX];
  75.             }
  76.         Scan_BIT=_crol_(Scan_BIT,1);//位顯示移動//
  77.         DSY_IDX=(DSY_IDX+1)%8;         //段選擇每次變化//
  78.        
  79.         if(h1==3)
  80. {        if(h==6&m==0)cc=dd=0;else cc=dd=1;//時間到鬧鐘響,led亮,一分鐘//
  81.         if(h==6&m==15)cc=dd=0; else cc=dd=1;
  82.         if(h==7&m==0)cc=dd=0; else cc=dd=1;
  83. if(h==12&m==30)cc=dd=0;         else cc=dd=1;
  84. if(h==14&m==0)cc=dd=0;         else cc=dd=1;
  85. if(h==16&m==30)cc=dd=0;         else cc=dd=1;
  86. if(h==18&m==0)cc=dd=0;          else cc=dd=1;
  87. if(h==18&m==45)cc=dd=0;          else cc=dd=1;
  88. if(h==19&m==30)cc=dd=0;                else cc=dd=1;
  89. if(h==21&m==30)cc=dd=0;          else cc=dd=1;
  90. if(h==22&m==0)cc=dd=0;else cc=dd=1;        }
  91.         else cc=dd=1;

  92.         if(h1==1|h1==4|h1==2|h1==5)
  93. {        if(h==6&m==0)cc=dd=0;else cc=dd=1;//時間到鬧鐘響,led亮,一分鐘//
  94.         if(h==7&m==0)cc=dd=0; else cc=dd=1;
  95. if(h==12&m==30)cc=dd=0;         else cc=dd=1;
  96. if(h==14&m==0)cc=dd=0;         else cc=dd=1;
  97. if(h==16&m==30)cc=dd=0;         else cc=dd=1;
  98. if(h==18&m==0)cc=dd=0;          else cc=dd=1;
  99. if(h==18&m==45)cc=dd=0;          else cc=dd=1;
  100. if(h==19&m==30)cc=dd=0;                else cc=dd=1;
  101. if(h==21&m==30)cc=dd=0;          else cc=dd=1;
  102. if(h==22&m==0)cc=dd=0;else cc=dd=1;        }
  103.         else cc=dd=1;

  104.           if(h1==6)
  105. {        if(h==6&m==0)cc=dd=0;else cc=dd=1;//時間到鬧鐘響,led亮,一分鐘//
  106.         if(h==7&m==0)cc=dd=0; else cc=dd=1;
  107. if(h==12&m==30)cc=dd=0;         else cc=dd=1;
  108. if(h==14&m==30)cc=dd=0;         else cc=dd=1;
  109. if(h==18&m==0)cc=dd=0;          else cc=dd=1;
  110. if(h==21&m==0)cc=dd=0;                else cc=dd=1;
  111. if(h==21&m==30)cc=dd=0;          else cc=dd=1;
  112. if(h==22&m==30)cc=dd=0;else cc=dd=1;        }
  113.         else cc=dd=1;

  114.         if(h1==7)
  115. {        if(h==6&m==30)cc=dd=0;else cc=dd=1;//時間到鬧鐘響,led亮,一分鐘//
  116.                 if(h==7&m==0)cc=dd=0; else cc=dd=1;
  117. if(h==11&m==30)cc=dd=0;         else cc=dd=1;
  118. if(h==12&m==30)cc=dd=0;         else cc=dd=1;
  119. if(h==15&m==30)cc=dd=0;         else cc=dd=1;
  120. if(h==16&m==30)cc=dd=0;          else cc=dd=1;
  121. if(h==18&m==0)cc=dd=0;          else cc=dd=1;
  122. if(h==18&m==40)cc=dd=0;                else cc=dd=1;
  123. if(h==20&m==0)cc=dd=0;          else cc=dd=1;
  124. if(h==20&m==30)cc=dd=0;          else cc=dd=1;
  125. if(h==21&m==30)cc=dd=0;          else cc=dd=1;
  126. if(h==22&m==0)cc=dd=0;else cc=dd=1;        }
  127.         else cc=dd=1;
  128.           
  129.   }


  130.         void T1_INT() interrupt 3//時間秒自動加一,走時//
  131.         {
  132.           TH1=(65536-50000)/256;
  133.           TL1=(65536-50000)%256;//延時50毫秒//
  134.           if (s100==20)
  135.           {
  136.             s100=0;
  137.                 Increase_Second();
  138.       }
  139.         else s100++;
  140.         }
  141.         void main ()
  142.         {
  143.           P2=P3=0xFF;
  144.           TMOD=0x11;
  145.           TH0=(65536-1000)/256;
  146.           TL0=(65536-1000)%256;
  147.           TH1=0XDC;
  148.           TL1=0;
  149.           TCON=0x01;
  150.           EA=1;
  151.           ET0=1;
  152.           ET1=1;
  153.           h=05,m=55,s=s100,h1=1;  //時間和鬧鐘初值//
  154.           DSY_BUFFER[0]=DSY_CODE[h/10];           //時間初值賦給時間段碼顯示組//
  155.           DSY_BUFFER[1]=DSY_CODE[h%10];
  156.           DSY_BUFFER[3]=DSY_CODE[m/10];
  157.           DSY_BUFFER[4]=DSY_CODE[m%10];
  158.           DSY_BUFFER[6]=DSY_CODE[h1/10];
  159.           DSY_BUFFER[7]=DSY_CODE[h1%10];
  160.           DSY_BUFFER1[0]=DSY_CODE[h1/10];        //鬧鐘初值賦給鬧鐘段碼顯示組//
  161.           DSY_BUFFER1[1]=DSY_CODE[h1%10];
  162.           Scan_BIT=0xFE;  //給位選擇賦初值為二進制數 11111110,即只有最后一位為低電平,之后每次左移一位,依次為11111101,11111011......01111111,11111110循環移動//
  163.           DSY_IDX=0;         //段碼顯示組的選擇變量//
  164.           TR0=TR1=1;
  165.           Key_State=0xFF;
  166.           while(1)
  167.           {
  168.             if (P1^Key_State)         //判斷按鍵是否有按下//
  169.                  {
  170.                    DelayMS(10);
  171.                    if (P1^Key_State)
  172.                    {
  173.                      Key_State=P1; EA=0;
  174.                          if((Key_State&0x01)==0) Increase_Hour();           //小時加一//
  175.                          else if ((Key_State&0x02)==0) Decrease_Hour();   //小時減一//
  176.                             else if ((Key_State&0x04)==0) Increase_Minute();        //分鐘加一//
  177.                                 else if ((Key_State&0x08)==0) Decrease_Minute(); //分鐘減一//
  178.                                 else if ((Key_State&0x10)==0)                                         //復位按鍵//
  179.                                 {h=05,m=55,s=0,h1=1;
  180.                                         DSY_BUFFER[0]=DSY_CODE[h/10];
  181.                                         DSY_BUFFER[1]=DSY_CODE[h%10];
  182.                                         DSY_BUFFER[3]=DSY_CODE[m/10];
  183.                                         DSY_BUFFER[4]=DSY_CODE[m%10];
  184.                                         DSY_BUFFER[6]=DSY_CODE[h1/10];
  185.                                         DSY_BUFFER[7]=DSY_CODE[h1%10];

  186.                                 }
  187.                            else if ((Key_State&0x20)==0)Increase_Hour1();        //模式加一//
  188.                            EA=1;
  189.                            }
  190.                }
  191.                            }
  192.                            }
復制代碼

下載:
數字鬧鐘(自動值班打鈴系統).zip (48.9 KB, 下載次數: 105)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:165792 發表于 2017-3-25 07:46 來自觸屏版 | 只看該作者
學習了,不錯不錯
回復

使用道具 舉報

板凳
ID:744197 發表于 2020-5-4 22:05 | 只看該作者
厲害了,有時間學習一下
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 我想看一级黄色毛片 | 久久精品久久久久久 | 黄色一级片aaa | av在线黄| av福利网站 | 99tv| 成人在线视频网址 | 波多野结衣二区 | 国产人成精品一区二区三 | 久久久精品一区 | 久久综合九九 | 91久久国产 | 亚洲人成免费 | 国产精品精品视频 | 亚洲日韩中文字幕一区 | 日韩欧美在线观看 | 欧美日韩理论 | 一区二区三区日韩 | 欧美美女爱爱 | 国产成人精品一区二区 | 欧美国产日韩精品 | 欧美日韩中文字幕在线 | 成在线人视频免费视频 | 国产精品福利网站 | 日韩欧美天堂 | 亚洲人在线 | 国内精品久久影院 | 国产精品精品视频一区二区三区 | 日本高清视频在线播放 | 亚洲精品68久久久一区 | 国产一区999 | 亚洲视频一区在线 | 91精品久久久久久久久中文字幕 | 在线视频久久 | 超碰成人在线观看 | 亚洲一区二区在线播放 | 日韩成人在线观看 | 福利视频网站 | 人人做人人澡人人爽欧美 | 综合自拍 | 精品一区二区免费视频 |