找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2358|回复: 0
打印 上一主题 下一主题
收起左侧

频率计(蓝桥杯比赛板子用的程序)

[复制链接]
跳转到指定楼层
楼主
ID:233449 发表于 2017-9-24 10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
所有资料51hei提供下载:
频率计.zip (51.2 KB, 下载次数: 12)


单片机源程序如下:
  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;                //定时器时钟12T模式
  87.                         TMOD &= 0x0F;                //设置定时器模式
  88.                         TL1 = 0x00;                //设置定时初值
  89.                         TH1 = 0x4C;                //设置定时初值
  90.                         TF1 = 0;                //清除TF1标志
  91.                         TR1 = 0;                //定时器1开始计时
  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. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表