基于at89c52的频率计.doc

上传人:F****n 文档编号:98877520 上传时间:2019-09-15 格式:DOC 页数:14 大小:422KB
返回 下载 相关 举报
基于at89c52的频率计.doc_第1页
第1页 / 共14页
基于at89c52的频率计.doc_第2页
第2页 / 共14页
基于at89c52的频率计.doc_第3页
第3页 / 共14页
基于at89c52的频率计.doc_第4页
第4页 / 共14页
基于at89c52的频率计.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《基于at89c52的频率计.doc》由会员分享,可在线阅读,更多相关《基于at89c52的频率计.doc(14页珍藏版)》请在金锄头文库上搜索。

1、本产品是一个基于AT89C52的频率测量仪,精度0.04%,响应时间0.5s,测量信号幅值范围15V。本频率计需要5V电源为其供电,通过在单位时间里将被测信号放大后进行采集计数后,将频率信息用八位共阴数码管显示出来。设计要求:(1) 用万用板制作出频率计成品。(2) 尽可能提高测量精度、测量范围、响应时间等材料清单:AT89C52 芯片,74ls00,4个共阴数码管,1个复位开关,1个10uF电容,1个24MHz晶振,1个9014三极管,3个led灯,电阻和导线若干,2个30pF电容,排针一排。设计说明:一、总体方案本频率计是先给该产品供5v稳压电源,然后用信号发生器供给信号,经过放大整形电路

2、的作用后,再输入芯片中,而主控芯片用引脚电平中断变化来计数,用定时器来定出计时单位时间,信号采集后经过处理在数码管上显示出来。二、硬件分析系统硬件框图5V电源AT89c52数码管显示信号放大整形周期信号(1)放大整形电路74ls00 及引脚图三极管9014由于输入的信号可以是正弦波,三角波。而后面的闸门或计数电路要求被测信号为矩形波,所以需要设计一个整形电路则在测量的时候,首先通过整形电路将正弦波或者三角波转化成矩形波。在整形之前由于不清楚被测信号的强弱的情况。所以在通过整形之前通过放大衰减处理。当输入信号电压幅度较大时,通过输入衰减电路将电压幅度降低。当输入信号电压幅度较小时,前级输入衰减为

3、零时若不能驱动后面的整形电路,则调节输入放大的增益,时被测信号得以放大10。根据上述分析,放大电路放大整形电路采用高频晶体管9014与74LS00等组成。其中9014为NPN型高频小功率三极管,组成放大器将输入频率为fx的周期信号如正弦波、三角波及方波等波形进行放大。与非门74LS00构成施密特触发器,它对放大器的输出波形信号进行整形,使之成为矩形脉冲(3) AT89c52芯片AT89C52是美国Atmel公司生产的低电压、高性能CMOS 8位单片机,片内含8KB的可反复檫写的程序存储器和12B的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存储技术生产,兼容标准MCS

4、-51指令系统,片内配置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89C52单片机可灵活应用于各种控制领域。AT89C52单片机属于AT89C51单片机的增强型,与Intel公司的80C52在引脚排列、硬件组成、工作特点和指令系统等方面兼容。其主要工作特性是:片内程序存储器内含8KB的Flash程序存储器,可擦写寿命为1000次;片内数据存储器内含256字节的RAM;具有32根可编程I/O口线;具有3个可编程定时器;中断系统是具有8个中断源、6个中断矢量、2个级优先权的中断结构;串行口是具有一个全双工的可编程串行通信口;具有一个数据指针DPTR;低功耗工作模式有空闲模式和

5、掉电模式;具有可编程的3级程序锁定位;AT89C52工作电源电压为5(1+0.2)V,且典型值为5V;AT89C52最高工作频率为24MHz。芯片的引脚图(4) 四位共阴数码管数码管是一类显示屏 通过对其不同的管脚输入相对的电流,会使其发亮,从而显示出数字能够显示 时间、日期、温度等所有可用数字表示的参数。 由于它的价格便宜 使用简单 在电器 特别是家电领域应用极为广泛,空调、热水器、冰箱等等。绝大多数热水器用的都是数码管,其他家电也用液晶屏与荧光屏。由于发光二极管基本上属于电流敏感器件,其正向压降的分散性很大, 并且还与温度有关,为了保证数码管具有良好的亮度均匀度,就需要使其具有恒定的工作电

6、流,且不能受温度及其它因素的影响。另外,当温度变化时驱动芯片还要能够自动调节输出电流 的大小以实现色差平衡温度补偿。该频率计的整体仿真图三、编程思路程序流程图主程序设T0,T1工作模式初始化赋值中断启动T0,T1工作T1定时1sT1为1s?停止工作数码管显示YN程序代码include #define uchar unsigned char#define uint unsigned int#define ulong unsigned longvoid init();void display(uchar ge,uchar shi,uchar bai,uchar qian);void delay(u

7、int z);sbit sm1=P21;sbit sm2=P22;sbit sm3=P23;sbit sm4=P24;sbit LED3=P25;sbit LED2=P26;sbit LED1=P27;ulong num1,num;bit flag;uchar tt,TC,ge,shi,bai,qian;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/*主程序*/void main()init();/*初始化子程序*/while(1) display( ge, shi, bai, qian);/*显示子程序

8、*/if(flag=1)/*判断如果flag=1 则从新打开两个定时器*/TR0=1;TR1=1;void t1(void) interrupt 3 using 0/*定时器1子程序*/TH1=0x3C; TL1=0xB0; tt+;if(tt=40)TR1=0; /*开定时器1*/ TR0=0; /*开计数器0*/ num=TC*65536+TH0*256+TL0; /*求得1秒通过计数器0的下降沿数,即所测的频率*/num1=TC*65536+TH0*256+TL0; /*赋值给num1,为了正常显示*/ tt=0;/*tt置零*/ TH0=0;/* 计数器高八位置0*/TL0=0; /*

9、计数器低八位置0*/ TC=0; /*计数器TC置0*/ flag=1; /*标志位置1*/void t0(void) interrupt 1 using 0/*计数器0子程序*/TC+;void init() /*初始化子程序*/flag=0; TH0=0; TL0=0;TMOD=0x15; /*设置定时器1为定时模式 定时器1为计数方式*/TH1=0x3C; TL1=0xB0; EA=1; /*开总中断*/ET1=1; TR1=1;ET0=1;TR0=1;void delay(uint z) /*延时子程序*/z=200;while(z-);void display(uchar ge,uc

10、har shi,uchar bai,uchar qian) /*显示子程序*/if(num1=9999) /*如果所测的频率9999&num199999&num1=) /*如果所测的频率99999到则进入这个语句*/LED1=0;LED3=1;LED2=1;num1=num1/100;qian=num1/1000;bai=num1%1000/100;shi=num1%100/10;ge=num1%10;sm1=1;sm2=1;sm3=1;sm4=1;P0=tableqian;delay(2);P0=0x00; sm1=1;sm2=0;sm3=1;sm4=1;P0=tablebai;delay(2);P0=0x00; sm1=1;sm2=1;sm3=0;sm4=1;P0=tableshi&0x01;delay(2);P0=0x00; sm1=1;sm2=1;sm3=1;sm4=0;P0=tablege;delay(2);P0=0x00;num1=num; /*把值赋回给num 要不然只能下次只能进入第一句 小数点显示不出来*/四Pouteus软件调试根据系统设计要求,进行Keil和Proteus系统仿真,不断调试程序,直到符合功能要求待测值(Hz)1010050010055555855510546

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号