基于AT89C52单片机的简易频率计设计

时间:2024.3.31

单片机系统开发与应用工程实习报告

选题名称:基于AT89C52单片机的简易频率计设计

系(院):                    

    :   计) 

    :                      

    :         :

指导教师:                 

学年学期:       2009   ~  2010  学年 第  2  学期    

      2010           5       30      


摘要:

    在电子技术中,频率是一个经常用到的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。本项目主要阐述了以AT89C52单片机作为核心器件,采用模块化布局,设计一个简易数字频率计,以达到测量频率并进行显示的目的。本项目利用单片机的内部定时器溢出产生中断来实现定时,把单片机内部的定时/计数器0作为定时器,实现2.5ms定时。外部待测脉冲从单片机的TI(第15引脚)输入,以定时/计数器1作为计数器,利用中断方式来达到间接测量的目的。最后采用四位数码管显示。本设计采用C语言进行软件编程,用keil软件进行调试。最后把调试成功后的程序固化到AT89C52单片机中,接到预先焊好的电路板上,接上待测脉冲,通电运行,数码管成功显示待测脉冲频率。

关键词:单片机;频率计;AT89C52


   

1 项目综述……………………..……………………………………………………..…………………..1

1.1 设计要求..................................................................................................................... 1

1.2 系统设计..................................................................................................................... 1

2 硬件设计………………………………………………………………………………………………..2

2.1 电路原理图.................................................................................................................... 2

2.2 元件清单........................................................................................................................ 2

2.3 主要芯片引脚说明.......................................................................................................... 3

3 软件设计………………………………………………………………………………………………..4

3.1 程序流程图.................................................................................................................... 4

3.2 软件设计简述................................................................................................................. 5

3.3 程序清单........................................................................................................................ 6

4 系统仿真及调试……………………………...……………...…………………...……………….…10

4.1 硬件调试...................................................................................................................... 10

4.2 软件调试...................................................................................................................... 10

5 结果分析…………...…………………………………………………………………………….……10

总结............…………………………………...………….……………………….……...….11

参考文献………………………………………………………………………....………….12



1 项目综述

       在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。本项目主要阐述了选择AT89C52单片机作为核心器件,采用模块化布局,设计一个简易数字频率计测量频率并进行显示。

1.1 设计要求

       基于AT89C52单片机简易频率计的设计要求如下:

(1)   测量范围。幅度:0.5~5V;频率:1Hz~1MHz.

(2)   测试误差≤0.1%。

(3)   用4位数码管显示。当频率变化时,能通过数码管及时看到变化后的信号频率。

1.2 系统设计

1.2.1 框图设计

       基于AT89C52单片机简易频率计的电路主要由数码管显示电路、复位电路、晶振电路、电源电路等几部分组成,系统框图如图3.1所示。

图3.1 基于AT89C52单片机简易频率计系统框图

1.2.3 知识点

本项目需要通过学习和查阅资料,掌握和了解如下知识:

1)      +5V电源原理及设计。

2)      单片机复位电路工作原理及设计。

3)      单片机晶振电路工作原理及设计。

4)      频率信号发生器的特性及使用。

5)      驱动电路74LS244的特性及使用。

6)      AT89C52单片机引脚结构及功能。

7)      单片机C语言程序设计方法。

2 硬件设计

2.1 电路原理图

基于AT89C52单片机简易频率计电路原理图如图2-1所示。

图2-1 基于AT89C52单片机简易频率计电路原理图

2.2 元件清单

基于AT89C52单片机简易频率计元件清单如表2-1所示。

表2-1 基于AT89C52单片机简易频率计元件清单

2.3 主要芯片引脚说明

2.3.1  AT89C52引脚说明

AT89C52为40脚双列直插封装8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。AT89C52 共有6 个中断向量:两个外中断(INT0 和INT1),3 个定时器中断(定时器0、1、2)和串行口中断。

AT89C52引脚图如下:

图2-2  AT89C52引脚图

主要管脚有:

XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口。

RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。

VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。

P0 口是一组8 位漏极开路型双向I/O 口,也即地址/数据总线复用口。

P1,P2,P3是一组带有内部上拉电阻的8 位双向I/O 口。

2.3.2  74HC244引脚说明

74HC244可以让输入的数据保持比较长的时间,简单输入接口扩展通常使用的典型芯片为74HC244,由该芯片可构成三态数据缓冲器。74HC244 芯片的引脚排列如下图所示:

图2-3  74HC244引脚图

74HC244芯片内部共有两个四位三态缓冲器,使用时可分别以1C和2G作为它们的选通工作信号。当1/OE和2/OE都为低电平时,输出端Y和输入端A状态相同;当1/OE和2/OE都为高电平时,输出呈高阻态。

3 软件设计

       本项目利用单片机的内部定时器溢出产生中断来实现定时。待测信号由单片机的TI中断来间接测量。定时/计数器0定时2.5ms中断并对中断次数进行计数,当2.5ms中断次数计到40次即0.1s时,查看定时/计数器1上的计得的数值,经过计算得到的待测信号的频率值,放入显示缓冲区,由数码管进行显示。

3.1 程序流程图

       主程序流程图如图3-1所示。

图3-1 主程序流程图

3.2 软件设计简述

1)利用单片机的内部定时器溢出产生中断来实现定时。

2)待测信号由单片机的TI(第15引脚)中断来间接测量。

3)采用12MHz晶振,机器周期为1us

4)定时/计数器0工作方式:定时方式,工作方式1,每次定时2.5ms。

   实现2.5ms定时算法:

       (3-1)

   即TH0=0xf6,TL0=0x3c

5)定时/计数器1工作方式:计数方式,工作方式1。当2.5ms中断次数计到40次即0.1s时,查看定时/计数器1上的计得的数值 。

6)通过公式:                        (3-2)

   可以计算出脉冲频率。

   最后的数据以KHz单位,采用四舍五入的方法保留一位小数。

7)显示采用四位共阴LED数码管,用单片机P0口的8位控制数码管的8段二极管的明暗。用P2口的P2.0~P2.3作为4位数码管的选通信号,采用从低到高逐位扫描的方法。

3.3 程序清单

基于AT89C52单片机简易频率计程序清单如下:

#include<reg52.h>

bit timeint0,timeint1;

unsigned char dispbuf[4];

unsigned int period;

unsigned int timecount=0;

unsigned int count_1s;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};   //7段数码管代码表

HEX_TO_BCD(unsigned int n) //十六进制数转BCD码子程序,

//将BCD码送至显示缓存数组

{

       unsigned char i;                   //当显示的频率超出范围,显示EEEE报错

       if (n>9361)

              for(i=0;i<4;i++)

                     dispbuf[i]=0x0e;

       else

       {                           

          dispbuf[3]=n/1000;                //取出千位字节

          dispbuf[2]=(n/100)%10;            //取出百位字节

              dispbuf[1]=(n/10)%10;             //取出十位字节

              dispbuf[0]=n%10;                 //取出个位字节

       }

}

void scandisp(void)    //显示子程序,

//将显示缓存数组中的BCD码扫描并显示在数码管上

{

     unsigned char posi=0x01;

     unsigned char i,j,temp;

     for(i=0;i<4;i++)                //依次选中4个数码管

     {

        temp=dispbuf[i];

         //查出字码

         temp=table[temp];

         //第三位显示小数点

         if(i==1)

             {

                 for(j=0;j<200;j++)

                     {

                            P2=posi;

                            P0=temp|0x80;

                     }

               }

           else     

             {

                 for(j=0;j<200;j++) 

                 {

                            P2=posi;

                            P0 =temp;

                     }

             }

         //依次点亮字位

         posi<<=1;

     }   

}

void INIT_TMR1INT(void)           //定时器初始化了程序,定义了两种

{

      //定时/计数器0工作定时器方式,定时/计数器1工作在计数器方式

       TMOD=0x51;

       ET1=1;

       //中断0开中断

       ET0=1;

       //CPU开中断

       EA=1;

          count_1s=0;

       //启动定时/计数器0开始定时

       TR0=1;

       TR1=1;

}

void time0(void) interrupt 1 //定时器0中断服务程序,系统自动调用,

//每2.5ms执行一次

{

       TH0=0xf6;

       TH1=0x3c;

       //每次定时是2.5 ms, 40次即0.1s

       if(++count_1s>40)

    {

          count_1s=0;

          //每0.1s对计数器1所计数值进行统计

          timecount=TH1*256+TL1;

          TH1=0;

          TL1=0;

          //精确到小数点后1位,以KHz为单位

          period=timecount/10;

          //四舍五入显示

          if((timecount%10)>4)

                   period++;

          timecount=0;

          HEX_TO_BCD(period);

     }

}

void timer1(void) interrupt 3     //定时器1中断服务程序,溢出后中断

{

  TH1=0x00;

  TL1=0x00;

}

void main(void)          //主函数

{

       //初始化

       INIT_TMR1INT();

       while(1)

    {

           //显示子程序

           scandisp();

    }

}

4 系统仿真及调试

       应用系统设计完成之后,就要进行硬件调试和软件调试,软件调试可以利用开发及仿真系统进行。

4.1 硬件调试

       硬件调试的调试主要是把电路各种参数调整到符合设计要求。先排除硬件电路故障,包括设计性错误和工艺性故障。一般原则是先静态后动态。

       利用万用表或逻辑测试仪器,检查电路中各器件以及引脚是否连接正确,是否有短路故障。

       先将单片机AT89C52芯片取下,对电路板进行通电检查,通过观察看是否有异常,是否有虚焊的情况,然后用万用表测试各电源电压,若这些都没有问题,则接上仿真机进行联机调试,观察各接口电路是否正常。

4.2 软件调试

       软件调试是利用仿真工具进行在线仿真调试,除发现和解决程序错误外,也可以发现硬件故障。本设计采用的调试软件是keil。程序调试时,先是一个模块一个模块地进行,一个子程序一个子程序地调试,最后联起来统调。当程序调试无误后,就可以用在系统编程器将程序固化到AT89C52的FLASH ROM中。

5 结果分析

       把电路按要求接好,接上待测脉冲信号,插上电源即可测量出待测脉冲信号的频率。本设计利用实验室提供的单片机实验箱上的脉冲信号进行测试,当接入的脉冲信号为0.25MHz时,可以看到数码管上的显示值为259.4KHz;当接入的脉冲信号为0.5MHz时,可以看到数码管上的显示值为508.3KHz。经计算,测量值都在误差允许范围内,因此符合设计要求,本设计成功完成预期目标。


总结

经过一个星期的努力和老师的耐心指导,终于顺利完成了此次的单片机课程设计。整个过程可以说就是一个不断发现问题和解决问题的过程,虽然有点累,但收获颇多。通过此次的单片机课程设计,我学到了许多以前在课本上学不到的东西,同时也把以前学到的理论知识运用到了此次的课程设计中,很好地加强了我在单片机方面的知识,特别是在中断处理部分。整个调试程序的过程让我对keil软件有了更深一步的了解。并且,此次的课程设计也很好地锻炼了我的动手能力,让我能够发现问题,积极开动脑筋去解决问题,同时也让我对硬件有了进一步的了解。课程设计是培养我们综合运用所学知识,发现、提出、分析和解决问题的实际能力,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考查过程。这次课程设计使我懂得了理论与实际相结合的重要性,只掌握书上的理论知识是远远不够的,而应该把所学的理论知识与实践相结合,把理论运用与实践,从实践中验证理论,从而提高自己的实际动手能力和独立思考的能力,为以后踏入社会打下基础。在设计的过程中不免会遇到一些问题,通过老师和同学的帮助,以及去图书馆查找资料,终于把问题都解决了,在解决问题的过程中,我发现自己的不足之处,同时也巩固了所学的知识。

总得来说,此次的课程设计很有意义,我从中学到了很多。过程虽苦,但结果很甜!


参考文献

1 李广弟,朱月秀,冷祖祁.单片机基础.北京:北京航天航空大学出版社,2007.6

2 扬居义.单片机课程设计指导.北京:清华大学出版社,2009.9

3 张义和,陈敌北.例说8051.北京:人民邮电出版社,2006.1

4 求是科技.单片机典型模块设计实例导航.北京:人民邮电出版社,2004.5

5 周兴华.手把手教你学单片机C程序设计.北京:北京航空航天大学出版社,2007.10



指导教师评语

更多相关推荐:
简易数字频率计设计实验报告 季克宇

电子线路课程设计报告第1页共14页电子线路课程设计报告姓名季克宇学号110404130专业通信工程日期20xx1010南京理工大学紫金学院电光系20xx10101电子线路课程设计报告第引言2页共14页电子线路课...

简易数字频率计设计实验报告1赵勇

南理工紫金学院课题实验设计报告学生姓名赵勇学号专业电气工程及其自动化题目电子综合应用实践1课程设计任务书2课程设计任务书1封面课程设计题目班级姓名2设计任务书3目录4设计方案简介5设计条件及主要参数表6设计主要...

简易数字频率计课程设计报告

摘要在电子技术中频率是最基本的参数之一并且与许多电参量的测量方案测量结果都有十分密切的关系因此频率的测量显得更为重要测量频率的方法有多种其中电子计数器测量频率具有精度高使用方便测量迅速以及便于实现测量过程自动化...

简易数字频率计课程设计报告 .

目录第一章概述11数字频率计功能及特点12数字频率计应用意义第二章设计方案21设计指标与要求22设计原理23方案论证第三章数字频率计分析及参数设计31电路基本原理32时基电路设计33闸门电路设计34控制电路设计...

简易数字频率计课程设计报告

北华航天工业学院《数字电子技术》课程设计报告报告题目:简易数字频率计的设计作者所在系部:计算机科学与工程系作者所在专业:计算机科学技术专业作者所在班级:作者姓名:作者学号:指导教师姓名:完成时间:20XX-6-…

简易数字频率计实验报告

简易数字频率计设计报告设计人员王方伟熊伟田欣欣目录摘要一总体方案二电路分析与设计1可调频率波形发生器2整形电路3二分频电路4单片机计数部分5液晶显示部分三系统测试1调试仪器2测试结果分析3误差分析四总结参考资料...

综合课程设计报告——简易数字频率计-精品

综合课程设计报告题目系别专业班级姓名导师成绩基于单片机的简易数字频率计设计电子信息与电气工程系电子信息工程20xx年12月25日目录摘要21引言211设计任务212设计要求22系统设计221设计思路222总体方...

基于51单片机的数字频率计设计报告

目录摘要.3关键词.3正文.41概述.42总体设计方案.52.1软件.52.2设计思路.53系统软件设计.53.1主板说明.53.2芯片主要性能.53.3功能特性描述.63.4引脚描述.64系统软件设计.94.…

数字电路课程设计——数字频率计设计报告

数字频率计摘要本文介绍了一种基于TTL系列芯片的简易数字频率计数字频率计应用所学的数字电路知识进行设计电路由放大整形电路时基电路逻辑控制电路计数锁存电路及译码显示电路组成能够较精准的测量幅值在02V5V的正弦波...

秀简易数字频率计设计1

课程设计基本要求课程设计是工科学生十分重要的实践教学环节,通过课程设计,培养学生综合运用先修课程的理论知识和专业技能,解决工程领域某一方面实际问题的能力。课程设计报告是科学论文写作的基础,不仅可以培养和训练学生…

简易数字频率计设计实验报告 (2)

电子线路课程设计报告第1页共14页电子线路课程设计报告姓名学号专业日期南京理工大学紫金学院电光系20xx4131电子线路课程设计报告第引言2页共14页电子线路课程设计是一门理论和实践相结合的课程它融入了现代电子...

《EDA技术》数字频率计课程设计报告报

EDA技术课程设计报告题目数字频率计专业电子信息工程班级0702姓名指导教师高金定二0一0年6月24日020xx32820xx328摘要数字频率计是直接用十进制数字来显示被测信号频率的一种测量装置它不仅可以测量...

简易数字频率计设计报告(20篇)