標(biāo)題: 頻率計(jì)(藍(lán)橋杯比賽板子用的程序) [打印本頁(yè)]

作者: 憤怒的蝸牛    時(shí)間: 2017-9-24 10:11
標(biāo)題: 頻率計(jì)(藍(lán)橋杯比賽板子用的程序)
所有資料51hei提供下載:
頻率計(jì).zip (51.2 KB, 下載次數(shù): 12)


單片機(jī)源程序如下:
  1. #include <STC15F2K60S2.H>
  2. #include <intrins.h>
  3. #include "anjian.h"

  4. sbit a=P2^5;
  5. sbit b=P2^6;
  6. sbit c=P2^7;
  7. sbit beep=P0^6;
  8. sbit pk=P3^4;

  9. unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x90,0xbf,0xff};
  10. unsigned int disp[8]={10,10,10,10,10,10,10,10};
  11. unsigned char key_scan();
  12. extern unsigned char key_value;
  13. unsigned int zhuoqi=0;
  14. unsigned int pl1=0;
  15. unsigned char over_flag=0;
  16. unsigned int f,t;


  17. void Timer0init();
  18. void Timer1init();
  19. void Delay300us();
  20. void zhouqidisplay();
  21. void Pldisplay();
  22. void Display();
  23. void zongdisp();
  24.        
  25. void Bee()
  26. {
  27.   a=1;b=0;c=1;
  28.      beep=0;
  29. }

  30. void main()
  31. {
  32.     Bee();
  33.         Delay300us();
  34.         Timer0init();
  35.   Timer1init();
  36.                  EA=1;
  37.            TR0=1;
  38.            TR1=1;
  39.    while(1)
  40.          {       
  41.                  if(over_flag)
  42.                                 {
  43.                                   ET0=1;
  44.                             TR0=1;
  45.                             TR1=1;
  46.                            over_flag=0;
  47.                             f=pl1*10;
  48.                             pl1=0;
  49.                                 }
  50.                                 Pldisplay();
  51.                         Display();
  52.                         P2=(P2&0x1f)|0xe0;
  53.       P0=0xff;
  54.                         P2=(P2&0x1f)|0xc0;
  55.       P0=0xff;
  56.                                 key_scan();
  57.                 if(key_value==2)          //f
  58.                 {               
  59.                         while(1)
  60.                         {
  61.                         t=1000000/f;
  62.                         zhouqidisplay();
  63.                         Display();
  64.                         P2=(P2&0x1f)|0xe0;
  65.       P0=0xff;
  66.                         P2=(P2&0x1f)|0xc0;
  67.       P0=0xff;
  68.                                 key_scan();
  69.                                 if(key_value!=0)
  70.                                         break;
  71.                         }
  72.                 }
  73.          }
  74. }

  75. void Timer0init()
  76. {
  77.     AUXR = 0x80;
  78.           TMOD=0x04;
  79.            TL0=0xff;
  80.            TH0=0xff;
  81.            ET0=1;
  82.            TR0=1;
  83. }

  84. void Timer1init()
  85. {
  86.      AUXR &= 0xBF;                //定時(shí)器時(shí)鐘12T模式
  87.                         TMOD &= 0x0F;                //設(shè)置定時(shí)器模式
  88.                         TL1 = 0x00;                //設(shè)置定時(shí)初值
  89.                         TH1 = 0x4C;                //設(shè)置定時(shí)初值
  90.                         TF1 = 0;                //清除TF1標(biāo)志
  91.                         TR1 = 0;                //定時(shí)器1開(kāi)始計(jì)時(shí)
  92.                         ET1 = 1;
  93. }
  94. void Timer0_init() interrupt 1
  95. {
  96.           
  97.       pl1++;
  98.             //TF0 = 0;
  99. }
  100. bit t1=0;
  101. void Timer1_init() interrupt 3
  102. {
  103.      if(t1==0)     
  104.         t1=1;
  105.              else
  106.                          {
  107.                                  t1=0;
  108.               ET0=0;
  109.                      TR0=0;
  110.                     TR1=0;
  111.                    over_flag=1;
  112.      }
  113. }
  114. void Display()
  115. {
  116.     unsigned char i;
  117.    for(i=0;i<8;i++)
  118.           {
  119.                         P2=(P2&0x1f)|0xe0;
  120.       P0=0xff;
  121.       P2&=0x1f;
  122.       _nop_();
  123.       P2=(P2&0x1f)|0xc0;
  124.       P0=0x01<<i;
  125.       P2&=0x1f;
  126.                         _nop_();
  127.                         P2=(P2&0x1f)|0xe0;
  128.       P0=disp[i];
  129.       P2&=0x1f;
  130.                         P0=0Xff;
  131.                         Delay300us();
  132.                 }
  133. }
  134. void Delay300us()
  135. {
  136.      unsigned char i,j;
  137.              _nop_();
  138.        _nop_();       
  139.           i=4;
  140.           j=54;
  141.           do
  142.                 {
  143.                    while(--j);
  144.                 } while(--i);
  145. }
  146. void Pldisplay()
  147. {
  148.           disp[0]=table[12];
  149. ……………………

  150. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼









歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1