毕业设计基于单片机的频率计设计 下载本文

内容发布更新时间 : 2024/11/8 21:49:54星期一 下面是文章的全部内容请认真阅读。

常州信息职业技术学院电子与电气工程学院 毕业设计论文

VCCVCCU3Dig713Dig612Dig7SegA23SegADig521Dig6SegB24SegBDig422Dig5SegC1SegCSegD2SegDR17Dig3R13K33Dig4Dig3SegE7SegER18R191KDig2R2Dig1R33K34Dig2SegF8SegF3K33K3Dig0R43K35Dig1SegG9SegG3K36Dig0SegH10SegH1615VCCSCL19P1.018RESSDA20P1.117OSC2INT14INT1C11C12YYOSC1GND11470P30P8MZLG7290C1330PABCDEFGHggggggggeeeeeeeeSSSSSSSSJ1R16R15R14R13R12R11R10R9102202202202202202202202209SegAP1.78SegBP1.67SegCP1.56SegDP1.45SegEP1.34SegFP1.23SegGP1.12SegHP1.01P1VCC10101742115317421153DPYabcdefgdpLED1DPYabcdefgdpLED2J3aaaaaaaa109RDfgbfgbfgbfgbfgbfgbfgbfgb8WR7T1edce1dcedcedcedcedce4dcedc6T0dp23dp4dpdp1CCCCCdp23CCdpCdpdp5INT14INT03TXD68926892112RXD01234567ggggggggiiiiiiii1DDDDDDDDP3VCCVCCVCCC4C322ufU1J2P1.01P1.12P1.0VCC401041P1.23P1.1P0.0392P1.34P1.2P0.1383R20P1.45P1.3P0.23741kP1.56P1.4P0.3365P1.67P1.5P0.4356P1.78P1.6P0.5347RESET9P1.7P0.6338RXD10RESETP0.7329TXD11RXDEA/VP3110INT012TXDALE/P30EA/VPVCCINT113INT0PSEN29PSENP0T014INT1P2.728J427C1T115T0P2.626Dig0120pfWR16T1P2.5RD17WRP2.425Dig1218RDP2.324Dig2319X2P2.223Dig34Dig45C2Y120X1P2.122VSSDig5620pf12MP2.021Dig67AT89S52Dig78910P2图5-4 总电路图

14

....

常州信息职业技术学院电子与电气工程学院 毕业设计论文

第6章 单元程序的设计

前面部分是采用纯硬件电路组成的。比较用单片机来实现数字频率计的显示来说,这个系统相对难度有点大了。因为元件数目多,电路结构复杂点。但是,此电路各单元电路的设计思路是很清晰的,整个系统的设计逻辑思维较好。而且其测量频率范围也能达到1—9999Hz,其精度也较高,能达到98%以上了。与其他用纯硬件电路设计的频率相比较,本系统还是有其可取之处的。采用单片机智能控制,结合外围电子电路,设计的智能数字频率计具有测量精度高,频率范围宽,稳定性好的特点,可应广泛用于各种测试场所。所以各有优缺点,下面部分是用单片机来实现频率计的设计的。

6.1 1s定时

本次设计选用定时器T0完成定时功能,选用方式1时最多也只能定时,显然不能满足定时1s的要求,可以用下面这种方法解决:采用T0定时10,连续循环定时100次即可完成1s定时,用一个计数单元20H存放循环的次数,每一次循环20H单元自减1,当20H单元为零时则1s定时到时。

6.2 T1计数程序

设计中T1采用计数功能,需要注意的一个问题是,输入的待测时钟信号的频率最高可以达到460800Hz,但计数器最多只能计数65536次,显然需要对计数单元进行扩展,扩展的思路是除了计数器T1的TH1和TL1用于计数外,再选用一个计数单元23H,每当计数器T1溢出回零时产生中断,中断程序执行23H单元自增1,这样,当一秒到时时采集的计数数据,23H单元存放的是数据的最高位,TH1存放的是数据的次高位,TL1存放的是数据的最低位。当然,这里所说的“最高位”“次高位”以及“最低位”都是针对十六进制而言的。T1计数程序的流程图如图6-1示。

15

常州信息职业技术学院电子与电气工程学院 毕业设计论文

Y开始23H=0T1初始化置初值0计数开始计数溢出产生中断23H=23H+11s到时否?N采集数据结束图6-1 T1计数流程图

6.3 频率数据采集

到1s定时时,存储计数器T1以及扩充计数单元23H记录的数据即为输入时钟信号的频率,为了保证记录的频率精确度,到1s定时后应立即停止T1的计数,因为指令的执行也需要时间,并且待测的时钟信号频率越高,指令执行所需要的时间就越不能忽略,这里采用的指令为CLR TR1。

6.4 进制转换

从计数器采集到的频率数据是十六进制的,如果直接把这些数据送给数码管显示显然很不直观,因此需要把这些数据向十进制转换。转换的算法有两种,第一种算法的思想是对该十六进制数除以100,商为百位,余数再除以10,再得到的商为十位,余数为个位。这种算法虽然程序的编写非常简单,但是它的局限性也非常明显,即它只能对不大于两位的十六进制数进行转换,对于大于两位的十进制数则无能为力。这次设计的频率计频率范

16

常州信息职业技术学院电子与电气工程学院 毕业设计论文

围远不止两位十六进制数就能记得下,所以这里采用第二种方法。

第二种方法算法的编程实现非常复杂,但是可以对任意长度的十六进制数向十进制转换。这种算法的基本思路是:第一步将最高位的高半字节提出来,除以10,把商存储起来,余数与最高位的低半字节组合成一个字节,再除以10,再存储商,余数以此类推,直到最后一次计算得到的余数即为十进制数的个位;第二步把第一步存储的商组合成一个字节,依次除以10,仍然把每次得到的商存储起来,以此类推最后一次得到的余数即为十进制数的十位;以后也是以此类推得到十进制数的百位、千位??以上算法必须要注意的一个问题是,每次得到的余数与低位的半字节组合成一个字节时,余数必须放在该字节的高半字节,否则计算错误。该本次频率计系待测的时钟信号的最高频率为460800Hz,对应的十六进制数为70800H,这里就以70800H转换为十进制数为例来说明这种算法。

第一步:用7H除以10,商0H余7H,把商0存储在24H单元,余数7H与下一个字节08H的高半字节0H组合成一个字节70H。70H除以10,商BH余2H,把商BH存储在25H单元,余数2H与8H组合成一个字节28H。28H除以10,商4H余0H,把商4H存储在26H单元,余数0H与0H组合成一个字节00H。00H除以10,商0H余0H,把商0H存储在27H单元,余数0H与0H组合成一个字节00H。00H除以10,商0H余0H,把商0H存储在28H单元,余数0即为所需十进制数的个位。

第二步:把存储在24H与25H单元的商组合成一个字节0BH。0BH除以10,同第一步,存储商,余数与下一个商组合成一个字节,再除以10,一次类推得到十进制数的十位0。

第三步:方法同第二步,得到十进制数的百位8。 第四步:方法同第三步,得到十进制数的千位0。

第五步:方法同第四步,得到十进制数的万位6和十万位4。

最后得到了十进制数460800。图6-2详细的展示了这种进制转换算法的过程。

17

常州信息职业技术学院电子与电气工程学院 毕业设计论文

(23H)=07H(22H)=08H(21H)=00H07H/10商0余770H/10商B余228H/10商4余000H/10商0余000H/10商0余0个位为00BH/10商1余114H/10商2余000H/10商0余000H/10商0余0十位为012H/10商1余880H/10商C余880H/10商C余8百位为81CH/10商2余88CH/10商E余0千位为02E/10商4余6万位为6十万位为4图6-2 进制转换说明图

6.5 数码显示

将采集到的频率转换为十进制数后,还不能直接将这些数送给数码显示,因为七段LED数码管内部由7个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。本次设计所给数码管十进制数显示代码如下所示。

18