找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機小時鐘制作

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:91350 發(fā)表于 2015-10-1 00:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
       采用四位一體數(shù)碼管倆個,限流電阻4.7k歐,主控為STC89c52單片機。以下程序作為參考。實物圖可以去相冊里觀看。               
    呵呵,在編寫這個程序時遇到了一些問題,拿出來與大家共勉。
    剛開始我就把位定義的接口弄錯,單片機怎么都不工作,看來看去終于發(fā)現(xiàn)剛開始就錯了;之后發(fā)現(xiàn)我的時間走得比標準時鐘快好多,可能我的芯片晶振更快吧,但怎么想真么不合理,那個后來我只好計算一下,只好把時鐘改了;再之后我發(fā)現(xiàn)有時調(diào)節(jié)時和分時,秒針要等很久(大約一分鐘)才工作,后來經(jīng)過排查發(fā)現(xiàn),當你調(diào)節(jié)時,如果正好等于time==16,那么time將繼續(xù)增加,直至走到下一個16,。
本程序應用了定時器中斷。
  1. #include<reg52.h>

  2. #define DIG P0

  3. sbit LSA=P2^2;
  4. sbit LSB=P2^3;
  5. sbit LSC=P2^4;

  6. sbit k0=P3^1;
  7. sbit k1=P3^0;

  8. void timerconfiguration();
  9. void digdisplay();
  10. void clock();
  11. void keydown();

  12. unsigned char num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  13. unsigned char state[10];
  14. unsigned char time;
  15. unsigned char a;
  16. unsigned char b;
  17. unsigned char d;
  18. unsigned char c;
  19. unsigned char e;

  20. void main()
  21. {
  22.     char k;
  23.     for(k=7;k>0;k--)
  24.         state[k]=num[0];
  25.     state[2]=0x40;
  26.     state[5]=0x40;
  27.     time=0;
  28.     a=0;
  29.     b=0;
  30.     c=0;
  31.     d=0;
  32.     e=0;

  33.     timerconfiguration();

  34.     while(1)
  35.     {
  36.         digdisplay();
  37.         keydown();
  38.         clock();
  39.     }
  40. }

  41. void timerconfiguration(void)
  42. {
  43.     TMOD=0X01;
  44.     TH0=0X3C;
  45.     TL0=0XB0;
  46.     EA=1;
  47.     ET0=1;
  48.     TR0=1;
  49. }

  50. void digdisplay(void)
  51. {
  52.     unsigned char i;
  53.     unsigned char j;
  54.     i=0;
  55.     while(i<8)
  56.     {  
  57.         switch(i)
  58.     {
  59.             case (0): LSA=0; LSB=0; LSC=0; break;
  60.             case (1): LSA=1; LSB=0; LSC=0; break;
  61.             case (2): LSA=0; LSB=1; LSC=0; break;
  62.             case (3): LSA=1; LSB=1; LSC=0; break;
  63.             case (4): LSA=0; LSB=0; LSC=1; break;
  64.             case (5): LSA=1; LSB=0; LSC=1; break;
  65.             case (6): LSA=0; LSB=1; LSC=1; break;
  66.             case (7): LSA=1; LSB=1; LSC=1; break;
  67.     }
  68.         DIG=state[i];
  69.         i++;
  70.         j=10;
  71.         while(j--);
  72.         DIG=0x00;
  73.     }
  74. }

  75. void timer() interrupt 1
  76. {
  77.     time++;
  78. }

  79. void keydown(void)
  80. {
  81.     unsigned char q;              
  82.     unsigned char w;
  83.     unsigned char p;
  84.     unsigned char number;
  85.    
  86.     if((k0==0) || (k1==0))
  87.     {
  88.         for(q=38; q>0; q--)
  89.                 for(w=100; w>0; w--);
  90.         if(k0==0)
  91.     {
  92.                 if(state[3]!=num[9])
  93.         {
  94.             c++;
  95.                     state[3]=num[c];
  96.         }
  97.         else
  98.         {
  99.             c=0;
  100.                     state[3]=num[c];
  101.                     if(state[4]!=num[5])
  102.         {
  103.             d++;
  104.                         state[4]=num[d];
  105.         }
  106.             else
  107.         {
  108.             d=0;
  109.                         state[4]=num[d];
  110.                         if(state[6]!=num[9])
  111.         {
  112.             e++;
  113.                         state[6]=num[e];
  114.         }
  115.             else
  116.         {
  117.             e=0;
  118.                         state[6]=num[e];
  119.                         state[7]=num[1];
  120.         }
  121.                         if((state[7]==num[1]) && (state[6]==num[3]))
  122.         {
  123.                                 for(number=7; number>0; number--)
  124.                                 state[number]=num[0];
  125.                         state[2]=0x40;
  126.                         state[5]=0x40;
  127.             d=0;
  128.                 e=0;
  129.         }
  130.       
  131.         }
  132.     }
  133.     }
  134.         if(k1==0)
  135.     {
  136.                 if(state[6]!=num[9])
  137.         {
  138.             e++;
  139.                         state[6]=num[e];
  140.         }
  141.             else
  142.         {
  143.             e=0;
  144.                         state[6]=num[e];
  145.                         state[7]=num[1];
  146.         }
  147.                         if((state[7]==num[1]) && (state[6]==num[3]))
  148.         {
  149.                             for(number=7; number>0; number--)
  150.                                 state[number]=num[0];
  151.                         state[2]=0x40;
  152.                         state[5]=0x40;
  153.                 e=0;
  154.         }
  155.       
  156.     }

  157.         p=50;
  158.        while((p>0) && ((k0==0) ||(k1==0)))
  159.        {
  160.             p--;
  161.             for(q=38; q>0; q--)
  162.                 for(w=100; w>0; w--);
  163.        }
  164.    
  165. }}

  166. void clock(void)
  167. {
  168.     unsigned char number;
  169.     if(time>=16)
  170.     {
  171.         time=0;
  172.         if(state[0]!=num[9])
  173.     {
  174.         a++;
  175.             state[0]=num[a];
  176.     }
  177.         else
  178.     {
  179.         a=0;
  180.             state[0]=num[a];
  181.             if(state[1]!=num[5])
  182.     {
  183.         b++;
  184.                 state[1]=num[b];
  185.     }
  186.         else
  187.     {
  188.         b=0;
  189.                 state[1]=num[b];
  190.                 if(state[3]!=num[9])
  191.         {
  192.             c++;
  193.                     state[3]=num[c];
  194.         }
  195.         else
  196.         {
  197.             c=0;
  198.                     state[3]=num[c];
  199.                     if(state[4]!=num[5])
  200.         {
  201.             d++;
  202.                         state[4]=num[d];
  203.         }
  204.             else
  205.         {
  206.             d=0;
  207.                         state[4]=num[d];
  208.                         if(state[6]!=num[9])
  209.         {
  210.             e++;
  211.                         state[6]=num[e];
  212.         }
  213.             else
  214.         {
  215.             e=0;
  216.                         state[6]=num[e];
  217.                             state[7]=num[1];   
  218.         }
  219.                         if((state[7]==num[1]) && (state[6]==num[3]))
  220.         {
  221.                             for(number=7; number>0; number--)
  222.                                 state[number]=num[0];
  223.                         state[2]=0x40;
  224.                         state[5]=0x40;
  225.                 e=0;
  226.         }
  227.       
  228.         }
  229.         }
  230.     }
  231.     }
  232.     }
  233. }                                                                                                   
復制代碼


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

使用道具 舉報

沙發(fā)
ID:68416 發(fā)表于 2015-10-4 17:51 | 只看該作者
剛好我也想做一個,多謝
回復

使用道具 舉報

板凳
ID:88707 發(fā)表于 2015-10-5 15:05 | 只看該作者
最近在看這方面的程序呢
回復

使用道具 舉報

地板
ID:94340 發(fā)表于 2015-11-1 19:48 | 只看該作者
竟然沒有實物圖
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表