历史上的今天
返回首页

历史上的今天

今天是:2025年01月02日(星期四)

正在发生

2018年01月02日 | DIY 6位数显频率计

2018-01-02 来源:eefocus

1.实验任务
  利用AT89S51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。要求能够对0-250KHz的信号频率进行准确计数,计数误差不超过±1HZ。
2.电路原理图
6位数显频率计数器
              图4.31.1
3.系统板上硬件连线
(1).把“单片机系统”区域中的P0.0-P0.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。
(2).把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。
(3).把“单片机系统”区域中的P3.4(T0)端子用导线连接到“频率产生器”区域中的WAVE端子上。
4.程序设计内容
(1).定时/计数器T0和T1的工作方式设置,由图可知,T0是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的T0,最大计数值为fOSC/24,由于fOSC=12MHz,因此:T0的最大计数频率为250KHz。对于频率的概念就是在一秒只数脉冲的个数,即为频率值。所以T1工作在定时状态下,每定时1秒中到,就停止T0的计数,而从T0的计数单元中读取计数的数值,然后进行数据处理。送到数码管显示出来。
(2).T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20次,即可完成1秒的定时功能。
5.C语言源程序
#include
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
                               0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsigned char dispbuf[8]={0,0,0,0,0,0,10,10};
unsigned char temp[8];
unsigned char dispcount;
unsigned char T0count;
unsigned char timecount;
bit flag;
unsigned long x;
void main(void)
{
  unsigned char i;
  TMOD=0x15;
  TH0=0;
  TL0=0;
  TH1=(65536-4000)/256;
  TL1=(65536-4000)%6;
  TR1=1;
  TR0=1;
  ET0=1;
  ET1=1;
  EA=1;
  while(1)
   {
     if(flag==1)
       {
         flag=0;
         x=T0count*65536+TH0*256+TL0;
         for(i=0;i<8;i++)
           {
             temp[i]=0;
           }
         i=0;
         while(x/10)
           {
             temp[i]=x;
             x=x/10;
             i++;
           }
         temp[i]=x;
         for(i=0;i<6;i++)
           {
             dispbuf[i]=temp[i];
           }
         timecount=0;
         T0count=0;
         TH0=0;
         TL0=0;
         TR0=1;
       }
   }
}
void t0(void) interrupt 1 using 0
{
  T0count++;
}
void t1(void) interrupt 3 using 0
{
  TH1=(65536-4000)/256;
  TL1=(65536-4000)%6;
  timecount++;
  if(timecount==250)
    {
      TR0=0;
      timecount=0;
      flag=1;
    }
  P0=dispcode[dispbuf[dispcount]];
  P2=dispbit[dispcount];
  dispcount++;
  if(dispcount==8)
    {
      dispcount=0;
    }
}

推荐阅读

史海拾趣

Cooper Industries公司的发展小趣事

随着市场需求的不断变化,Cooper Industries不断通过收购来扩大其业务范围和提升技术实力。例如,在2008年,公司宣布收购了三家公司:Sure Power Industries、OMNEX Control Systems和Roam Secure。这三家公司在各自的领域都有着丰富的经验和卓越的技术,收购后极大地增强了Cooper在电力系统管理、无线电远程控制以及文字报警、区域警示系统等领域的能力。这些收购不仅使公司的产品线更加丰富,也为其在全球市场的竞争提供了有力武器。

ECI公司的发展小趣事

随着全球环保意识的不断提高,ECI公司积极响应绿色环保的号召。公司投入大量资金研发环保型电子产品,采用环保材料和工艺生产产品。此外,ECI还积极参与各类环保公益活动,宣传环保理念。这种对环保的关注和投入不仅赢得了消费者的认可和支持,也为公司树立了良好的社会形象。

Corstat Containers公司的发展小趣事

Corstat Containers公司在电子行业中崭露头角,始于一次技术突破。当时,公司研发团队成功开发出一种新型的防静电电子元件包装盒,有效解决了电子产品在运输过程中因静电导致的损坏问题。这一创新产品迅速获得了市场的认可,许多知名电子品牌纷纷与Corstat Containers公司建立合作关系。随着订单量的不断增加,公司的规模逐渐扩大,生产线也更加完善。

Emmoco公司的发展小趣事

在追求经济效益的同时,Emmoco也注重环保和可持续发展。公司积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。同时,Emmoco还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了Emmoco的社会责任感,也为公司的长期发展奠定了坚实的基础。

Esc Electronics Corp公司的发展小趣事

面对电子行业技术的快速迭代和市场竞争的加剧,Esc始终保持创新驱动的发展策略。公司不断加大对研发创新的投入力度,推动产品升级和产业升级。通过引入新技术、新工艺和新材料,Esc成功开发出一系列具有竞争力的新产品,并在市场上取得了显著的成绩。同时,公司还积极参与行业标准的制定和推广工作,推动整个电子行业的进步和发展。

Aten International公司的发展小趣事

在电子行业中,标准化建设对于提升产品质量和企业竞争力具有重要意义。Aten International深知标准化建设的重要性,因此在产品研发和生产过程中始终坚持高标准、严要求。公司还积极参与国际标准化组织的活动,推动相关标准的制定和完善。正是凭借在标准化建设方面的卓越表现,Aten International赢得了业界的高度认可和广泛赞誉。

以上五个故事虽然基于虚构,但它们都反映了Aten International在电子行业发展的真实情况。这些故事展示了公司在技术创新、市场拓展、标准化建设等方面的努力和成就,也体现了Aten International在电子行业中的领先地位和卓越贡献。

问答坊 | AI 解惑

Power架构再添创新动力,IBM微处理器协作平台在华启动

IBM日前在上海举行典礼,与合作伙伴和各界代表共同见证了全球首个Power架构专用协作创新平台——IBM Power架构应用中心的启用。该中心将围绕IBM Power架构处理器技术,通过与Power.org全球及本地的合作伙伴及研究机构等多方进行共同协作,帮助客户 ...…

查看全部问答>

电源设计小贴士

电源设计小贴士 1:为您的电源选择正确的工作频率 …

查看全部问答>

单片机实现T9文字输入法电路(源代码+仿真)

单片机实现T9文字输入法电路(源代码+仿真)…

查看全部问答>

Streaming Minidriver中如何使用中断的延迟过程调用

初学驱动开发,在testcap例子的基础上针对硬件做修改。中断服务程序已经能正常响应了,但是不知道怎样设置延迟过程调用。在DeviceExtension中定义DPC对象指针,初始化设备时初始化DPC,然后在ISR中调用IoRequestDpc。结果每次运行到这里就蓝屏了。 ...…

查看全部问答>

一个evc设置窗体大小函数添加位置的问题?

刚开始用evc,弱弱的问下:在evc中为什么把setwindowpos这个函数放在oncreate函数中就不起作用,而放在oninit函数中就好用呢?我再vc6.0中写再oncreate函数中也起作用啊? 求高手指点1~2~…

查看全部问答>

MFC requires WINVER to be #defined to 0x0400 or greater

MFC requires WINVER to be #defined to 0x0400 or greater…

查看全部问答>

使用vivi不能将wince烧写到flash!

我使用vivi的load flash wince u命令,将wince烧写到板上的flash时,格式化的时候出现几个error, 然后也正常格式化完毕,刚刚把wince烧写到板上时,wince正常启动,因为我没有断过电, 重启之后flash上刚刚烧写的wince就不见了,不能正常启动 ...…

查看全部问答>

如何利用VOIMAGE实现特效浏览图片

如何利用VOIMAGE实现特效浏览图片,包括JPG等格式,,我找到了BMP的代码,,,但用VOIMAGE的时候不知道该怎么做了....…

查看全部问答>

看STM32的手册,关于flash的问题

在看手册时看到说STM32中,中等密度器件的flash分成了128个page,每个128K,但是中等密度器件的最大Flash也只有128K,那么如果小于128K的那些是怎么分配的吗?另外,这些分配之后Information block和Flash memory interface&nb ...…

查看全部问答>

stm32串口2remap后的问题!

今年用现成的stm32f103的系统做双串口通讯的程序,一直是工作不正常。问题也比较奇怪: 1、串口2为remap,并且转485;串口1、串口2分别和PC通讯,收发都正常。 2、PD7控制485方向,当PD7置位时,串口1不能正常接收数据。一直不知道为什么会这样? ...…

查看全部问答>