其中绿色LED亮,是表示数码管显示的频率值是MHZ档,也就是频率的单位是MHZ,也就表明运行结果读数是9.643MHZ。
4.0 给定超过量程信号波后,信号运行图如下
其中三个LED灯都会点亮,数码管全部都显示为0
五、总结与体会
通过此次设计,我受益匪浅。数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字,显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号,方波信号以及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精度高,显示直观,所以经常要用到数字频率计。
通过此次设计,我熟练掌握了C语言的编写,仿真软件Proteus、编程软件KEIL和制版软件DXP 2004的应用,了解了相关元件的基本知识,同时还熟练掌握了对文献资料等的收集、查阅、应用。在设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的程序运行和仿真调试环节,本身就是在践行“过而能改,善莫大焉”的知行观,同时在老师的指导下,终于完成了此次设计。
此次设计也让我明白了思路即出路,有不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
参考文献
[1]李学海著.标准80C51单片机基础教程.北京航空航天大学出版社,2006 [2] 戴仙金主编.51单片机及其C语言程序开发实例.清华大学出版社,2008 [3] 李诚人.高宏洋等.嵌入式系统及单片机应用,清华大学出版社,2005 [4] 龚运新编著.单片机C语言开发技术.清华大学出版社,2006 [5] 张天凡等编著.51单片机C语言开发详解.电子工业出版社,2008 [6] 张义和.王敏男等.例说51单片机(C语言版).人民邮电出版社,2008 [7] 张洪润、刘秀英、张亚凡等.单片机应用设计200例 .北京航空航天大学出版社,2006
[8] 彭为、黄科、雷道仲等.单片机典型系统设计实例精讲.电子工业出版社, 2006 [9] 李学海著.标准80C51单片机基础教程.北京航空航天大学出版社,2006 [10] 李朝青.单片机原理及接口技术[M].北京航天航空大学出版社,1998. [11] 余发山,王福忠.单片机原理应用技术[M].徐州:中国矿业大学出版社,2003. [12]V.Yu.Teplov,A.V. Anisimov.Thermostatting System Using a Single-Chip Microcomputer and Thermoelectric Modules Based on the Peltier Effect[J] ,2002
[13] Yeager Brent.How to troubleshoot your electronic scale[J]. Powder and Bulk Engineering. 1995
[14]WeiXiaoRu,JuJianZhi.Design of a CCD's driving circuit based on ATmega16.Microcomputer&Its Applications,2010,(16).
[15]HeLianYun,The Traffic Signal Lamp System Controlled with Single Chip Microcomputer.Computer Study,2008,(01).
附录A
程序源代码:
#include
#define value P0 //数码管显示,段选 #define place P1 //位选
unsigned char d[4]; //对应共阳极数码管的各位
unsigned char Num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示0-9数字,共阳 //unsigned char Num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};显示0-9数字,共阴
sbit clear=P2^3;
sbit ledG=P2^4; //led显示频率量程单位和档位 sbit ledY=P2^5; sbit ledR=P2^6;
unsigned char count=0; //定时器2计数 unsigned char gears; //档位
unsigned int tN; //不同档位计时值
unsigned int fCnta; //脉冲下降沿次数,T1 unsigned long regCnta; //脉冲次数暂存
unsigned int fCntb; //脉冲下降沿次数,T0 unsigned long regCntb; //脉冲次数暂存 unsigned long pCnt; //频率显示
void Delay(unsigned int DelayTime) {
while(DelayTime--); }
void display() {
if(gears==1) //HZ档 {
d[3]=0;
d[2]=pCnt/100;
d[1]=(pCnt0)/10; d[0]=pCnt;
place=0x01;value=Num[d[3]];Delay(200); place=0x02;value=Num[d[2]];Delay(200); place=0x04;value=Num[d[1]];Delay(200); place=0x08;value=Num[d[0]];Delay(200);
ledG=1; //显示HZ档,红色发光二极管点亮 ledY=1; ledR=0; }
if(gears==2) //KHZ档 {
d[3]=pCnt/1000;
d[2]=(pCnt00)/100; d[1]=(pCnt0)/10; d[0]=pCnt;
place=0x01;value=Num[d[3]];Delay(300); place=0x02;value=Num[d[2]];Delay(300);
place=0x04;value=Num[d[1]]+0x80;Delay(300); place=0x08;value=Num[d[0]];Delay(300);
ledG=1; //显示KHz档,黄色发光二极管点亮 ledY=0; ledR=1; }
if(gears==3) //MHZ档 {
d[3]=pCnt/1000;
d[2]=(pCnt00)/100; d[1]=(pCnt0)/10; d[0]=pCnt;
place=0x01;value=Num[d[3]]+0x80;Delay(50);//带小数点 place=0x02;value=Num[d[2]];Delay(50); place=0x04;value=Num[d[1]];Delay(50); place=0x08;value=Num[d[0]];Delay(50);
ledG=0; //显示MHZ档,绿色发光二极管点亮 ledY=1; ledR=1; }
if(gears==4) //超出范围 {
d[3]=0; d[2]=0; d[1]=0; d[0]=0;
place=0x01;value=Num[d[3]];Delay(100); place=0x02;value=Num[d[2]];Delay(100); place=0x04;value=Num[d[1]];Delay(100); place=0x08;value=Num[d[0]];Delay(100);
ledG=0; //超出范围,红、黄、绿发光二极管都点亮 ledY=0;
ledR=0;
相关推荐: