基于51单片机的数字频率计

发布者:玄幻剑客最新更新时间:2020-08-07 来源: 51hei关键字:51单片机  数字频率计 手机看文章 扫描二维码
随时随地手机看文章

计的频率计范围能够达到1HZ-1MHZ(实际上51单片机达不到这个范围,不要在实验环境下进行),这个是课设来着,用Proteus仿真实现的,给有需要的同学参考一下

单片机源码:

#include

#include

#include

typedef unsigned char uchar;

typedef unsigned int  uint;

sbit RS=P2^5;

sbit RW=P2^6;

sbit E=P2^7;

sbit CLK=P2^0;

sbit DO=P2^1;

sbit DI=P2^1;

sbit CS=P2^2;

sbit CLR=P3^0;

sbit GATE=P3^1;

sbit K1=P3^7;

uint  num=0;

uint  c=0;

float d=0;

uchar e=1,f=1;

unsigned long int aaa=0,bbb=0;

uchar LCD_wait()//LCD1602内部等待函数

{

        RS=0;

        RW=1;        

        _nop_();

        E=1;

        _nop_();

        E=0;

        return P0;               

}

void LCD_write(bit aa,uchar bb)//向LCD写入命令或数据

{

        E=0;

        RS=aa;

        RW=0;               

        _nop_();

        P0=bb;        

        _nop_();//注意顺序

        E=1;               

        _nop_();//注意顺序

        E=0;               

        _nop_();

        LCD_wait();//LCD1602内部等待函数        

}

void LCD_display(uchar temp)

{

        LCD_write(0,0x08|temp);        

}

void LCD_input(uchar cc)

{

        LCD_write(0,0x04|cc);

}

void LCD_init()//初始化LCD

{

        //RW=0;

        LCD_write(0,0x38);//8位数据端口,2行显示,5*7点阵

        LCD_write(0,0x38);

        

        LCD_write(0,0x0C);//开启显示, 无光标

        LCD_write(0,0x01);//清屏

        LCD_write(0,0x0C);//AC递增,画面不动

        

}

void LCD_sfj1(uchar x,uchar y)

{

        if(y==0)

                LCD_write(0,0x80|x);

        if(y==1)

                LCD_write(0,0x80|(x-0x40));

}

void LCD_print(uchar *p)

{

        while(*p!='')

        {

                LCD_write(1,*p);

                p++;

        }

}

void delay1(uchar x)//ms延时子函数

{                    

    uchar i;

    for(i=0;i}

uchar start(bit temp) //把模拟电压值转换成8位二进制数并返回,dat为通道选择。

{         

        uchar i,aa=0;

    CS=0;

    DO=0;//片选,DO为高阻态

    delay1(10);

    CLK=0;

    delay1(2);

    DI=1;         

    CLK=1;         

    delay1(2);//第一个脉冲,起始位

    CLK=0;                                          

    delay1(2);                                          

    DI=1;                                          

    CLK=1;                                          

    delay1(2);//第二个脉冲,DI=1表示双通道单极性输入         

    CLK=0;                                                                                 

    delay1(2);                                                                                 

    DI=temp;        /*******************************/                                                                                         

    CLK=1;

    delay1(2);//第三个脉冲,DI=1表示选择通道1(CH2)         

    DI=0;                                                                                   

    DO=1;//DI转为高阻态,DO脱离高阻态为输出数据作准备

    CLK=1;                                                                                                                                                                                    

    delay1(2);                                                                           

    CLK=0;                                                                           

    delay1(2);//经实验,这里加一个脉冲AD便能正确读出数据,

        //不加的话读出的数据少一位(最低位d0读不出)                  

        for(i=0;i<8;i++)                                                                          

    {

            CLK=1;

               delay1(2);

               CLK=0;

               delay1(2);

               aa=(aa<<1)|DO;//在每个脉冲的下降沿DO输出一位数据,最终ch为8位二进制数

        }

    CS=1;//取消片选,一个转换周期结束

    return(aa);//把转换结果返回

}

uint fenjie(bit cc)

{

        uchar dd;

        uint  ee;

        dd=start(cc);

        ee=(uint)dd*100/51; //51是由5/255的倒数得来的,5是5V,255是8位AD。

        return(ee);

}        

void delay2(uint z)//按键消抖

{

        uint x;

        uchar y;

        for(x=0;x                for(y=0;y<110;y++);

}

void delay3()//1s延时子函数            

{

        uchar h,i,j,k;

        for(h=5;h>0;h--)

                for(i=4;i>0;i--)

                        for(j=116;j>0;j--)

                                for(k=214;k>0;k--);

}



关键字:51单片机  数字频率计 引用地址:基于51单片机的数字频率计

上一篇:ADXL345倾角传感器单片机程序
下一篇:基于SC95F8616的中文菜单MP3点歌器 (3)

推荐阅读最新更新时间:2024-11-13 12:36

51单片机串口打印不管是中文还是英文都是乱码的问题
讲道理都tm大三暑假了还搞51单片机而且关键是还遇到了一个问题解决了一天才解决出来真的是很丢人了。 不过我会珍惜这个机会的,毕竟这有可能是我辈子最后一次跟着老师搞这个破玩意了。 好了不废话了 收! 昨天遇到的问题是单片机用串口给电脑发数据,本人用串口助手查看时乱码了,发送的数据是英文和数字,没有存在中文,马上进行问题排除: 解决方案一:printf的原因吗? 代码里用piintf函数来进行串口发送数据,可能printf只适合于stm32不能适用于51,但是仔细一想又不对啊,我tm大三上的单片机大作业就是用printf函数进行串口发送数据的啊,怎么当时就可以啊。于是我把当时的代码拿过来修改,还是不行。 解决方
[单片机]
51单片机基于 Proteus 制作 10 以内加减的计算器
51 单片机,本质上是微控制器,以逻辑运算见长。 用它来设计计算器 ? 不知道谁想出来的这样的题目,思路明显就是跑偏了,呵呵 特别是后一个的题目,不仅要求能加减乘除,竟然还要求选用数码管来显示。 如果是选用 LCD1602 液晶屏来显示,勉强还算对路。 数码管,只能显示出来减号,让它显示加号、乘号、除号,都是不可能的。 一些网友为这个题目提供了答案,可是没有一个像样的,呵呵 提问者也明显不满意,又反复提问了好几次。 前一个设计计算器的题目,提问者提供了部分程序和电路,要求如下: 老师要求只要3个数码管,完成10以内加减。 第一个数码管表示第1个数字, 第二个数码管表示符号(+或-,用A-F任意表示), 第三个数码管
[单片机]
<font color='red'>51单片机</font>基于 Proteus 制作 10 以内加减的计算器
51单片机定时器计数器原理以及应用(方波、pwm、脉冲计数、高电平脉宽测量)
1.TMOD定时器/计数器工作方式 寄存器 GATE=1时,定时器由INT和TR共同控制,用于测量脉宽; 2.TCON定时器/计数器控制寄存器 3. 2.应用示例: 2.1T0/T1控制外部引脚输出方波 1.设计思路:设置定时计数器工作在定时工作方式,在中断服务子程序中将需要输出方波信号的I/O引脚上的电平翻转即可。 2.仿真电路: 3.代码 2.2PWM波形输出 1.设计思路:51 单片机 可以使用一个定时计数器来控制产生波形的频率,用另外一个定时计数器来控制波形的占空波。 2.仿真原理图同1. 3.具体代码: 3.脉冲计数 1.设计思路:使用T0/T1进行计数时,当外部引脚上检查到一个脉冲
[单片机]
<font color='red'>51单片机</font>定时器计数器原理以及应用(方波、pwm、脉冲计数、高电平脉宽测量)
基于MCS-51单片机的LED点阵屏实现礼花功能
大家可曾记得礼花绽放那一刻的精彩?小时候每当看礼花绽放时,总希望自己能将那最美的那一霎那永远留下。终于,今天我的梦想实现了。通过自己的板板,只要随手编程几下就搞定啦! 在给大家展示效果图之前,我们首先得对 LED 点阵屏做一番介绍!8*8 LED点阵等效 电路 如图1所示。通过分析,我们不难得知:只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如:若想使左上角LED点亮,则Y0=1,X0=0,则会形成压降点亮左上角的LED。这里的水平方向由P2控制,垂直方向由P0控制。   图1 8*8 LED点阵等效电路 本次在LED点阵屏上实现显示礼花的功能原理接口图如图2所示,效果图如图3所示。通过该LED点阵还可以显示静态或
[单片机]
基于MCS-<font color='red'>51单片机</font>的LED点阵屏实现礼花功能
51单片机双机通讯
//两个单片机通讯,使用中断法 #include reg51.h #define uchar unsigned char #define uint unsigned int #define key_port P1 #define dis_port P2 void main (void) { uchar key_in=0xff; SCON=0x50; //MODER1,REN=1; TMOD=0x20; //TIMER1 MODER2; TH1=0xf3; //bode=2400 TL1=0xf3; ET1=1; TR1=1; EA=1; ES=1; while(1) { if (key_in
[单片机]
学习笔记之-51单片机最小系统搭建
单片机最小系统,或者称为单片机最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路. 一.先说一下51单片机的引脚: 总线型 DIP40 引脚封装 电源及时钟引脚, 4 个 VCC:电源接入引脚 VSS:接地引脚 XTAL1:晶体振荡器接入的一个引脚 XTAL2:晶体振荡器接入的另外一个引脚 控制线引脚, 4 个 RST/VPD:复位信号输入引脚/备用电源输入引脚;ALE/PROG:地址锁存允许信号输出引脚/编程脉冲输入引脚 EA/VPP:内外存储器选择引脚,当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外
[单片机]
学习笔记之-<font color='red'>51单片机</font>最小系统搭建
51单片机的can总线通讯程序
#i nclude //单片机头文件 #i nclude //SJA存储器定义头文件 #i nclude //SJA子程序文件 /*************************函数声明*******************************************/ void Init_T0(void); //初始化单片机T0 void Sja_1000_Init(void); //初始化SJA //*******************************************
[单片机]
8051单片机中断控制详解
IE寄存器中断的开放和禁止标志 (1)  IE.7 EA:总中断允许控制位。EA = 1,开放所有中断,各中断源的允许和禁止可通过相应的中断允许位单独加以控制;EA = 0,禁止所有中断。 (2) IE.4 ES:串行口中断允许位。ES = 1,允许串行口中断;ES = 0,禁止串行口中断。 (3) IE.3 ET1:定时器1中断允许位。ET1 = 1,允许定时器1中断;ET1 = 0,禁止定时器1中断。 (4) IE.2 EX1:外部中断1()中断允许位。EX1 = 1,允许外部中断1中断;EX1 = 0,禁止外部中断1中断。 (5)  IE.1 ET0:定时器0中断允许位。ET0 = 1,允许定时器0中断;ET0 =
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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