51单片机1602LCD显示数字频率计
51单片机1602液晶显示频率计
摘要在电子领域内,频率是一种最基本的参数,并与其他许多电参量的测量方案和测量结果都有着十分密切的关系。
由于频率信号抗干扰能力强、易于传输,可以获得较高的测量精度。
因此,频率的测量就显得尤为重要,测频方法的研究越来越受到重视。
频率计作为测量仪器的一种,常称为电子计数器,它的基本功能是测量信号的频率和周期频率计的应用范围很广,它不仅应用于一般的简单仪器测量,而且还广泛应用于教学、科研、高精度仪器测量、工业控制等其它领域。
随着微电子技术和计算机技术的迅速发展,特别是单片机的出现和发展,使传统的电子侧量仪器在原理、功能、精度及自动化水平等方面都发生了巨大的变化,形成一种完全突破传统概念的新一代侧量仪器。
频率计广泛采用了高速集成电路和大规模集成电路,使仪器在小型化、耗电、可靠性等方面都发生了重大的变化。
目前,市场上有各种多功能、高精度、高频率的数字频率计,但价格不菲。
为适应实际工作的需要,本次设计给出了一种较小规模和单片机(AT89S52)相结合的频率计的设计方案,不但切实可行,而且体积小、保密性强、设计简单、成本低、精度高、可测频带宽,大大降低了设计成本和实现复杂度。
频率计的硬件电路是用Protel绘图软件绘制而成,软件部分的单片机控制程序,是以KeilC做为开发工具用C语言编写而成,而频率计的实现则是选用Ptotues仿真软件来进行模拟和测试。
关键词:单片机;AT89S52;频率计;C语言ABSTRACTIn the electronic field, frequency is a kind of most basic parameter, and all there are close relations in the measurement schemes of many other electric parameters and result of measuring. Because the signal anti-interference ability of frequency is strong, easy to transmit, can obtain higher measurement precision. So, the measurement of frequency seems particularly important, the research of the method is being paid attention to.The Frequency meter, as one kind of the measuring instrument, often called the electronic counter, its basic function is that frequency and application of cycle Frequency meter of measuring the signal are in a very large range, it not only applies to general simple instrument measurement but also apply to other fields such as teaching, scientific research, high-accuracy instrument measuring, industrial control extensively. With the rapid development of microelectric technique and computer technology, especially appearance and development of the one-chip computer, the instruments have all changed enormously in such aspects as principle, function, precision and automatic level to enable the traditional electronic side amount, form a kind of side amount instrument of new generation that totally broke through the traditional concept. The Frequency meter has adopted the high-speed integrated circuit and large scale integrated circuit extensively, make the instrument change greatly in such aspects as miniaturize, power consumptive, dependability. At present, there are various digital Frequency meter of multi-function, high precision, high frequency on the market, but the price is high.In order to meet the need of the real work, design and provide one this time The design plan of Frequency meter combining with one-chip computer (AT89S52) on a small scale, not only feasible, and small, of good security, design simply, with low costs, the precision is high, can examine the bandwidth frequently, have reduced the design cost and realized complexity greatly. The hardware circuit of the Frequency meter is drawing with Protel mapping software, the one-chip computer control procedure of the software part, regarded KeilC as the developing instrument to write in C language, but the realization of the Frequency meter was to select to carry on imitating and test with Protues artificial software. Key Words:single chip computer; AT89S52; frequency meter; C language目录1 绪论.................................................... 错误!未指定书签。
基于51单片机的1602液晶频率计设计(Proteus仿真图和程序)
基于51单片机的1602液晶频率计设计一、Proteus仿真图:二、程序代码//最大测量65536Hz的频率计//原理:T0定时1S,T1计数#include <REG51.H>#include<INTRINS.H>#define uchar unsigned char#define uint unsigned intuint count=0;uint nm=0;uchar Fw,Fq,Fb,Fs,Fg;#define DataPort P0sbit LCM_RS=P2^0;sbit LCM_RW=P2^1;sbit LCM_EN=P2^2;uchar code str0[]={"-Test frequency-"};uchar code str1[]={"F=00000Hz "};//uchar code str2[]={" "};/*******************************/void delay(unsigned int k){unsigned int i,j;for(i=0;i<k;i++){for(j=0;j<121;j++){;}}}//=================================================///* 函数名:void WaitForEnable(void)作用:检测忙碌信号*///================================================//void WaitForEnable(void){DataPort=0xff;LCM_RS=0;LCM_RW=1;_nop_();LCM_EN=1;_nop_();_nop_();//while(DataPort&0x80);delay(5);LCM_EN=0;}//==========================================================// /* 函数名:void WriteCommandLCM(uchar CMD,uchar Attribc)作用:写命令到LCM *///==========================================================// void WriteCommandLCM(uchar CMD,uchar Attribc){if(Attribc)WaitForEnable();LCM_RS=0;LCM_RW=0;_nop_();DataPort=CMD;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;}//=========================================================///* 函数名:void WriteDataLCM(uchar dataW)作用:写数据*///=========================================================// void WriteDataLCM(uchar dataW){WaitForEnable();LCM_RS=1;LCM_RW=0;_nop_();DataPort=dataW;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;}//=========================================================///* 函数名:void InitLcd()作用:LCM初始化*///=========================================================// void InitLcd(){WriteCommandLCM(0x38,1);WriteCommandLCM(0x08,1);WriteCommandLCM(0x01,1);WriteCommandLCM(0x06,1);WriteCommandLCM(0x0c,1);}//=========================================================///*函数名:void DisplayOneChar(uchar X,uchar Y,uchar DData)作用:显示指定坐标的一个字符*///=========================================================// void DisplayOneChar(uchar X,uchar Y,uchar DData){Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;WriteCommandLCM(X,0);WriteDataLCM(DData);}//============================================================// /*函数名:void DisplayListChar(uchar X,uchar Y,uchar code *DData作用:显示指定坐标的一串字符*///============================================================// void DisplayListChar(uchar X,uchar Y,uchar code *DData){uchar ListLength=0;Y&=0x1;X&=0xF;while(X<=15){DisplayOneChar(X,Y,DData[ListLength]);ListLength++;X++;}}//============================================================// /* 函数名:void main(void)作用:主函数*///============================================================////============================================================// /* 函数名:void display()作用:显示函数*///============================================================// void display(){Fw=count/10000+0x30;Fq=count/1000%10+0x30;Fb=count/100%10+0x30;Fs=count/10%10+0x30;Fg=count%10+0x30;DisplayOneChar(2,1,Fw);DisplayOneChar(3,1,Fq);DisplayOneChar(4,1,Fb);DisplayOneChar(5,1,Fs);DisplayOneChar(6,1,Fg);}void InitTime(void){TMOD=0x51;//T0为定时器工作于方式1,T1为计数器工作于方式1TH0=0x4C;//定时器50ms赋高8初值, 12M晶振TL0=0x00;//定时器50ms赋低8初值, 12M晶振TR0=1;//开定时器1TH1=0;//计数器赋高8初值初值TL1=0;//计数器赋低8初值TR1=1;//开计数器0ET0=1;EA=1;}void timeo(void) interrupt 1{TH0=0x4C;//定时器50ms赋高8初值TL0=0x00;//定时器50ms赋低8初值nm=nm+1;if(nm==10){TR1=0; //关闭T1定时器,定时1S完成TR0=0;//关闭T0}}//============================================================// /* 函数名:void main(void)作用:主函数*///============================================================// void main(void){char i;uint temp,temp1;delay(500);InitLcd(); //LCM初始化设置InitTime();for(i=15;i>=0;i--){DisplayListChar(i,0,str0);//显示第一行字符DisplayListChar(i,1,str1);//显示第二行字符delay(100);}while(1){if(nm==10)//定时10*50MS=500ms{temp=TL1;temp1=TH1;count=2*(temp1*256+temp);//定时2乘以500ms=1000ms display();TH1=0;//计数器赋高8初值初值TL1=0;//计数器赋低8初值nm=0;TR1=1;TR0=1;}}}。
基于51单片机的1602LCD显示
标签:单片机LCD基于51单片机的1602LCD显示基于51单片机的1602LCD显示LCD(liquid crystal display)为液晶显示器,它一般不会单独使用,而是将LCD面板、驱动与控制电路组合成LCD模块(1iquid crystal display moulde,简称为LCM)来使用。
LCM是一种很省电的显示设备,常被应用在数字或微处理器控制的系统,做为简易的人机接口,但人们一般还是习惯称之为LCD显示器。
1 硬件设计采用51单片机控制1602LCD显示器的电路如下所示。
在桌面上双击图标,打开ISIS 7 Professional窗口(本人使用的是v7.4 SP3中文版)。
单击菜单命令“文件”→“新建设计”,选择DEFAULT 模板,保存文件名为“LCD.DSN”。
在器件选择按钮中单击“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。
51单片机AT89C51 一片晶体CRYSTAL 12MHz 一只瓷片电容CAP 22pF 二只电解电容CAP-ELEC 10uF 一只电阻RES 10K 一只排阻RESPAC-8 10K 一只1602液晶显示器LM016L 一只若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U1的31脚,都可以不画,它们都是默认的。
在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER和GROUND放置电源和地。
放置好元件后,布好线。
左键双击各元件,设置相应元件参数,完成电路图的设计。
2 软件设计用1602LCD显示两行字符的流程图如下所示。
用1602LCD显示“Welcom to China”和“Hi!Good morning!”的详细C51程序如下。
//用LCD循环显示"Welcome to China"和"Hi!Good morning!"#include<reg51.h> //包含单片机的头文件#include<intrins.h> //包含_nop_()函数定义的头文件sbit RS="P2"^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW="P2"^1; //读写选择位,将RW位定义为P2.1引脚sbit E="P2"^2; //使能信号位,将E位定义为P2.2引脚sbit BF="P0"^7; //忙碌标志位,,将BF位定义为P0.7引脚unsigned char code string[ ]={"Welcome to China"};unsigned char code string1[ ]={"Hi!Good morning!"};/*************************************************函数功能:延时1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒*************************************************/void delay1ms(){unsigned char i,j;for(i=0;i<10;i++)for(j=0;j<33;j++);}/*****************************函数功能:延时若干毫秒入口参数:n******************************/void delay(unsigned char n){unsigned char i;for(i=0;i<n;i++)delay1ms();}/*******************************************函数功能:判断液晶模块的忙碌状态返回值:result。
51单片机 1602液晶显示 NE555频率计
#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit LCD_RS= P2^0;//定义LCD引脚sbit LCD_RW= P2^1;sbit LCD_E= P2^2;uchar code DIS[]={"NE555-------TEST"};//NE555 测试;uchar code dsptab[]={'0','1','2','3','4','5','6','7','8','9'};//字符代表码;uchar i,c[4],a[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uint s;/*====================延时子程序====================*/ void delay(uint z){uchar m;for(;z>0;z--)for(m=124;m>0;m--);}void delay400ms(void)////400ms延时{ uchar z = 5;uint m;while(z--){ m=7269;while(m--);}}/*====================LCD1602子程序====================*/ /*-- 读状态--*///读状态子程序;有返回值;返回值类型为CHAR型;//读回的状态通过RETURN返回;uchar read_estate(void) //定义有返回值的函数;{ P0=0Xff; //把LCD端口全置1方便读取信号; LCD_RS=0; //RS置0;LCD_RW=1; //RW置1;LCD_E=0; //E端置0;delay(10); //短延时;LCD_E=1; //E端置1;以锁存数据; while(P0&0x80); //检测忙,则一直循环;return(P0); //返回读取的信号;}/*-- 写数据--*///写数据子程序;无返回值;输入变量I;//I为要写入LCD中的数据;//数据类型CHAR形;void write_data(uchar i) //定义输入变量值I;{read_estate(); //检测忙信号;P0=i; //把I中数据送到LCD数据端;LCD_RS=1; //RS置1;LCD_RW=0; //RW置0;LCD_E=0; //E置0;delay(10); //短延时;LCD_E=1; //E置1;以锁存数据;}/*-- 写指令--*///写指令子程序;无返回值;输入二个变量I和J.//I为要写入LCD的指令;J为判断要不要检测忙.//如果J为0则不判断检测忙;//如果J为1则判断检测忙;void write_dictate(uchar i,j) //定义二个变量;{if(j)read_estate(); //根据需要检测忙;P0=i; //把要写入的数据送到LCD数据端; LCD_RS=0; //RS置0;LCD_RW=0; //RW置0;LCD_E =1; //E端置0;delay(10); //延时;LCD_E =0; //E端置1;以锁存数据;}/*-- LCD初始化--*///LCD初始化程序;主要作用初始化LCD,对LCD进行复位以及设置;void initialization(void) //定义函数;{delay(50); //延时5MS;write_dictate(0x38,0); //写指令38H;不检测忙;delay(50); //延时5MS;write_dictate(0x38,0); //写指令38H;不检测忙;delay(50); //延时5MS;write_dictate(0x38,0); //写指令38H;不检测忙;delay(50);write_dictate(0x38,1); //显示模式设置;检测忙;write_dictate(0x08,1); //关闭显示;检测忙;write_dictate(0x01,1); //显示清屏;检测忙;write_dictate(0x06,1); //显示光标移动设置;检测忙;write_dictate(0x0C,1); //显示开及光标设置;检测忙;}/*-- 在指定位置显示一个字符--*/void displayonechar(uchar x, y,ddata){y &= 0x01;x &= 0x0f; //限制X不能大于15,Y不能大于1if (y) x+= 0x40; //当要显示第二行时地址码+0x40;x+= 0x80; //算出指令码write_dictate(x,0); //这里不检测忙信号,发送地址码write_data(ddata);}/*-- 在指定位置显示一串字符--*/void displaylistchar(uchar x,y,uchar code *ddata){uchar a=0;y&=0x01;x&=0xf;while(ddata[a]>0x20){ if(x<=0xff){displayonechar(x, y,ddata[a]);a++;x++;}}}/*====================MAIN主程序====================*/void main(){delay400ms();//延时400MSinitialization();//LCD复位;displaylistchar(0,0,DIS);//显示NE555 测试;displayonechar(0,1,'F'); //在LCD是显示F=____Hzdisplayonechar(1,1,'=');displayonechar(9,1,'H');displayonechar(10,1,'z');TMOD=0X51; //定义T0为方式一(十六位进制),T1为计数器(16位)TH0=0X3C; //50 msTL0=0XB0;TH1=0X00; //初始值TL1=0X00;TR0=1;TR1=1;ET0=1;ET1=0;EA=1;i=0;/* 显示*/ // 调用显示子程序(显示位,显示行,显示数据)注:显示行“0”为第一行,“1为第二行”while(1){if(s/10000>=1){displayonechar(2,1,dsptab[s/10000]); //万displayonechar(3,1,dsptab[s/1000%10]);//千displayonechar(4,1,'.'); //点displayonechar(5,1,dsptab[s/100%10]);//百displayonechar(6,1,dsptab[s/10%10]); //十displayonechar(7,1,dsptab[s%10]); //个displayonechar(8,1,'K');}else if(s/1000>=1){displayonechar(2,1,' ');displayonechar(3,1,dsptab[s/1000%10]);//千displayonechar(4,1,'.'); //点displayonechar(5,1,dsptab[s/100%10]);//百displayonechar(6,1,dsptab[s/10%10]); //十displayonechar(7,1,dsptab[s%10]); //个displayonechar(8,1,'K');}else if(s/100>=1){displayonechar(2,1,' ');displayonechar(3,1,' ');displayonechar(4,1,' '); //万displayonechar(5,1,' '); //千displayonechar(6,1,dsptab[s/100%10]);//百displayonechar(7,1,dsptab[s/10%10]); //十displayonechar(8,1,dsptab[s%10]); //个}else if(s/10>=1){displayonechar(2,1,' ');displayonechar(3,1,' ');displayonechar(4,1,' '); //万displayonechar(5,1,' '); //千displayonechar(6,1,' ');//百displayonechar(7,1,dsptab[s/10%10]); //十displayonechar(8,1,dsptab[s%10]); //个}else{displayonechar(2,1,' ');displayonechar(3,1,' ');displayonechar(4,1,' '); //万displayonechar(5,1,' '); //千displayonechar(6,1,' ');//百displayonechar(7,1,dsptab[s/10%10]); //十displayonechar(8,1,dsptab[s%10]); //个}}}/* 中断*/void t0()interrupt 1{TH0=0X3C;TL0=0XB0;i++;if(i==20) //1 s时间到时{s=TH1; //555信号发生器的输出口接P3.5(T1) 15脚s=s<<8;s=s+TL1;i=0; //清零TH1=0X00;TL1=0X00;}}/*----------------------------------------------------------------*//*----------------- 1602液晶数据读取子程序-----------------------*///读数据子程序;有返回值,返回值类型为CHAR型;/*uchar read_data(void) //定义有返回值的子函数; {LCD_DATA=0Xff; //LCD数据端口置1; LCD_RS=1; //RS置1;LCD_RW=1; //RW置1; LCD_E=0; //E置0;delay(10); //短延时;LCD_E=1; //E置1;以锁存数据; return(LCD_DATA); //返回读取的值;}/*----------------------------------------------------------------*/。
基于51单片机的频率计
(六)信号调理及放大整形模块
放大整形系统包括放大器、施密特触发器。由运算放大器构成的射 级跟随器起阻抗变换作用,使输入阻抗提高。同相输入的运算放大器的 放大倍数为(R1+R2)/R1,改变R1的大小可以改变放大倍数。系统的整 形电路由施密特触发器组成,整形后的方波送到闸门以便计数。
所用元件:
(7) 数字显示模块
三 数字频率计(低频)的硬件结构设计
(一)系统硬件的构成 本频率计的数据采集系统主要元器件是单片机AT89C51,由它完成
对待测信号频率的计数和结果显示等功能,外部还要有分频器、显示器 等器件。可分为以下几个模块:传感器、放大整形模块、单片机系统、 LCD显示模块。各模块关系图如图2所示:
放大整形 光电传感器 显示 单片机
基于51单片机的智能频率计
一 数字频率计概述
数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺 少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪 器。它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变 化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于 其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频 率计。
基于51单片机的数字频率计
• 6、RESET/VPD(9脚):复位信号输入端/备用电源输入 端;
单片机执行程序都是从地址0000H开始的,所以在进入系 统时必须对CPU进行复位,有时候程序运行错误或操作错 误,系统会处于锁死的状态为了摆脱这样的状态也必须对 单片机进行复位。
复位的方法比较简单:只要在RESET脚上加一个持续时 间为24个振荡周期(两个机器周期)的高电平就可以了。
• 7、EA/VPP(31脚):内/外部ROM选择端; • 8、P0口(39-32脚):双向IO口P00-P07(P0口无上拉
电阻,作输出用需要接上拉电阻);
• 9、P1口(1-8脚):准双向通用IO口; • 10、P2口(21-28脚):准双向通用IO口; • 11、P3口(10-17脚):准双向通用IO口;
环境干扰等因素。经实际多次测试频率在 等于1000Hz的时候最大相对误差达到0.1%, 符合误差要求。
• 实物图
2.3 显示模块
• 2.3.1 LCD1602简介
LCD1602是一种专门用来显示字母、数字、 符号等的点阵型液晶模块,它由若干个5X7 或者5X11等点阵字符位组成,每个点阵字 符位都可以显示一个字符,每位之间有一 个点距的间隔,每行之间也有间隔,起到 了字符间距和行间距的作用。LCD1602是= 显示的内容为16X2,即可以显示两行,每 行16个字符液晶模块。
2.3.4 LCD1602地址
比如第二行第一个字符的地址是40H,那么是否直接 写入40H就可以将光标定位在第二行第一个字符的位置呢? 这样不行,因为写入显示地址时要求最高位D7恒定为高 电平1,所以实际写入的数据应该40H+80H=C0H
51单片机——数字频率计
频率计是我们经常会用到的实验仪器之一,本实验要使用单片机和计数电路及液晶器件来设计一个宽频的频率计。
期望达到10Hz-1.1G范围的频率精确测量。
实验电路图(初步方案)1) 计数及显示电路:2)前置放大及分频电路:设计思路频率的测量实际上就是在1S时间内对信号进行计数,计数值就是信号频率。
用单片机设计频率计通常采用两种办法,1)使用单片机自带的计数器对输入脉冲进行计数,或者测量信号的周期;2)单片机外部使用计数器对脉冲信号进行计数,计数值再由单片机读取。
由于单片机自带计数器输入时钟的频率通常只能是系统时钟频率的几分之一甚至几十分之一,因此采用单片机的计数器直接测量信号频率就受到了很大的限制。
本实验电路采用方式2,使用一片74LS393四位双二进制计数器和Atmega8的 T1计数器组成了24位计数器,最大计数值为16777215。
如果输入信号经过MB501分频器进行64分频后再进行测量,则固定1S时基下最高测量频率为1073.741760Mhz。
为了方便得到准确的1秒钟测量闸门信号,我们使用了Atmega8的异步实时时钟功能,采用32.768Khz的晶振由TC2产生1秒钟的定时信号。
测量原理:单片机打开测量闸门,即PB1输出高电平,同时TC2定时器启动。
74LS393开始对输入脉冲进行计数,74LS393每计数达256时,Atmega8的T1计数器也向上计数1次。
当1S定时到达时,单片机产生中断,PB1输出低电平关闭测量闸门,然后Atmega8读取74LS393和T1的计数值,然后送LCD显示。
实验进展2004-09-27根据设计思路编写程序初步获得了一些实验结果,如下图所示。
下图是测量8M有源晶振的输出结果。
由于1S的测量闸门时间在业余条件下不好测试,因此,实验程序中在LCD上同时显示实时时钟用于判断1S闸门时间的准确性。
实验中,我使用CDMA手机上显示的GPS卫星精确时间进行比较。
手机时间显示的最小单位是分钟,测量时一旦手机分钟值发生跳变,则立即记录下LCD显示的秒值,这样的话让频率计运行一段时间后,再多次记录下LCD显示的秒,就可以准确判断频率计的异步时钟是否准确。
基于51单片机的数字频率计设计
基于51单片机的数字频率计一、设计说明1.数字频率计概述数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。
它是一种用十进制数字显示被测信号频率的数字测量仪器。
它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。
在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。
本数字频率计将采用定时、计数的方法测量频率,采用一个1602A LCD显示器动态显示6位数。
测量范围从1Hz—10kHz的正弦波、方波、三角波,时基宽度为1us,10us,100us,1ms。
用单片机实现自动测量功能。
基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。
它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
2.频率测量仪的设计思路与频率的计算频率测量仪的设计思路主要是:对信号分频,测量一个或几个被测量信号周期中已知标准频率信号的周期个数,进而测量出该信号频率的大小,其原理如右图所示。
若被测量信号的周期为,分频数m1,分频后信号的周期为T,则:T=m1Tx。
由图可知:T=NTo(注:To为标准信号的周期,所以T为分频后信号的周期,则可以算出被测量信号的频率f。
)由于单片机系统的标准频率比较稳定,而是系统标准信号频率的误差,通常情况下很小;而系统的量化误差小于1,所以由式T=NTo可知,频率测量的误差主要取决于N值的大小,N值越大,误差越小,测量的精度越高。
3.设计原理及系统分析基本设计原理:直接用十进制数字显示被测信号频率的一种测量装置。
它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
若在一定时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T。
其中脉冲形成电路的作用是将被测信号变成脉冲信号,其重复频率等于被测频率fx。
时间基准信号发生器提供标准的时间脉冲信号,若其周期为1s,则门控电路的输出信号持续时间亦准确地等于1s。
基于51单片机的1602LCD显示
标签:单片机LCD基于51单片机的1602LCD显示基于51单片机的1602LCD显示LCD(liquid crystal display)为液晶显示器,它一般不会单独使用,而是将LCD面板、驱动与控制电路组合成LCD模块(1iquid crystal display moulde,简称为LCM)来使用。
LCM是一种很省电的显示设备,常被应用在数字或微处理器控制的系统,做为简易的人机接口,但人们一般还是习惯称之为LCD显示器。
1 硬件设计采用51单片机控制1602LCD显示器的电路如下所示。
在桌面上双击图标,打开ISIS 7 Professional窗口(本人使用的是v7.4 SP3中文版)。
单击菜单命令“文件”→“新建设计”,选择DEFAULT 模板,保存文件名为“LCD.DSN”。
在器件选择按钮中单击“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。
51单片机AT89C51 一片晶体CRYSTAL 12MHz 一只瓷片电容CAP 22pF 二只电解电容CAP-ELEC 10uF 一只电阻RES 10K 一只排阻RESPAC-8 10K 一只1602液晶显示器LM016L 一只若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U1的31脚,都可以不画,它们都是默认的。
在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER和GROUND放置电源和地。
放置好元件后,布好线。
左键双击各元件,设置相应元件参数,完成电路图的设计。
2 软件设计用1602LCD显示两行字符的流程图如下所示。
用1602LCD显示“Welcom to China”和“Hi!Good morning!”的详细C51程序如下。
//用LCD循环显示"Welcome to China"和"Hi!Good morning!"#include<reg51.h> //包含单片机的头文件#include<intrins.h> //包含_nop_()函数定义的头文件sbit RS="P2"^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW="P2"^1; //读写选择位,将RW位定义为P2.1引脚sbit E="P2"^2; //使能信号位,将E位定义为P2.2引脚sbit BF="P0"^7; //忙碌标志位,,将BF位定义为P0.7引脚unsigned char code string[ ]={"Welcome to China"};unsigned char code string1[ ]={"Hi!Good morning!"};/*************************************************函数功能:延时1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒*************************************************/void delay1ms(){unsigned char i,j;for(i=0;i<10;i++)for(j=0;j<33;j++);}/*****************************函数功能:延时若干毫秒入口参数:n******************************/void delay(unsigned char n){unsigned char i;for(i=0;i<n;i++)delay1ms();}/*******************************************函数功能:判断液晶模块的忙碌状态返回值:result。
51单片机实现LCD1602显示定时计数器(自己整理的)
每隔一分钟,蜂鸣器响一次,按键按一下,计数器清0。
从新开始、#include<>#include<>#define uchar unsigned char#define uint unsigned intsbit RS=P2^0;sbit RW=P2^1;sbit EN=P2^2;uchar code dis2[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};uchar code p[]="-";//code 可以不加,加了之后就是固定了这个数组不能对其进行操作、、这个一定要注意。
uchar j,k,kk,miao,miao1,fen,fen1,shi,shi1;void delay_ms(int x)//延时程序,延时1ms{uint i;while(x--)for(i=0;i<120;i++);}uchar busy()//对LCD1602进行判断是否为忙{uchar status;RS=0;RW=1;EN=1;delay_ms(1);status=P1;EN=0;return status;}void write_cmd(uchar cmd)//写命令程序,首先对其进行判忙{while((busy()&0x80)==0x80);//对返回进行判断,如果为忙就进行等待RS=0;RW=0;EN=0;P1=cmd;EN=1;delay_ms(1);EN=0;}void write_data(uchar dat){while((busy()&0x80)==0x80);RS=1;RW=0;EN=0;P1=dat;EN=1;delay_ms(1);EN=0;}void canshu(){write_cmd(0x38);delay_ms(1);write_cmd(0x01);delay_ms(1);write_cmd(0x06);delay_ms(1);write_cmd(0x0c);delay_ms(1);}/*void xianshi(uchar x,uchar y,uchar *str){uint i=0;if(y==0)write_cmd(0x80|x);if(y==1)write_cmd(0xc0|x);for(i=0;i<16;i++){write_data(str[i]);if(p=='\0')break;}} */void aaa() interrupt 1{TH0=(65535-50000)/256;TL0=(65535-50000)%256;if(++kk==18){miao++;if(miao==10){if(miao1++==5){if(fen++==10){if(fen1++==5){if(shi++==10){if(shi1++==1){shi1=0;shi=0;}shi=0;}fen1=0;}fen=0;}miao1=0;}miao=0;}kk=0;}}void main(){canshu();//xianshi(0,0,p);//xianshi(0,1,p+16);EA=1;ET0=1;TMOD=0x01;TH0=(65535-50000)/256;//如果不准可对其进行修改,比如4000可能更准确TL0=(65535-50000)%256;TR0=1;while(1){write_cmd(0x80|1);write_data(dis2[shi]);write_cmd(0x80|2);write_data(dis2[shi1]);write_cmd(0x80|3);write_data(p[0]);write_cmd(0x80|4);write_data(dis2[fen1]);write_cmd(0x80|5);write_data(dis2[fen]);write_cmd(0x80|6);write_data(p[0]);write_cmd(0x80|7);write_data(dis2[miao]);write_cmd(0x80|8);write_data(dis2[miao1]);}}。
51单片机数字频率计设计
摘要摘要数字频率计是一种基本的测量仪器。
它被广泛应用于航天、电子、测控等领域,还被应用在计算机及各种数学仪表中。
一般采用的是十进制数字,显示被测信号频率。
基本功能是测量正弦信号,方波信号以及其他各种单位时间内变坏的物理量。
由于其使用十进制数显示,测量迅速精确,显示直观,所以经常被用来使用。
本文主要介绍数字频率计的设计和调试,本作品是基于STC89C52单片机作为平台,基本原理是通过STC89C52单片机进行频率的采集和分析工作,在通过程序使其显示在LCD1602的液晶显示屏上,通过液晶显示屏,让使用者能够直观的看到当前的输入频率是多少。
由于STC89C52单片机只能处理数字信号因此系统需要先把信号放大成方波信号,再通过施密特触发器整形方波,又由于单片机能处理的频率有限,所以这次我们先用74HC390芯片对输入的信号进行了分频,使其降低了100倍,才送去给单片机处理,如果频率高于200KHZ的时候就计算分频后的频率,得到数据再换算成真实的频率。
关键字:单片机,LCD显示屏,分频器ABSTRACTABSTRACTDigital frequency meter is a basic measuring instruments. It is widely used in aerospace, electronics, measurement and control, etc., it is also used in computer and mathematical instrument. Generally using a decimal number, it displays the signal frequency. The basic function is to measure sinusoidal signal, square-wave signal, and various other units within the time deterioration of physical quantities. Due to the use of decimal display, rapid measurement precision, intuitive display, it is often used to use.This paper describes a digital frequency meter design and debugging, the present work is based STC89C52 microcontroller as a platform, the basic principle is the collection and analysis of the operating frequency through STC89C52 microcontroller, through the program to display on the LCD1602 LCD screen, the LCD display, allowing users to visually see the current input frequency is.Since only single-chip digital signal processing STC89C52 so the system need to put a square wave signal is amplified signal, and then through the Schmitt trigger shaping a square wave, but also due to the limited frequency microcontroll er can handle, so this time we will start with 74HC390 chip input The signal is a frequency, it reduces by 100 times, was sent to the microcontroller processing frequency if the frequency is higher than the frequency after 200KHZ when it calculated to obtain the data and then converted into real frequency.Keywords:microcontroller, LCD display, divider.目录第1章整体框架 (1)1.1课题任务 (1)1.2课题要求 (1)1.3研究意义 (1)第2章设计方案 (3)2.1硬件部分 (3)2.1.1主控模块 (3)2.1.2 LCD液晶显示器模块 (7)2.1.3主控模块的选型和论证 (9)2.1.4显示模块的选型和论证 (9)2.1.5放大电路的选型和论证 (10)2.2软件部分 (10)2.2.1软件工具介绍 (10)2.2.2模块流程图 (11)第3章实现功能 (13)3.1实现功能描述 (13)3.2电路设计 (13)3.2.1主控模块 (14)3.2.2 LCD液晶显示器 (14)3.2.3三极管放大电路设计 (15)3.2.4整形模块设计 (16)3.2.5分频模块设计 (17)3.3软件设计 (19)3.3.2系统软件总体设计 (20)第4章调试与实现 (22)4.1调试中遇到的重点与难点 (22)4.1.1硬件调试 (22)4.1.2软件调试 (22)4.2解决方案 (22)4.3实现展示(附上仿真图或实物照片) (23)第5章总结 (25)参考文献 (26)致谢 (27)附录 (28)第1章整体框架第1章整体框架1.1课题任务本系统设计制作一个基于单片机的频率计。
51单片机电子表LCD1602显示_时间可调
/*功能:52单片机定时器0电子表LCD1602显示可对时间进行调节作者:燕山大学里仁学院09应电四班杨立业欢迎您的建议、指点和更多交流QQ:1024549573晶振:12M*/#include<reg52.h>#define uint unsigned intsbit lcden=P3^4; //液晶的使能端sbit rs=P3^5; //液晶的数据指令控制端sbit wr=P3^6; //液晶的读写端sbit rd=P3^7; //按键的一个线选使按键共阴极sbit fc=P3^0; //功能键确定时间调整的位置sbit jia=P3^1; //加1sbit jian=P3^2;//减1unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};unsigned char code table1[]=" 00:00:00 ";uint num,num1,i,shi,ge,shu;long int hour,fen,miao;void write_com(uint com);void write_date(uint date);void init1602();void init() ;void write_sf(uint add,uint sf);void delay(uint x);void keyscan();void main(){ init();init1602();write_com(0x80+0x40+3);for(num1=1;num1<8;num1++){ write_date(table1[num1]);delay(5);}while(1){ keyscan();}}void write_com(uint com)//1602 写指令{ rs=0;P0=com;lcden=0;delay(10);lcden=1;delay(10);lcden=0;}void write_date(uint date)//1602写数据{ rs=1;P0=date;lcden=0;delay(10);lcden=1;delay(10);lcden=0;}void init() //定时器初始化{ rd=0;TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void init1602()//1602初始化{ dula=0;wela=0;wr=0;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}void write_sf(uint add,uint sf)//显示时间{ uint shi,ge;shi=sf/10;ge=sf%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void time0() interrupt 1 //定时器0中断{ TH0=(65536-50000)/256;TL0=(65536-50000)%256;num++;if(num==20){num=0;miao++;if(miao==60){ miao=0;fen++;if(fen==60){ fen=0;hour++;if(hour==24)hour=0;write_sf(4,hour);}write_sf(7,fen);}write_sf(10,miao);}}void delay(uint x)//ms级延时{ uint i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}void keyscan()//按键扫描{ if(fc==0) //功能键选择时间调节加减的位置{ delay(5);if(fc==0){ while(!fc);shu++;if(shu==4)shu=0;switch(shu){ case 0:TR0=1;write_com(0x0c);break;case 1:TR0=0;write_com(0x80+0x40+11);write_com(0x0f);break;case 2:write_com(0x80+0x40+8);write_com(0x0f);break;case 3:write_com(0x80+0x40+5);write_com(0x0f);break;}}}if(jia==0) //时或分或秒的加一{ delay(5);if(jia==0){ while(!jia);switch(shu){ case 1: miao++;if(miao==60)miao=0;write_sf(10,miao);write_com(0x80+0x40+11);break;case 2: fen++;if(fen==60)fen=0;write_sf(7,fen);write_com(0x80+0x40+8);break;case 3: hour++;if(hour==24)hour=0;write_sf(4,hour);write_com(0x80+0x40+5);break;}}}if(jian==0) //时或分或秒的减一{ delay(8);if(jian==0){ while(!jian);switch(shu){ case 1: --miao;if(miao==-1)miao=59;write_sf(10,miao);write_com(0x80+0x40+11);break;case 2: fen--;if(fen==-1)fen=59;write_sf(7,fen);write_com(0x80+0x40+8);break;case 3: hour--;if(hour==-1)hour=23;write_sf(4,hour);write_com(0x80+0x40+5);break;}}}}。
数字频率计(51单片机)
数字频率计(51单片机)数字频率计(51单片机)数字频率计(Digital Frequency Counter)是一种常用的电子测量仪器,可用于测量信号的频率。
在本文中,我们将介绍如何使用51单片机实现一个简单的数字频率计。
一、原理简介数字频率计的基本原理是通过计算信号波形周期内的脉冲数来确定频率。
在实际应用中,我们通常使用51单片机作为微控制器,通过计数器和定时器模块来实现频率计算。
二、硬件设计1.信号输入首先,我们需要将待测信号输入到频率计中。
可以使用一个输入接口电路,将信号连接到51单片机的IO口上。
2.计时模块我们需要使用51单片机的定时器/计数器来进行计时操作。
在这里,我们选择使用定时器0来进行计数,同时可以利用定时器1来进行溢出次数的计数,以扩展计数范围。
3.显示模块为了显示测量结果,我们可以使用数码管、LCD液晶显示屏等显示模块。
通过将结果以可视化的方式呈现,方便用户进行观察和读数。
三、软件设计1.定时器配置首先,我们需要对定时器进行配置,以确定计时器的计数间隔。
通过设置定时器的工作模式、计数范围和时钟频率等参数,可以控制定时器的计数精度和溢出时间。
2.中断服务程序当定时器溢出时,会触发中断,通过编写中断服务程序,实现对计数器的相应操作,例如将计数值累加,记录溢出次数等。
3.数字频率计算根据计数器的值和溢出次数,我们可以计算出信号的频率。
通过简单的公式计算,即可得到测量结果。
四、实验步骤1.搭建硬件电路,将待测信号连接到51单片机的IO口上,并连接显示模块。
2.根据硬件设计要求,配置定时器的工作模式和计数范围。
3.编写中断服务程序,实现对计数器的相应操作。
4.编写主程序,实现数字频率计算和显示。
5.下载程序到51单片机,进行测试。
五、实验结果与分析通过实验,我们可以得到信号的频率测量结果,并将结果以数码管或LCD屏幕的形式进行显示。
通过对比实际频率和测量频率,可以评估数字频率计的准确性和稳定性。
51单片机 频率计 1602
电子产品设计与开发结课论文题目:其于51单片机的频率计设计与仿真班级:电子1104班姓名:陈** (组员)学号:03 电话:1376******成员:曾* (组长)学号:29 电话:13726****** 成员:孙* (组员)学号:21 电话:137*******目录一、需求分析二、方案设计1设计基本原理 (4)1.1测量频率的原理 (4)1.2系统设计框图 (4)三、软件设计 (5)1资源分配表 (5)2程序流程框图 (6)四、系统硬件线路设计图 (7)1 单片机最小系统设计 (7)2 液晶LCD1602显示电路 (8)3 频率测量电路 (11)五.系统仿真、测试结果及性能分析 (12)1系统仿真、测试结果 (12)2性能分析 (13)六、心得与体会 (14)七、参考文献 (14)摘要本设计提出了一种基于AT89C51单片机开发的数字频率测量仪的设计。
系统以单片机AT89C51为核心,构成完备的测量系统。
可以对信号进行频率的精确测量,测频在1Hz至10kHZ。
采用液晶LCD1602显示被测信号的频率。
与传统的电路系统相比,其有处理速度快、稳定性高、性价比高、硬件结构简单的优点。
关键词:单片机;低频;绝对误差一、需求分析频率测量在科技研究和实际应用中的作用日益重要。
传统的频率计通采用组合电路和时序电路等大量的硬件电路构成,产品不但体积较大,运行速度慢,而且测量低频信号时不宜直接使用。
频率信号抗干扰性强、易于传输,可以获得较高的测量精度。
同时,频率测量方法的优化也越来越受到重视.并采用AT89C51 单片机和相关硬软件实现。
MCS—51系列单片机具有体积小,功能强,性能价格比较高等特点,因此被广泛应用于工业控制和智能化仪器,仪表等领域。
我们研制的频率计以89c51单片机为核心,具有性能优良,精度高,可靠性好等特点。
二、设计方案此次课程设计采用间接测量法来测量。
要用到GATE信号,GATE=1时,TR0=1,INTO=1才能启动计数器,而计数器0是通过外部中断INTO的下降沿开始触发的,计时器从0开始计时,计数器只能测高电平,因此测得的时间为半个周期。
基于89C51的等精度频率计LCD1602显示
《嵌入式系统设计与应用》课程设计报告论文题目:等精度频率计的设计学院(系):电子信息与自动化学院班级:104070301学生姓名:吴知忠学号14指导教师:时间:从2007年7 月 2 日到2007年7 月8 日等精度频率计的设计一摘要:本设计是基于MCS-51单片机的等精度频率计。
输入信号为峰峰值5v的正弦信号,频率测量范围10HZ~100MHZ ,频率测量精度为0.1%。
采用1602液晶显示器显示测量结果。
信号源由PROTEUS 的虚拟信号发生器产生。
二关键词:频率计等精度单片机分频三设计原理与总体方案:测量一个信号的频率有两种方法:第一种是计数法,用基准信号去测量被测信号的高电平持续的时间,然后转换成被测信号的频率。
第二种是计时法,计算在基准信号高电平期间通过的被测信号个数。
根据设计要求测量10HZ~100MHZ的正弦信号,首先要将正弦信号通过过零比较转换成方波信号,然后变成测量方波信号。
如果用第一种方法,当信号频率超过1KHZ的时候测量精度将超出测量极度要求,所以当被测信号的频率高于1KHZ的时候需要将被测信号进行分频处理。
如果被测信号频率很高需要将被测信号进行多次分频直到达到设计的精度要求。
根据设计要求用单片机的内部T0产生基准信号,由INTO输入被测信号,通过定时方式计算被测信号的高电平持续时间。
通过单片机计算得出结果,最后有1062液晶显示器显示测量结果。
等精度频率计的系统设计框架如下图1所示。
图1 等精度频率计系统设计框图四硬件设计:硬件电路主要分为信号转换电路、分频电路、数据选择电路、单片机系统和显示电路五部分。
其总体电路图如图2所示。
图2 总体电路图4.1 电平转换电路:要将正弦信号转换成方波信号可以用过零比较电路实现。
正弦信号通过LM833N与零电平比较,电压大于零的时候输出LM833N的正电源+5V,电压小于零的时候输出负电源0V。
具体电路如图3所示。
图3信号转换电路4.2 分频电路:分频电路采用十进制的计数器74HC4017来分频,当被测信号脉冲个数达到10个时74HC4017产生溢出,C0端输出频率为输入频率的1/10,达到十分频的作用。
基于51单片机的数字频率计
基于51单片机的数字频率计作者:刘祥静柴欣君白皓贺程梅许圣儒来源:《科学导报·学术》2020年第16期摘 ;要:本应用系统设计的目的是通过在“单片机原理及应用”课堂上学习的知识,以及查阅资料,培养一种自学的能力。
并且引导一种创新的思维,把学到的知识应用到日常生活当中。
在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。
全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。
1.1数字频率计概述数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。
它是一种用十进制数字显示被测信号频率的数字测量仪器。
它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。
在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。
本数字频率计将采用定时、计数的方法测量频率,采用一个1602A LCD显示器动态显示6位数。
测量范围从1Hz—10kHz的正弦波、方波、三角波,时基宽度为1us,10us,100us,1ms。
用单片机实现自动测量功能。
基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。
它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
1.2频率测量仪的设计思路与频率的计算频率测量仪的设计思路主要是:对信号分频,测量一个或几个被测量信号周期中已知标准频率信号的周期个数,进而测量出该信号频率的大小,其原理如右图1所示。
若被测量信号的周期为,分频数m1,分频后信号的周期为T,则:T=m1Tx。
由图可知:T=NTo(注:To为标准信号的周期,所以T为分频后信号的周期,则可以算出被测量信号的频率f。
)由于单片机系统的标准频率比较稳定,而是系统标准信号频率的误差,通常情况下很小;而系统的量化误差小于1,所以由式T=NTo可知,频率测量的误差主要取决于N值的大小,N 值越大,误差越小,测量的精度越高。
51单片机1602液晶显示频率计之欧阳语创编
摘要在电子领域内,频率是一种最基本的参数,并与其他许多电参量的测量方案和测量结果都有着十分密切的关系。
由于频率信号抗干扰能力强、易于传输,可以获得较高的测量精度。
因此,频率的测量就显得尤为重要,测频方法的研究越来越受到重视。
频率计作为测量仪器的一种,常称为电子计数器,它的基本功能是测量信号的频率和周期频率计的应用范围很广,它不仅应用于一般的简单仪器测量,而且还广泛应用于教学、科研、高精度仪器测量、工业控制等其它领域。
随着微电子技术和计算机技术的迅速发展,特别是单片机的出现和发展,使传统的电子侧量仪器在原理、功能、精度及自动化水平等方面都发生了巨大的变化,形成一种完全突破传统概念的新一代侧量仪器。
频率计广泛采用了高速集成电路和大规模集成电路,使仪器在小型化、耗电、可靠性等方面都发生了重大的变化。
目前,市场上有各种多功能、高精度、高频率的数字频率计,但价格不菲。
为适应实际工作的需要,本次设计给出了一种较小规模和单片机(AT89S52)相结合的频率计的设计方案,不但切实可行,而且体积小、保密性强、设计简单、成本低、精度高、可测频带宽,大大降低了设计成本和实现复杂度。
频率计的硬件电路是用Protel绘图软件绘制而成,软件部分的单片机控制程序,是以KeilC做为开发工具用C语言编写而成,而频率计的实现则是选用Ptotues仿真软件来进行模拟和测试。
关键词:单片机;AT89S52;频率计;C语言ABSTRACTIn the electronic field, frequency is a kind of most basic parameter, and all there are close relations in the measurement schemes of many other electric parameters and result of measuring. Because the signal anti-interference ability of frequency is strong, easy to transmit, can obtain higher measurement precision. So, the measurement of frequency seems particularly important, the research of the method is being paid attention to.TheFrequency meter, as one kind of the measuring instrument, often called the electronic counter, its basic function is that frequency and application of cycle Frequency meterof measuring the signal are in a very large range, it not only applies to general simple instrument measurement but also apply to other fields such as teaching, scientific research, high-accuracy instrument measuring, industrial control extensively. With the rapid development of microelectric technique and computer technology, especially appearance and development of the one-chip computer, the instruments have all changed enormously in such aspects as principle, function, precision and automatic level to enable the traditional electronic side amount, form a kind of side amount instrument of new generation that totally broke through the traditional concept. The Frequency meter has adopted the high-speed integrated circuit and large scale integrated circuit extensively, make the instrument change greatly in such aspects as miniaturize, power consumptive, dependability. At present, there are various digital Frequency meterof multi-function, high precision, high frequency on the market, but the price is high.In order to meet the need of the real work, design and provide one this time The design plan of Frequency metercombining with one-chip computer (AT89S52) on a small scale, not only feasible, and small, of good security, design simply, with low costs, the precision is high, can examine the bandwidth frequently, have reduced the design cost and realized complexity greatly. The hardware circuit of the Frequency meteris drawing with Protel mapping software, the one-chip computer control procedure of the software part, regarded KeilC as the developing instrument to write in C language, but the realization of theFrequency meter was to select to carry on imitating and test with Protues artificial software.Key Words:single chip computer; AT89S52; frequency meter; C language目录1 绪论11.1 课题的引入11.2 产生背景11.3 国内外研究现状21.4 单片机频率计设计的目的及意义22AT89S52单片机介绍及其发展概况42.1 单片机的介绍42.1.1 单片机概述42.1.2 单片机的发展52.1.3 单片机的特点及应用52.2AT89S52系列单片机62.2.1AT89系列单片机62.2.2AT89S52系列单片机的基本结构73 频率计总体方案设计103.1 频率计设计原理103.1.1 频率检测实现方法103.1.2 频率计测频原理113.2 设计思路及方法113.2.1 频率计方案概述123.2.2 频率计的量程自动切换124 系统的硬件设计144.1 时钟信号发生器144.2AT89S52 控制寄存器154.2.1AT89S52中断控制系统154.2.2AT89S52定时/计数器的控制174.3LCD1602显示电路184.3.1LCD1602的主要技术参数及接口说明194.3.2 控制器接口及时序194.3.3 频率计硬件电路整体设计205 系统的软件设计225.1Keil C简介225.2 频率计程序的建立过程235.3 软件功能模块设计275.3.1LCD初始化设置模块285.3.2 浮点数到ASCII码转换模块285.3.3 定时/计数器初始化模块295.3.4 定时器中断服务模块子程序296 系统的模拟及仿真316.1 Proteus ISIS简介316.1.1 Proteus ISIS的概况简介及特点316.1.2 Proteus ISIS的运行概况316.1.3 用Proteus 软件虚拟单片机实验的优点326.2 系统的模拟与仿真过程336.3 频率计系统仿真分析37结束语41致谢42参考文献431绪论1.1课题的引入在电子技术中,频率是一种计算单位时间内的信号变化的数值的仪器,是最基本的参数之一,由于频率信号抗干扰能力强、易于传输,可以获得较高的测量精度,并且与许多电参量的测量方案、测量结果都有十分密切的关系。
51单片机1602液晶显示频率计之欧阳索引创编
摘要欧阳家百(2021.03.07)在电子领域内,频率是一种最基本的参数,并与其他许多电参量的测量方案和测量结果都有着十分密切的关系。
由于频率信号抗干扰能力强、易于传输,可以获得较高的测量精度。
因此,频率的测量就显得尤为重要,测频方法的研究越来越受到重视。
频率计作为测量仪器的一种,常称为电子计数器,它的基本功能是测量信号的频率和周期频率计的应用范围很广,它不仅应用于一般的简单仪器测量,而且还广泛应用于教学、科研、高精度仪器测量、工业控制等其它领域。
随着微电子技术和计算机技术的迅速发展,特别是单片机的出现和发展,使传统的电子侧量仪器在原理、功能、精度及自动化水平等方面都发生了巨大的变化,形成一种完全突破传统概念的新一代侧量仪器。
频率计广泛采用了高速集成电路和大规模集成电路,使仪器在小型化、耗电、可靠性等方面都发生了重大的变化。
目前,市场上有各种多功能、高精度、高频率的数字频率计,但价格不菲。
为适应实际工作的需要,本次设计给出了一种较小规模和单片机(AT89S52)相结合的频率计的设计方案,不但切实可行,而且体积小、保密性强、设计简单、成本低、精度高、可测频带宽,大大降低了设计成本和实现复杂度。
频率计的硬件电路是用Protel 绘图软件绘制而成,软件部分的单片机控制程序,是以KeilC做为开发工具用C语言编写而成,而频率计的实现则是选用Ptotues仿真软件来进行模拟和测试。
关键词:单片机;AT89S52;频率计;C语言ABSTRACTIn the electronic field, frequency is a kind of most basic parameter, and all there are close relations in the measurement schemes of many other electric parameters and result of measuring. Because the signal anti-interference ability of frequency is strong, easy to transmit, can obtain higher measurement precision. So, themeasurement of frequency seems particularly important, the research of the method is being paid attention to.TheFrequency meter, as one kind of the measuring instrument, often called the electronic counter, its basic function is that frequency and application of cycle Frequency meterof measuring the signal are in a very large range, it not only applies to general simple instrument measurement but also apply to other fields such as teaching, scientific research, high-accuracy instrument measuring, industrial control extensively. With the rapid development of microelectric technique and computer technology, especially appearance and development of the one-chip computer, the instruments have all changed enormously in such aspects as principle, function, precision and automatic level to enable the traditional electronic side amount, form a kind of side amount instrument of new generation that totally broke through the traditional concept. The Frequency meter has adopted the high-speed integrated circuit and large scale integrated circuit extensively, make the instrument change greatly in such aspects as miniaturize, power consumptive, dependability. At present, there are various digital Frequency meterof multi-function, high precision, high frequency on the market, but the price is high.In order to meet the need of the real work, design and provide one this time The design plan of Frequency metercombining with one-chip computer (AT89S52) on a small scale, not only feasible, and small, of good security, design simply, with low costs, the precision is high, can examine the bandwidth frequently, have reduced the design cost and realized complexity greatly. The hardware circuit of the Frequency meteris drawing with Protel mapping software, the one-chip computer control procedure of the software part, regarded KeilC as the developing instrument to write in C language, but the realization of theFrequency meter was to select to carry on imitating and test with Protues artificial software.Key Words:single chip computer; AT89S52; frequency meter; C language目录1 绪论11.1 课题的引入11.2 产生背景11.3 国内外研究现状21.4 单片机频率计设计的目的及意义22AT89S52单片机介绍及其发展概况42.1 单片机的介绍42.1.1 单片机概述42.1.2 单片机的发展52.1.3 单片机的特点及应用52.2AT89S52系列单片机62.2.1AT89系列单片机62.2.2AT89S52系列单片机的基本结构73 频率计总体方案设计103.1 频率计设计原理103.1.1 频率检测实现方法103.1.2 频率计测频原理113.2 设计思路及方法113.2.1 频率计方案概述123.2.2 频率计的量程自动切换124 系统的硬件设计144.1 时钟信号发生器144.2AT89S52 控制寄存器154.2.1AT89S52中断控制系统154.2.2AT89S52定时/计数器的控制174.3LCD1602显示电路184.3.1LCD1602的主要技术参数及接口说明194.3.2 控制器接口及时序194.3.3 频率计硬件电路整体设计205 系统的软件设计225.1Keil C简介225.2 频率计程序的建立过程235.3 软件功能模块设计275.3.1LCD初始化设置模块285.3.2 浮点数到ASCII码转换模块285.3.3 定时/计数器初始化模块295.3.4 定时器中断服务模块子程序296 系统的模拟及仿真316.1 Proteus ISIS简介316.1.1 Proteus ISIS的概况简介及特点316.1.2 Proteus ISIS的运行概况316.1.3 用Proteus 软件虚拟单片机实验的优点326.2 系统的模拟与仿真过程336.3 频率计系统仿真分析37结束语41致谢42参考文献431绪论1.1课题的引入在电子技术中,频率是一种计算单位时间内的信号变化的数值的仪器,是最基本的参数之一,由于频率信号抗干扰能力强、易于传输,可以获得较高的测量精度,并且与许多电参量的测量方案、测量结果都有十分密切的关系。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机1602LCD显示数字频率计;硬件连接:1602lcd 显示000000hz 短接p1.4--p3.5则显示0000010hz;LCD1602显示在不增加外部计数硬件的情况下,本试验软件可测最高频率达到460KHz;工作原理:;1S 钟内对输入脉冲所计数的次数则为频率值。
;16位二进制加法计数器的最大计数值为65535。
;设置定时器0 工作在定时方式1,定时1S。
;设置定时器1 工作在计数方式1,对输入脉冲进行计数,溢出产生中断。
;将定时器1中断定义为优先。
在中断处理程序里对中断次数进行计数。
1S到后,;将中断次数和计数器里的计数值取出进行综合数据处理,处理后的数据送LCD1602显示? ;信号来源:;1、软件里对P1.4定时取反,形成输出脉冲,接到P3.5 可自测。
; 显示结果:P1.4 →P3.5 显示:000010 (Hz);如果有条件的话,可使用专用设备(信号发生器和频率计)进行校正。
;频率计的程序;包含:外部中断设置,中断服务程序,定时程序,定时服务程序;以及数据处理,显示,包括三位十进制数转化为四位BCD码,;------------------------------------------------------------BEEP BIT P3.7LCD_RS BIT P2.0LCD_RW BIT P2.1LCD_EN BIT P2.2LCD_X EQU 3FH ;LCD 地址变量TIMER_H EQU 30H ;定时器高位字节单元TIMER_L EQU 31H ;定时器低位字节单元TIMCOUNT EQU 32H ;时间中断数INT_G EQU 35H ;中断计数缓冲单元高地址INT_H EQU 34H ;中断计数缓冲单元中地址INT_L EQU 33H ;中断计数缓冲单元低地址T_S EQU 36H ;数据显示低位T_M EQU 37H ;数据显示中位T_H EQU 38H ;数据显示高位T_G EQU 39H ;数据显示最高位;----------------------------------------------------------ORG 0000HJMP MAIN ;主程序开始ORG 000BHJMP TIMER_INT ;定时器T0中断服务程序ORG 001BH ;定时器T1中断服务程序JMP TIMER1ORG 0030H;----------------------------------------------------------MAIN:MOV SP,#60H ;设置SP指针LCALL PRO_SET ;初始化CALL SET_LCDLCALL TIM_T0;-----------------------------------------------------------;LCD1602是慢速显示器件,故100MS显示一次。
;-----------------------------------------------------------MAIN1:MOV R5,40MAIN2:ACALL DELAY1 ;3msDJNZ R5,MAIN2ACALL SBIN_SBCDCALL CONVJMP MAIN1;------------------------------------------------------------;T1计数器中断服务子程序;计T1计数器溢出次数;------------------------------------------------------------TIMER1:INC 2AHRETI;------------------------------------------------------------;初始化程序;------------------------------------------------------------PRO_SET: MOV A,#00HMOV B,#00HMOV 2AH,AMOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV INT_H,#00HMOV INT_L,#00HMOV INT_G,#00HMOV T_S,#00HMOV T_H,#00HMOV T_G,#00HMOV TIMCOUNT,#00HMOV TIMER_H,#04CH ;定时50 MSMOV TIMER_L,#10H ;CLR BEEPSETB P3.5 ;P3.5端口置输入状态RET ;T1(TIMER1的外部输入脚);-----------------------------------------------------;LCD 初始化设置;-----------------------------------------------------SET_LCD:CLR LCD_ENCALL INIT_LCD ;初始化LCDCALL DELAY1MOV DPTR,#INFO1 ;指针指到显示信息1MOV A,#1 ;显示在第一行CALL LCD_SHOWMOV DPTR,#INFO2 ;指针指到显示信息2MOV A,#2 ;显示在第二行CALL LCD_SHOWRET;-----------------------------------------------------INFO1: DB " CYMOMETER ",0 ;LCD 第一行显示信息INFO2: DB "FREQ: HZ ",0 ;LCD 第二行显示信息;-----------------------------------------------------;LCD 接口初始化;8位I/O控制;-----------------------------------------------------INIT_LCD:MOV A,#38H ;双列显示,字形5*7点阵CALL WCOMCALL DELAY1MOV A,#38H ;双列显示,字形5*7点阵CALL WCOMCALL DELAY1MOV A,#38H ;双列显示,字形5*7点阵CALL WCOMCALL DELAY1MOV A,#0CH ;开显示,关光标,CALL WCOMCALL DELAY1MOV A,#01H ;清除LCD 显示屏CALL WCOMRET;----------------------------------------------------LCD_SHOW: ;在LCD的第一行或第二行显示信息字符CJNE A,#1,LINE2 ;判断是否为第一行LINE1: MOV A,#80H ;设置LCD 的第一行地址CALL WCOM ;写入命令CALL CLR_LINE ;清除该行字符数据MOV A,#80H ;设置LCD 的第一行地址CALL WCOM ;写入命令JMP FILLLINE2: MOV A,#0C0H ;设置LCD 的第二行地址CALL WCOM ;写入命令CALL CLR_LINE ;清除该行字符数据MOV A,#0C0H ;设置LCD 的第二行地址CALL WCOMFILL: CLR A ;填入字符MOVC A,@A+DPTR ;由消息区取出字符CJNE A,#0,LC1 ;判断是否为结束码RETLC1: CALL WDATA ;写入数据INC DPTR ;指针加1JMP FILL ;继续填入字符RET;---------------------------------------------------CLR_LINE: ;清除该行LCD 的字符MOV R0,#24CL1: MOV A,#’ ’CALL WDATADJNZ R0,CL1RET;-----------------------------------------------------; 写指令、数据使能子程序;-----------------------------------------------------ENABLE: ;写指令使能CLR LCD_RS ;RS=L,LCD_RW=L,D0-D7=指令码,E=高脉冲CLR LCD_RWSETB LCD_ENCALL DELAY0CLR LCD_ENRETENABLE1: ;写数据使能SETB LCD_RS ;RS=H,RW=L,D0-D7=数据,E=高脉冲SETB LCD_ENCALL DELAY0CLR LCD_ENRETDELAY0: MOV R7,#250 ;延时500微秒DJNZ R7,$RET;----------------------------------------------------;写入命令子程序;----------------------------------------------------WCOM: ;以8位控制方式将命令写至LCD MOV P0,A ;写入命令CALL ENABLERET;----------------------------------------------------;写入数据子程序;----------------------------------------------------WDATA: ;以8位控制方式将数据写至LCD MOV P0,A ;写入数据CALL ENABLE1RET;---------------------------------------------------;在LCD 第二行显示字符;A=ASC DATA, B=LINE X POS;---------------------------------------------------LCDP2: ;在LCD的第二行显示字符PUSH ACC ;MOV A,B ;设置显示地址ADD A,#0C0H ;设置LCD的第二行地址CALL WCOM ;写入命令POP ACC ;由堆栈取出ACALL WDATA ;写入数据RET;-------------------------------------------------------;ASCII 转换并在第二行显示数字子程序;-------------------------------------------------------CONV: ; MOV A,T_GMOV LCD_X,#6 ;设置位置; CALL SHOW_DIG2MOV A,T_H;INC LCD_X ;加载小时数据CALL SHOW_DIG2 ;显示数据MOV A,T_M ;加载分钟数据INC LCD_X ;设置位置CALL SHOW_DIG2 ;显示数据MOV A,T_S ;加载秒数数据INC LCD_X ;设置位置CALL SHOW_DIG2 ;显示数据RET;----------------------------------------------------SHOW_DIG2:MOV B,#16DIV ABADD A,#30HPUSH BMOV B,LCD_XCALL LCDP2POP BMOV A,BADD A,#30HINC LCD_XMOV B,LCD_XCALL LCDP2RET;-----------------------------------------------------DELAY1: ;延时3MSMOV R6,#15D2: MOV R7,#100DJNZ R7,$DJNZ R6,D2RET; ----------------- 定时器设置------------------------;设置定时器0工作在定时方式1,定时器1工作在计数方式1;---------------------------------------------------------TIM_T0: MOV TMOD,#0D1HMOV TH0,TIMER_H ;设置定时初值高位MOV TL0,TIMER_L ;设置定时初值低位MOV TH1,#00H ;清T1计数器MOV TL1,#00HMOV IE,#8AH ;开中断总允许,允许T0溢出中断SETB PT1SETB TR1SETB TR0 ;定时器开始工作RET;--------------------------------------------------------;定时器0中断服务程序;--------------------------------------------------------TIMER_INT:CLR TR0 ;关闭定时器MOV TL0,TIMER_L ;重新赋初值MOV TH0,TIMER_H ;INC TIMCOUNT ;定时1S,时间单位MOV A,TIMCOUNT ;查看数量值CPL P1.4 ;产生自测信号CJNE A,#20,T_END ;如果没有到1S返回CLR TR1 ;关闭计数器T1MOV TIMCOUNT,#00H ;到1S则清零MOV INT_L,TL1 ;取出计数值低位MOV INT_H,TH1 ;取出计数值高位MOV INT_G,2AH ;取出溢出计数值位MOV TH1,#00HMOV TL1,#00HMOV 2AH,#00HSETB TR1T_END: SETB TR0 ;重新开始定时操作RETI;---------------------------------------------------------------;三字节二进制整数转换成四字节BCD码子程序;二进制数从低位到高位分别存放在INT_L、INT_H、INT_G单元中;BCD码从低位到高位分别存放在T_S、T_M、T_H、T_G 单元中;---------------------------------------------------------------SBIN_SBCD:PUSH PSWSETB PSW.3 ;设置当前寄存器CLR PSW.4CLR A ;清累加器MOV T_G,AMOV T_H,A ;清除出口单元,准备转换MOV T_M,AMOV T_S,AMOV R5,INT_GMOV R7,INT_L ;设置二进制数起始地址MOV R6,INT_HMOV R2,#24CLR CHH1:MOV A,R7RLC AMOV R7,AMOV A,R6RLC AMOV R6,AMOV A,R5RLC AMOV R5,AMOV A,T_S ;得到低位数据ADDC A,T_S ;累加DA A ;十进制调整MOV T_S,A ;保存数据MOV A,T_M ;得到第二位数据ADDC A,T_M ;累加DA A ;十进制调整MOV T_M,A ;保存结果MOV A,T_H ;得到第三位ADDC A,T_H ;累加DA AMOV T_H,A ;保存MOV A,T_G ;得到第四位ADDC A,T_G ;累加;DA AMOV T_G,ADJNZ R2,HH1 ;POP PSWRET;----------------------------------------------------------------END ;告诉编译器本程序到此结束。