基于51单片机的单通道频率计1602显示

发布者:捡漏来了最新更新时间:2015-07-15 来源: 51hei关键字:51单片机  单通道频率计  1602显示 手机看文章 扫描二维码
随时随地手机看文章
/*内容:T0外部计数,T1计时1S,计算1S内外部脉冲个数,

并在1602液晶显示频率:单位时间内完成振动的次数*/
#include
#include
#include
#define uchar  unsigned char
#define CHECK_BUSY
sbit RS = P2^4;   //定义端口
sbit RW = P2^5;
sbit EN = P2^6;
bit OVERFLOWFLAG;
bit TIMERFLAG;
void DelayMs(uchar t)
{
int x,y;
for (x=t;x>0;x--)
  for(y=110;y>0;y--);
 

/*判忙函数*/
 bit LCD_Check_Busy(void)
 {
#ifdef CHECK_BUSY
 P0= 0xFF;
 RS=0;
 RW=1;
 EN=0;
 _nop_();
 EN=1;
 return (bit)(P0 & 0x80);
#else
 return 0;
#endif
 }
/*写入命令函数*/
 void write_Com(uchar com)
 { 
 while(LCD_Check_Busy()); //忙则等待
 RS=0;
 RW=0;
 EN=1;
 P0= com;
 _nop_();
 EN=0;
 }
/*写入数据函数*/
 void write_dat(uchar dat)
 {
 while(LCD_Check_Busy()); //忙则等待
 RS=1;
 RW=0;
 EN=1;
 P0= dat;
 _nop_();
 EN=0;
 }
/*清屏函数*/
 void LCD_Clear(void)
 {
 write_Com(0x01);
 DelayMs(5);
 }
/*写入字符函数*/[page]
void LCD_Write_Char(uchar x,uchar y,uchar dat)
 {    
 if (y == 0)
  {    
  write_Com(0x80 + x);    
  }   
 else
  {    
  write_Com(0xC0 + x);    
  }       
 write_dat( dat); 
 }
/*写入字符串函数*/
 void LCD_Write_String(uchar x,uchar y,uchar *s)
 {    
      
 while (*s)
  {    
 LCD_Write_Char(x,y,*s);    
 s ++;  x++;  
  }
 }
/*初始化函数*/
 void LCD_Init(void)
 { 
   write_Com(0x38);
   write_Com(0x06); /*显示光标移动设置*/
   DelayMs(5);
   write_Com(0x0C); /*显示开及光标设置*/
   write_Com(0x01);  /*显示清屏*/
 }
  
 
/*定时器0初始化子程序,程序用于计数*/
void Init_Timer0(void)
{
 TMOD |= 0x01 | 0x04;   //使用模式1,16位计数器,使用"|"符号可以在使用多个定时器时不受影响      
 TH0=0x00; //给定初值
 TL0=0x00;        
 EA=1; //总中断打开
 ET0=1; //定时器中断打开
 TR0=1;//定时器开关打开
}
/*定时器1初始化子程序,本程序用于定时*/
void Init_Timer1(void)
{
 TMOD |= 0x10;   //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
 TH1=(65536-10000)/256;       //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
 TL1=(65536-10000)%256;
 EA=1;            //总中断打开
 ET1=1;           //定时器中断打开
 TR1=1;           //定时器开关打开
}

//主程序开始,单片机教程网http://www.51hei.com/ 版主huqin作品
main()
{
 unsigned  long int a;
 char temp[16]; //定义字符显示缓冲数组
 Init_Timer0(); //初始化定时器0
 Init_Timer1(); //初始化定时器1
 LCD_Init();//初始化液晶屏
 DelayMs(10); //延时用于稳定,可以去掉
 LCD_Clear();//清屏
 LCD_Write_String(0,0,"HKY Hehuasheng");//写入第一行信息,主循环中不再更改此信息,所以在while之前写入
 while(1)
 {
  if(OVERFLOWFLAG)//检测溢出标志,如果溢出表明频率过高,显示溢出信息
    {
  OVERFLOWFLAG=0;//标志清零
     LCD_Write_String(0,1,"overflow >655KHz");
 }
  if(TIMERFLAG)      //定时100ms到,做数据处理
    {
  a=TL0+TH0*256;//读取计数值
  a=a*10; //扩大到实际值
     sprintf(temp,"FREQ:%08.0f Hz",(float)a);
     LCD_Write_String(0,1,temp);//显示到液晶第二行
  TR0=1; //2个定时器打开
  TR1=1;
  TH0=0; //保证计数器初值为0
  TL0=0;
  TIMERFLAG=0;//打开计时计数标志
 
 }
  }
}
/*定时器0中断子程序*/
void Timer0_isr(void) interrupt 1
{
 TH0=00;       //重新给定初值
 TL0=00;
 OVERFLOWFLAG=1;  //溢出标志
}
/*定时器1中断子程序*/
void Timer1_isr(void) interrupt 3
{
 static uchar i;
 TH1=(65536-10000)/256;   //重新赋值10ms
 TL1=(65536-10000)%256;
 i++;
 if(i==10) //100ms 计数时间单位,得出100ms脉冲个数 x10就是1s中脉冲个数,即为频率 Hz
   {
   i=0;
   TR0=0;  //2个定时器关闭
   TR1=0;
   TIMERFLAG=1;  //标志位清零
   TH1=(65536-10000)/256;  //重新赋值
   TL1=(65536-10000)%256;
   }
}

关键字:51单片机  单通道频率计  1602显示 引用地址:基于51单片机的单通道频率计1602显示

上一篇:STC89C52RC单片机8位流水灯程序
下一篇:基于51单片机的大功率直流有刷电机的PWM调速控制

推荐阅读最新更新时间:2024-03-16 14:25

单片机成长之路(51基础篇) - 010 51单片机的中断系统
一. 有关中断的概念 1. 仔细研什么叫中断?   举例:同学正在教室写作业,忽然被人叫出去,回来后,继续写作业这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。 二. 引入计算机中断的概念。   中断的作用:     处理断电保存,解决快速CPU与慢速外设之间的矛盾等。对MCS-51单片机的中断系统用一句话讲叫:“五源中断,两级管理”中断请求源(五源中断)   五个中断源: 外部中断0(/INT0)   0003H T0溢出中断   000BH 外部中断1(/INT1)   0013H T1溢出中断   001BH 串口中断 入口地址     0023H   有了中断请
[单片机]
单片机成长之路(51基础篇) - 010 <font color='red'>51单片机</font>的中断系统
基于51单片机矩阵键盘的简易计算器制作
1. 运算过程、符号公式实时显示在显示屏上(I2C 1602)。 2. 自带三角函数、开根号、平方运算。 3. 计算得出的结果可设置保存并用以下一次计算。 4. 所有运算结果精确到至少小数点后两位。 5. 运算结果可通过串口发送给上位机。 6. 当断电重启时,能存储并显示断电前正在计算的任务。(AT24C02) 硬件连接图如下: 单片机源程序如下: main.c #include REGX52.H #include Calculate.H #include Martixkey.h #include AT24C02.h #include stdio.h #i
[单片机]
基于<font color='red'>51单片机</font>矩阵键盘的简易计算器制作
51单片机:用ADC0832做模数转换,测量电压大小
问题要求 利用51单片机,外加一个ADC0832模数转换器,设计一个可以实时测量电压的电路。测量电压的范围是0-5V(允许误差),要求测出的电压用数码管实时显示,精确到小数点后两位。 代码编写: //---------------------------------------------------------- // 用ADC0832测量电压,并将测量值显示在数码管上 //---------------------------------------------------------- #include reg51.h #include intrins.h #define uchar unsigned char
[单片机]
<font color='red'>51单片机</font>:用ADC0832做模数转换,测量电压大小
51单片机学习感悟与51单片机上拉电阻心得
1、我从不说51是基础,如果我这么说,也请把这句话理解为微机原理是基础。 2、对51单片机的操作本质上就是对寄存器的操作,对其他单片机也是如此。库只是一个接口,方便使用者使用而已。 3、汇编语言在工作中很少用到,了解就好。 4、51单片机的P0口很特别。 5、C语言就是C语言,51单片机就是51单片机,算法就是算法,外围电路就是外围电路,传感器就是传感器,通信器件就是通信器件,电路图就是电路图,PCB图就是PCB图,仿真就是仿真。 当你以后再也不使用51了,C语言的知识还在,算法的知识还在,搭建单片机的最小系统的技能还在,传感器和通信器件的使用方法还在,还会画电路图和PCB图,当然也会仿真。 6、51单片机
[单片机]
89c51单片机控制两个步进电机正反转加减速
序有详细注释。 仿真原理图如下 单片机源程序如下: /******************************************************************************* * 实 验 名: 步进电机实验 * 使用的IO: 电机用P1口,键盘使用P2.0、P2.1、P2.2、P2.3、P2.4、P2.5 * 按键功能:K1;正转 K2;反转 K3;低速转动 K4;高速转动 K5:电机切换 K6;停止 * 实验效果: 按下K1键,顺时针转,按下K2键,逆时针转,按下K3键,低速,按下K4键,高速。 按下K5键,转动的电机停止,并切换到控制另一个电机 按下K6键,转动的电机停止
[单片机]
89c<font color='red'>51单片机</font>控制两个步进电机正反转加减速
基于MCS-51单片机的测控系统的软时钟设计的优化
  随着微电脑的广泛应用,以MCS-51单片机为核心的微机测控系统已随处可见。为满足用户要求,这些系统通常都具有数码显示时钟的功能。由于MCS-51内部包含2个定时计数器,将其中一个定时计数器用于软时钟设计的方法,可以大大节省硬件开销。本文提出了如何提高软时钟的定时精度,以及在软时钟存在的情况下,如何提高以MCS-51单片机为核心的测控系统的设计质量的方法。   一、 MCS-51单片机内部定时计数器的概述   MCS-51单片机内部包含2个定时计数器T0和T1,它们都是16位的加法计数器,既可用于定时,也可用于计数,在用于定时的情况下,计数脉冲由内部提供,因此计数速率固定为CPU振荡频率的1/12;在用于计数的情况下,计数脉
[单片机]
基于MCS-<font color='red'>51单片机</font>的测控系统的软时钟设计的优化
51单片机入门——蜂鸣器
1.什么是蜂鸣器 蜂鸣器从结构区分分别为压电式蜂鸣器和电磁式蜂鸣器。压电式为压电陶瓷片发音,电流比较小一些,电磁式蜂鸣器为线圈通电震动发音,体积比较小。 按照驱动方式分为有源蜂鸣器和无源蜂鸣器。这里的有源和无源不是指电源,而是振荡源。如下图,给了BUZZ引脚一个低电平,蜂鸣器就会直接响。而无源蜂鸣器内部是不带振荡源的,要让他响必须给 500Hz~4.5KHz 之间的脉冲频率信号来驱动它才会响。有源蜂鸣器往往比无源蜂鸣器贵一些,因为里边多了振荡电路,驱动发音也简单,靠电平就可以驱动,而无源蜂鸣器价格比较便宜,此外无源蜂鸣器声音频率可以控制,而音阶与频率又有确定的对应关系,因此就可以做出来 “do re mi fa sol la
[单片机]
<font color='red'>51单片机</font>入门——蜂鸣器
基于51单片机制作的六位数显多路定时电子钟
这里介绍的电子钟,电路可称得上极简,它仅使用单片的20引脚单片机完成电子钟的全部功能,而笔者见到的其它设计方案均采用二片以上的多片IC实现。  一片20引脚的单片机STC2032(引脚排列与AT89C2051完全相同)为电子钟主体,其显示笔画数据从P1口分时输出,P3口则输出对应的六位选通信号。由于LED数码管点亮时耗电较大,故不能使用AT89C2051单片来完成,但是可以可以用STC89C2032来完成。另外,本站制作时用超高亮的发光二极管代替昂贵的大数码管,成本低,效果独特。 本电子钟设计有三个轻触式按键,这里我们分别命名为:模式设定键K1、加调整键K2、减调整键K3。由于STC89C2032内部已经集成有复位电阻,所以,
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved