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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

多功能電子時鐘仿真及代碼

[復制鏈接]
跳轉到指定樓層
樓主
多功能電子時鐘仿真原理圖:


  1. /**************************/
  2. /**************************/
  3. /****   電子時鐘       ****/
  4. /**************************/
  5. /**************************/

  6. #include<reg52.h>
  7. #define uint unsigned int
  8. #define uchar unsigned char
  9. char miao,fen,shi;
  10. bit flag, flag_time;
  11. char set_miao=0,set_fen=0;set_shi=12; //鬧鐘初始化
  12. uchar slnum;

  13. sbit s1=P3^0;                                         //功能鍵
  14. sbit s2=P3^1;                                         //加鍵
  15. sbit s3=P3^2;                                         //減鍵
  16. sbit s4=P3^3;                                         //鬧鐘設置


  17. sbit led1=P1^0;                                         //調整秒鐘的指示燈
  18. sbit led2=P1^1;                                         //調整分鐘的指示燈
  19. sbit led3=P1^2;                                         //調整時鐘的指示燈
  20. sbit led4=P1^3;                                         //鬧鐘設置指示燈
  21. sbit BUZZ =P1^4;                                 //報警

  22. sbit wei0=P2^0;                                         //定義8個數碼管段選
  23. sbit wei1=P2^1;
  24. sbit wei2=P2^2;
  25. sbit wei3=P2^3;
  26. sbit wei4=P2^4;
  27. sbit wei5=P2^5;
  28. sbit wei6=P2^6;
  29. sbit wei7=P2^7;

  30. uchar code table[]={
  31.                   0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
  32.                                   0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};                //共陰數碼管編碼

  33. void delay(uint z)                                  //延時函數
  34. {
  35. uint x,y;
  36. for(x=z;x>0;x--)
  37.     for(y=125;y>0;y--);

  38. }

  39. void start()                                         //定時器初始化
  40. {
  41. TMOD=0x11;
  42. TH0=(65536-50000)/256;                           //時間累加
  43. TH0=(65536-50000)%256;
  44. TH1=(65536-50000)/256;                           //鬧鐘設置
  45. TH1=(65536-50000)%256;
  46. EA=1;
  47. ET0=1;
  48. ET1=1;
  49. TR0=1;
  50. TR1=0;                                                           //關閉定時器
  51. }

  52. void display(char miao,char fen, char shi)           //顯示子程序,分別顯示時,分,秒
  53. {
  54.   P0=table[miao%10];
  55.   wei7=0;
  56.   delay(1);
  57.   wei7=1;
  58.   P0=0xff;

  59.   P0=table[miao/10];
  60.   wei6=0;
  61.   delay(1);
  62.   wei6=1;
  63.   P0=0xff;

  64.   P0=table[16];
  65.   wei5=0;
  66.   delay(1);
  67.   wei5=1;
  68.   P0=0xff;

  69.   P0=table[fen%10];
  70.   wei4=0;
  71.   delay(1);
  72.   wei4=1;
  73.   P0=0xff;

  74.   P0=table[fen/10];
  75.   wei3=0;
  76.   delay(1);
  77.   wei3=1;
  78.   P0=0xff;

  79.   P0=table[16];
  80.   wei2=0;
  81.   delay(1);
  82.   wei2=1;
  83.   P0=0xff;

  84.   P0=table[shi%10];
  85.   wei1=0;
  86.   delay(1);
  87.   wei1=1;
  88.   P0=0xff;

  89.   P0=table[shi/10];
  90.   wei0=0;
  91.   delay(1);
  92.   wei0=1;
  93.   P0=0xff;
  94. }

  95. void keyscan()                   //功能鍵
  96. {
  97. if(s1==0)
  98. {
  99.   delay(5);
  100.   if(s1==0)                            //確認功能按下
  101.   {
  102.    while(!s1);                  
  103.    slnum++;                           //功能鍵按下次數記錄
  104.    if(slnum==1)                   //功能鍵第一次按下調整“秒鐘”
  105.    {
  106.            if(flag)
  107.             TR0=1;                        //開定時器
  108.         else
  109.             TR0=0;                        //關閉定時器
  110.                 led1=0;
  111.    }


  112.    if(slnum==2)
  113.    {
  114.                 led2=0;
  115.                 led1=1;
  116.    }

  117.    if(slnum==3)
  118.    {
  119.         led3=0;
  120.                 led2=1;
  121.                 led1=1;
  122.    }

  123.         if(slnum==4)
  124.    {
  125.                 led3=1;
  126.                 led2=1;
  127.                 led1=1;
  128.                 slnum=0;
  129.                 TR0=1;
  130.    }
  131.   }
  132. }
  133. }

  134. void time()
  135. {
  136.    if(slnum!=0)
  137.    {
  138.       if(s2==0)
  139.            {
  140.            delay(5);
  141.            if(s2==0)
  142.            {
  143.            while(!s2);
  144.            switch(slnum)
  145.            {
  146.               case 1:
  147.                   miao++;
  148.                   if(miao==60)
  149.                   miao=0;
  150.                   break;
  151.                    case 2:
  152.                   fen++;
  153.                   if(fen==60)
  154.                  fen=0;
  155.                   break;
  156.                    case 3:
  157.                   shi++;
  158.                   if(shi==24)
  159.                   shi=0;
  160.                   break;
  161.                       }
  162.                     }
  163.                   }

  164.           if(s3==0)
  165.            {
  166.            delay(5);
  167.            if(s3==0)
  168.            {
  169.            while(!s3);
  170.            switch(slnum)
  171.            {
  172.               case 1:
  173.                   miao--;
  174.                   if(miao<0)
  175.                   miao=59;
  176.                   break;
  177.                    case 2:
  178.                   fen--;
  179.                   if(fen<0)
  180.                  fen=59;
  181.                   break;
  182.                    case 3:
  183.                   shi--;
  184.                   if(shi<0)
  185.                   shi=23;
  186.                   break;
  187.                       }
  188.                     }
  189.                   }
  190.                   }
  191.                   }
  192.          void set_time()
  193.          {
  194.             if(slnum==0)
  195.                  {
  196.                    if(s4==0)
  197.                    {
  198.                       delay(5);
  199.                           if(s4==0)
  200.                           {
  201.                           while(!s4);
  202.                           led4=~led4;
  203.                           flag=~flag;
  204.                           }
  205.                           }
  206.                           }
  207.                           if(flag)
  208.                           {
  209.                           if(slnum!=0)
  210.                           {
  211.                           if(s2==0)
  212.                           {
  213.                           delay(5);
  214.                           if(s2==0)
  215.                           {
  216.                           while(!s2);
  217.                           switch(slnum)
  218.                           {
  219.                           case 1:
  220.                   set_miao++;
  221.                   if(set_miao==60)
  222.                   set_miao=0;
  223.                   break;
  224.                    case 2:
  225.                   set_fen++;
  226.                   if(set_fen==60)
  227.                  set_fen=0;
  228.                   break;
  229.                    case 3:
  230.                   set_shi++;
  231.                   if(set_shi==24)
  232.                   set_shi=0;
  233.                   break;
  234.                   }
  235.                   }
  236.                   }
  237.                   if(s3==0)
  238.                   {
  239.                    delay(5);
  240.                           if(s3==0)
  241.                           {
  242.                           while(!s3);
  243.                           switch(slnum)
  244.                           {
  245.                           case 1:
  246.                   set_miao--;
  247.                   if(set_miao<0)
  248.                   set_miao=59;
  249.                   break;
  250.                    case 2:
  251.                   set_fen++;
  252.                   if(set_fen<0)
  253.                  set_fen=59;
  254.                   break;
  255.                    case 3:
  256.                   set_shi--;
  257.                   if(set_shi<0)
  258.                   set_shi=23;
  259.                   break;
  260.                   }
  261.                   }
  262.                   }
  263.                   }
  264.                   }
  265.                   }
  266.          void main()
  267.          {
  268.          start();
  269.          while(1)
  270.          {
  271.          keyscan();
  272.          time();
  273.          if(!flag)
  274.          {
  275.          display(miao,fen,shi);
  276.          }
  277.          else
  278.          {
  279.          display(set_miao,set_fen,set_shi);
  280.          }
  281.          if(miao==set_miao&&fen==set_fen&&shi==set_shi)
  282.            {
  283.              TR1=1;
  284.                  }
  285.                  if(flag_time)
  286.                  {
  287.                    TR1=0;
  288.                    BUZZ=1;
  289.                    flag_time=0;
  290.                    }
  291.                    set_time();
  292.                    }
  293.                    }
  294.          void time_0()interrupt 1
  295.          {
  296.             uchar aa;
  297.                 TH0=(65536-50000)/256;
  298.         TL0=(65536-50000)%256;
  299.                 aa++;
  300.                 if(aa==20)
  301.                 {
  302.                 aa=0;
  303.                 miao++;
  304.                 if(miao>=60)
  305.                 {
  306.                 miao=0;
  307.                 fen++;
  308.                 if(fen>=60)
  309.                 {
  310.                   fen=0;
  311.                   shi++;
  312.                   if(shi>=24)
  313.                   {
  314.                   shi=0;
  315.                   }
  316.                   }
  317.                   }
  318.                   }
  319.                   }
  320.    void time_1()interrupt 3
  321.    {
  322.       uchar bz_time;
  323.            TH1=(65536-50000)/256;
  324.         TL1=(65536-50000)%256;
  325.            bz_time++;
  326.            if(bz_time==200)
  327.                 {
  328.                 bz_time=0;
  329.                 flag_time=1;
  330.                 }
  331.                 BUZZ=~BUZZ;
  332.                 }  
  333.                           



復制代碼



電子時鐘.zip

69.77 KB, 下載次數: 59, 下載積分: 黑幣 -5

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:74868 發表于 2017-2-19 16:18 | 只看該作者
不錯功能比較多
回復

使用道具 舉報

板凳
ID:140489 發表于 2017-2-20 11:10 | 只看該作者
原來的程序,設置調整的時候數碼管不閃爍,我在原來的程序上修改了一下,現在調整的時候對應的數碼管閃爍,這樣比較直觀的知道調整的是時、分、秒。仿真通過  

/**************************/
/**************************/
/****   電子時鐘       ****/
/**************************/
/**************************/

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
char miao,fen,shi;
bit flag, flag_time;
char set_miao=0,set_fen=0;set_shi=12; //鬧鐘初始化
uchar slnum,snum,fnum,mnum;

sbit s1=P3^0;                                         //功能鍵
sbit s2=P3^1;                                         //加鍵
sbit s3=P3^2;                                         //減鍵
sbit s4=P3^3;                                         //鬧鐘設置


sbit led1=P1^0;                                         //調整秒鐘的指示燈
sbit led2=P1^1;                                         //調整分鐘的指示燈
sbit led3=P1^2;                                         //調整時鐘的指示燈
sbit led4=P1^3;                                         //鬧鐘設置指示燈
sbit BUZZ =P1^4;                                 //報警

sbit wei0=P2^0;                                         //定義8個數碼管段選
sbit wei1=P2^1;
sbit wei2=P2^2;
sbit wei3=P2^3;
sbit wei4=P2^4;
sbit wei5=P2^5;
sbit wei6=P2^6;
sbit wei7=P2^7;

uchar code table[]={
                  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
                                  0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};                //共陰數碼管編碼

void delay(uint z)                                  //延時函數
{
uint x,y;
for(x=z;x>0;x--)
    for(y=125;y>0;y--);

}

void start()                                         //定時器初始化
{
TMOD=0x11;
TH0=(65536-50000)/256;                           //時間累加
TH0=(65536-50000)%256;
TH1=(65536-50000)/256;                           //鬧鐘設置
TH1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=0;                                                           //關閉定時器
}

void display(char miao,char fen, char shi)           //顯示子程序,分別顯示時,分,秒
{

if(slnum==0)
{
snum=30;
fnum=30;
mnum=30;
}

if(slnum==1)
{
snum=30;
fnum=30;
mnum++;
}

if(slnum==2)
{
snum=30;
fnum++;
mnum=30;
}

if(slnum==3)
{
snum++;
fnum=30;
mnum=30;
}


if(mnum>=30)   //調整時,秒閃爍
{
  P0=table[miao%10];
  wei7=0;
  delay(1);
  wei7=1;
  P0=0xff;

  P0=table[miao/10];
  wei6=0;
  delay(1);
  wei6=1;
  P0=0xff;

  if(mnum==60)
          mnum=0;
}
  
  P0=table[16];
  wei5=0;
  delay(1);                                                                                                                                                                                                                       
  wei5=1;
  P0=0xff;

if(fnum>=30)   //調整時,分鐘閃爍
{
  P0=table[fen%10];
  wei4=0;
  delay(1);
  wei4=1;
  P0=0xff;

  P0=table[fen/10];
  wei3=0;
  delay(1);
  wei3=1;
  P0=0xff;
        if(fnum==60)
                fnum=0;

}
  
  P0=table[16];
  wei2=0;
  delay(1);
  wei2=1;
  P0=0xff;

if(snum>=30)          //調整時,小時閃爍
{
  P0=table[shi%10];
  wei1=0;
  delay(1);
  wei1=1;
  P0=0xff;

  P0=table[shi/10];
  wei0=0;
  delay(1);
  wei0=1;
  P0=0xff;
        if(snum==60)
                snum=0;

  }
}

void keyscan()                   //功能鍵
{
if(s1==0)
{
  delay(5);
  if(s1==0)                            //確認功能按下
  {
   while(!s1);                  
   slnum++;                           //功能鍵按下次數記錄
   if(slnum==1)                   //功能鍵第一次按下調整“秒鐘”
   {
           if(flag)
            TR0=1;                        //開定時器
        else
            TR0=0;                        //關閉定時器
                led1=0;
   }


   if(slnum==2)
   {
                led2=0;
                led1=1;
   }

   if(slnum==3)
   {
        led3=0;
                led2=1;
                led1=1;
   }

        if(slnum==4)
   {
                led3=1;
                led2=1;
                led1=1;
                slnum=0;
                TR0=1;
   }
  }
}
}

void time()
{
   if(slnum!=0)
   {
      if(s2==0)
           {
           delay(5);
           if(s2==0)
           {
           while(!s2);
           switch(slnum)
           {
              case 1:
                  miao++;
                  if(miao==60)
                  miao=0;
                  break;
                   case 2:
                  fen++;
                  if(fen==60)
                 fen=0;
                  break;
                   case 3:
                  shi++;
                  if(shi==24)
                  shi=0;
                  break;
                      }
                    }
                  }

          if(s3==0)
           {
           delay(5);
           if(s3==0)
           {
           while(!s3);
           switch(slnum)
           {
              case 1:
                  miao--;
                  if(miao<0)
                  miao=59;
                  break;
                   case 2:
                  fen--;
                  if(fen<0)
                 fen=59;
                  break;
                   case 3:
                  shi--;
                  if(shi<0)
                  shi=23;
                  break;
                      }
                    }
                  }
                  }
                  }
         void set_time()
         {
            if(slnum==0)
                 {
                   if(s4==0)
                   {
                      delay(5);
                          if(s4==0)
                          {
                          while(!s4);
                          led4=~led4;
                          flag=~flag;
                          }
                          }
                          }
                          if(flag)
                          {
                          if(slnum!=0)
                          {
                          if(s2==0)
                          {
                          delay(5);
                          if(s2==0)
                          {
                          while(!s2);
                          switch(slnum)
                          {
                          case 1:
                  set_miao++;
                  if(set_miao==60)
                  set_miao=0;
                  break;
                   case 2:
                  set_fen++;
                  if(set_fen==60)
                 set_fen=0;
                  break;
                   case 3:
                  set_shi++;
                  if(set_shi==24)
                  set_shi=0;
                  break;
                  }
                  }
                  }
                  if(s3==0)
                  {
                   delay(5);
                          if(s3==0)
                          {
                          while(!s3);
                          switch(slnum)
                          {
                          case 1:
                  set_miao--;
                  if(set_miao<0)
                  set_miao=59;
                  break;
                   case 2:
                  set_fen++;
                  if(set_fen<0)
                 set_fen=59;
                  break;
                   case 3:
                  set_shi--;
                  if(set_shi<0)
                  set_shi=23;
                  break;
                  }
                  }
                  }
                  }
                  }
                  }
         void main()
         {
         start();
         while(1)
         {
         keyscan();
         time();
         if(!flag)
         {
         display(miao,fen,shi);
         }
         else
         {
         display(set_miao,set_fen,set_shi);
         }
         if(miao==set_miao&&fen==set_fen&&shi==set_shi)
           {
             TR1=1;
                 }
                 if(flag_time)
                 {
                   TR1=0;
                   BUZZ=1;
                   flag_time=0;
                   }
                   set_time();
                   }
                   }
         void time_0()interrupt 1
         {
            uchar aa;
                TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
                aa++;
                if(aa==20)
                {
                aa=0;
                miao++;
                if(miao>=60)
                {
                miao=0;
                fen++;
                if(fen>=60)
                {
                  fen=0;
                  shi++;
                  if(shi>=24)
                  {
                  shi=0;
                  }
                  }
                  }
                  }
                  }
   void time_1()interrupt 3
   {
      uchar bz_time;
           TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
           bz_time++;
           if(bz_time==200)
                {
                bz_time=0;
                flag_time=1;
                }
                BUZZ=~BUZZ;
                }  
                          


回復

使用道具 舉報

地板
ID:140489 發表于 2017-2-20 11:17 | 只看該作者
顯示函數修改一下,調整時相應的數碼管閃爍

void display(char miao,char fen, char shi)           //顯示子程序,分別顯示時,分,秒
{

if(slnum==0)
{
snum=30;
fnum=30;
mnum=30;
}

if(slnum==1)
{
snum=30;
fnum=30;
mnum++;
}

if(slnum==2)
{
snum=30;
fnum++;
mnum=30;
}

if(slnum==3)
{
snum++;
fnum=30;
mnum=30;
}


if(mnum>=30)   //調整時,秒閃爍
{
  P0=table[miao%10];
  wei7=0;
  delay(1);
  wei7=1;
  P0=0xff;

  P0=table[miao/10];
  wei6=0;
  delay(1);
  wei6=1;
  P0=0xff;

  if(mnum==60)
          mnum=0;
}
  
  P0=table[16];
  wei5=0;
  delay(1);                                                                                                                                                                                                                       
  wei5=1;
  P0=0xff;

if(fnum>=30)   //調整時,分鐘閃爍
{
  P0=table[fen%10];
  wei4=0;
  delay(1);
  wei4=1;
  P0=0xff;

  P0=table[fen/10];
  wei3=0;
  delay(1);
  wei3=1;
  P0=0xff;
        if(fnum==60)
                fnum=0;

}
  
  P0=table[16];
  wei2=0;
  delay(1);
  wei2=1;
  P0=0xff;

if(snum>=30)          //調整時,小時閃爍
{
  P0=table[shi%10];
  wei1=0;
  delay(1);
  wei1=1;
  P0=0xff;

  P0=table[shi/10];
  wei0=0;
  delay(1);
  wei0=1;
  P0=0xff;
        if(snum==60)
                snum=0;

  }
}
回復

使用道具 舉報

5#
ID:165792 發表于 2017-2-21 22:29 | 只看該作者
不錯功能比較多
回復

使用道具 舉報

6#
ID:170753 發表于 2017-4-19 19:59 來自手機 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线日韩欧美 | 成人一区二区视频 | 国产小视频在线看 | 成人精品在线观看 | 国产精品久久国产精品 | 久久精彩 | 狠狠的干狠狠的操 | 人人艹人人爽 | 99色在线视频 | 久久九九99| 欧美二区三区 | 亚洲一区中文字幕 | 超碰97人人人人人蜜桃 | 亚洲一区二区三区四区五区午夜 | 久久久精品综合 | 国产精品欧美日韩 | 欧美一区二区三区在线 | 亚洲va国产日韩欧美精品色婷婷 | 欧美日韩在线一区二区三区 | 日韩在线免费视频 | 亚洲欧美一区二区三区1000 | 国产午夜在线观看 | av成人在线观看 | 午夜久久| 99久久婷婷国产亚洲终合精品 | 伊人成人免费视频 | 亚洲国产欧美一区 | 九九综合九九 | 欧美激情欧美激情在线五月 | 欧美在线a | 国产黄色麻豆视频 | 免费午夜视频在线观看 | 久草在线影 | 一区二区在线 | 精品久久久久久久久久久下田 | 久久久久国产精品 | www.国产精品 | 91在线观看视频 | 国产一区二区在线播放 | 色婷婷av一区二区三区软件 | 久久久性色精品国产免费观看 |