精华内容
下载资源
问答
  • 利用AT89S51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数计数的频率结果通过8位动态数码管显示出来。要求能够对0-250KHZ的信号频率进行准确计数计数误差不超过±1HZ。1. 电路原理图图4.31....

    利用AT89S51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。要求能够对0-250KHZ的信号频率进行准确计数,计数误差不超过±1HZ。

    1. 电路原理图

    8543364e2ca07c6163055a02f3790a3c.png

    图4.31.1

    2. 系统板上硬件连线

    (1)。 把“单片机系统”区域中的P0.0-P0.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。

    (2)。 把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。

    (3)。 把“单片机系统”区域中的P3.4(T0)端子用导线连接到“频率产生器”区域中的WAVE端子上。

    3. 程序设计内容

    (1)。 定时/计数器T0和T1的工作方式设置,由图可知,T0是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的T0,最大计数值为fOSC/24,由于fOSC=12MHz,因此:T0的最大计数频率为250KHz。对于频率的概念就是在一秒只数脉冲的个数,即为频率值。所以T1工作在定时状态下,每定时1秒中到,就停止T0的计数,而从T0的计数单元中读取计数的数值,然后进行数据处理。送到数码管显示出来。

    (2)。 T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20次,即可完成1秒的定时功能。

    4. C语言源程序

    #include

    unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

    unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

    0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

    unsigned char dispbuf[8]={0,0,0,0,0,0,10,10};

    unsigned char temp[8];

    unsigned char dispcount;

    unsigned char T0count;

    unsigned char timecount;

    bit flag;

    unsigned long x;

    void main(void)

    {

    unsigned char i;

    TMOD=0x15;

    TH0=0;

    TL0=0;

    TH1=(65536-4000)/256;

    TL1=(65536-4000)%256;

    TR1=1;

    TR0=1;

    ET0=1;

    ET1=1;

    EA=1;

    while(1)

    {

    if(flag==1)

    {

    flag=0;

    x=T0count*65536+TH0*256+TL0;

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

    {

    temp=0;

    }

    i=0;

    while(x/10)

    {

    temp=x%10;

    x=x/10;

    i++;

    }

    temp=x;

    for(i=0;i《6;i++)

    {

    dispbuf=temp;

    }

    TImecount=0;

    T0count=0;

    TH0=0;

    TL0=0;

    TR0=1;

    }

    }

    }

    void t0(void) interrupt 1 using 0

    {

    T0count++;

    }

    void t1(void) interrupt 3 using 0

    {

    TH1=(65536-4000)/256;

    TL1=(65536-4000)%256;

    TImecount++;

    if(TImecount==250)

    {

    TR0=0;

    TImecount=0;

    flag=1;

    }

    P0=dispcode[dispbuf[dispcount]];

    P2=dispbit[dispcount];

    dispcount++;

    if(dispcount==8)

    {

    dispcount=0;

    }

    }

    展开全文
  • /********************************************************************...假设转盘只有一个磁钢,转速低于10r/S则显示0,高于655360r/s则计数溢出(一般应用不会超出此限)***************************************...

    /*********************************************************************

    功能:霍尔传感器测速,霍尔传感器的信号输出脚接T1(P3.5)引脚

    测量范围;假设转盘只有一个磁钢,转速低于10r/S则显示0,高于655360r/s则计数溢出(一般应用不会超出此限)

    *******************************************************************/

    #include

    #define N 1//转盘上所安装的磁钢个数

    sbit DLed1=P2^0;//定义第一位数码管"位选"控制线的别名

    sbit DLed2=P2^1;//定义第二位数码管"位选"控制线的别名

    sbit DLed3=P2^2;

    sbit DLed4=P2^3;

    unsigned int speed=0;//最后的转速值

    unsigned int count=0;//在指定时间内记到的外部脉冲数

    unsigned char k=0;

    unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

    void disp(unsigned char x1,unsigned char x2,unsigned char x3,unsigned char x4);//子函数前向声明

    /*********************************

    函数名称:void delay1ms(unsigned int k)

    功能:延时子函数

    入口参数:延时时长

    返回值:无

    **********************************/

    void delay1ms(unsigned int k)

    {

    unsigned char n,m;

    for(m=0;m

    {for(n=0;n<115;n++);}

    }

    //===================主函数

    void main()

    {

    unsigned char n;

    //EA=0;

    TMOD=0x51;//0101 0001,T1纯软件启动,计数模式,工作方式1;T0纯软件启动,定时模式,工作方式1

    TH0=0x3c;//12M晶振,定时50ms

    TL0=0xb0;

    ET0=1;//开启定时0中断

    EA=1;//开启总中断

    TR0=1;//同时启动定时与计数

    TR1=1;

    while(1)

    {

    speed=count/N;//结果为:x转/s,注意防止其越界

    for(n=20;n>0;n--)//稳定显示一阵

    {

    disp(speed/1000,speed%1000/100,speed%100/10,speed%10);

    }

    TR0=1;//再次启动定时和计数功能,为下一次的测量作准备

    TR1=1;

    }

    }

    /*********************************

    函数名称:

    功能:T0中断处理函数

    说明:定时时间到,则关闭定时器,取出计数值

    入口参数:

    返回值:

    **********************************/

    void int0_fun() interrupt 1

    {

    k++;

    TH0=0x3c;//重载定时器T0初值

    TL0=0xb0;

    if(k>=20)//100ms的定时时间到

    {

    TR0=0;

    TR1=0;

    count=TH1*256+TL1;

    TH1=0x00;//清除计数值

    TL1=0x00;

    k=0;  //清除标志变量

    }

    }

    /********************************

    功能:显示函数

    四位数码管的显示函数

    段选:P1

    位选:P20-P23

    注意:采用的共阳数码管

    ***************************/

    void disp(unsigned char x1,unsigned char x2,unsigned char x3,unsigned char x4)

    {

    DLed1=1;DLed2=0;DLed3=0;DLed4=0;//送位码,只让第一位数码管显示

    P1=tab[x1];//送段码

    delay1ms(10);//延时

    P1=0xff;//关闭

    //----扫描显示第二位数码管------

    DLed1=0;DLed2=1;DLed3=0;DLed4=0;

    P1=tab[x2];

    delay1ms(10);

    P1=0xff;

    //----扫描显示第三位数码管------

    ……………………

    …………限于本文篇幅 余下代码请从51黑下载附件…………

    展开全文
  • 1、 设计内容 ...用单片机实现对一路脉冲计数和显示的功能。硬件包括单片机最小系统、LED显示、控制按钮;软件实现检测到显示 2、 要求 计数范围0~2000; 脉冲输入有光电隔离整形, 有清零按钮
  • 51单片机脉冲信号的计数和LCD显示

    千次阅读 2020-10-14 19:36:00
    51单片机脉冲信号的计数和LCD显示 设计目标和思路 在个人剂量仪开发的过程中,从探头输出的核脉冲信号经过后期放大,成形,滤波以及甄别之后,成为一系列脉冲信号输出,这种脉冲信号由于衰变的随机性,并不是固定...

    51单片机脉冲信号的计数和LCD显示

    设计目标和思路

    在个人剂量仪开发的过程中,从探头输出的核脉冲信号经过后期放大,成形,滤波以及甄别之后,成为一系列脉冲信号输出,这种脉冲信号由于衰变的随机性,并不是固定频率的脉冲信号。我们本次设计就是针对这种脉冲进形脉冲信号的计数以及在LCD1602显示屏上面的显示。
    这是C语言的代码部分

    #include"reg51.h"	
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <intrins.h>
    #define uint8_t unsigned char	 //0-255
    #define uint16_t unsigned int	//0-65535
    #define uint32_t unsigned long 	   //0-4294967295
    #define uchar unsigned char
    #define u8 unsigned char
    #define u16 uint16_t
    #define uchar unsigned char 
    #define uint unsigned int 
    unsigned long millis = 0; //1MS¼ÆÊý
    
    sbit rs = P2^0; //LCD1602 RS
    sbit rw = P2^1;	//LCD1602 RW
    sbit en = P2^2;	//LCD1602 EN		 
    
    sbit Input1 = P3^2;   //定义P32为第一路脉冲输入
    uint8_t Input_1_Last_V = 0;
    uint16_t Input_1_Count = 0; 
    
    sbit Input2  = P3^3; //定义P33为第二路脉冲输入
    uint8_t Input_2_Last_V = 0;
    uint16_t Input_2_Count = 0;/
    
    sbit Key1 = P1^0;  //这个向下翻
    sbit Key2 = P1^1;	//向上翻按键
    #define display_Flag_Jishu_CH1_CH2 1   //
    #define display_Flag_Jishu_DY 2
    #define MIN_Display_flag display_Flag_Jishu_CH1_CH2
    #define MAX_Display_flag display_Flag_Jishu_DY
    uint8_t display_Mode_or_Set = 0; 
    uint8_t display_Flag = 1;		
    
    uint8_t display_sec = 0; 
    
    uint8_t jishu_sec = 0;   
    
    uint16_t CH_Count_Buffer[30];  
    uint8_t Count_D = 0;
    *******************************************************************************/
    void delay(uint8_t i)	
    {
        while(i--);
    }
    void delay_1s(uint8_t s)
    {
    	unsigned int i;
    	unsigned char j; 
    
    	while(s--)
    		for (i = 1000; i > 0; i--) 
    
    			for (j = 124; j > 0; j--) ; 
    }
    
    /*******************************************************************************
    * 这段程序很容易找到		   : LCD初始化
    *******************************************************************************/
    void lcd_wcom(uint8_t com)  //LCD1602 写命令
    {
    	rs = 0;
    	rw = 0;
    	en = 0;
    	P0 = com;
    	delay(100);
    	en = 1;
    	delay(100);
    	en = 0;
    }
    void lcd_wdat(uint8_t dat)	//LCD1602写数据
    {
    	rs = 1;
    	rw = 0;
    	en = 0;
    	P0 = dat;
    	delay(100);
    	en = 1;
    	delay(100);
    	en = 0;
    }
    void lcd_init(void)    //LCD1602初始化
    {
    	lcd_wcom(0x38);
    	lcd_wcom(0x0c);
    	lcd_wcom(0x06);
    	lcd_wcom(0x01);	
    }
    
    /***********************************************************************
    /**********************************************************************
    *******************************************************************************/
    void Timer_Init(void)  //
    {
    	TMOD |= 0x01; 
    
    
    	TH0 = 0xFC;
    	TL0 = 0x18;
    
    	EA = 1;	
    	ET0 = 1; 
    	   
    	TR0 = 0;/
    }
     /***********************************************************************
    一路脉冲显示数值
    *******************************************************************************/
    void ReadInput(void)   
    {
    	if(Input1 == 0)
    	{
    		Input_1_Last_V = 0;
    	}
    	else if((Input1 == 1)&&(Input_1_Last_V == 0))
    	{
    		Input_1_Last_V = 1;
    		Input_1_Count++;
    	}
    	//第二路脉冲显示计数值
    	if(Input2 == 0)
    	{
    		Input_2_Last_V = 0;
    	}
    	else if((Input2 == 1)&&(Input_2_Last_V == 0))
    	{
    		Input_2_Last_V = 1;
    		Input_2_Count++;
    	}
    }
     /***********************************************************************
    LCD显示程序
    *******************************************************************************/
    void LCD_DisPlay_Jishulv_CH1_CH2(void)  
    {
    
    	lcd_wcom(0x80);
    	lcd_wdat('C');
    	lcd_wdat('H');
    	lcd_wdat('1');
    	lcd_wdat(':');
    
    
    	lcd_wdat((Input_1_Count%100000/10000) +'0');//万
    	lcd_wdat((Input_1_Count%10000/1000) +'0');//千
    	lcd_wdat((Input_1_Count%1000/100) +'0');//百
    	lcd_wdat((Input_1_Count%100/10) +'0');//十
    	lcd_wdat((Input_1_Count%10) +'0');//个
    
    
    	//通道2显示
    	lcd_wcom(0x80+0x40);
    	lcd_wdat('C');
    	lcd_wdat('H');
    	lcd_wdat('2');
    	lcd_wdat(':');
    	
    	lcd_wdat((Input_2_Count%100000/10000) +'0');//万
    	lcd_wdat((Input_2_Count%10000/1000) +'0');//千
    	lcd_wdat((Input_2_Count%1000/100) +'0');//百
    	lcd_wdat((Input_2_Count%100/10) +'0');//十
    	lcd_wdat((Input_2_Count%10) +'0');//个
    }
     /***********************************************************************
    LCD显示自检程序
    *******************************************************************************/
    void Display_Checking(void)
    {
    	lcd_wcom(0x80);
    	lcd_wdat('C');
    	lcd_wdat('h');
    	lcd_wdat('e');
    	lcd_wdat('c');
    	lcd_wdat('k');
    	lcd_wdat('i');
    	lcd_wdat('n');
    	lcd_wdat('g');	
    }
    void Display_CheckFall(void)//自检失败
    {
    	lcd_wcom(0x80+0x40);
    	lcd_wdat('C');
    	lcd_wdat('h');
    	lcd_wdat('e');
    	lcd_wdat('c');
    	lcd_wdat('k');
    	lcd_wdat(' ');
    	lcd_wdat('F');
    	lcd_wdat('a');
    	lcd_wdat('i');
    	lcd_wdat('l');
    }
    void Display_CheckOk(void)//自检成功
    {
    	lcd_wcom(0x80+0x40);
    	lcd_wdat('C');
    	lcd_wdat('h');
    	lcd_wdat('e');
    	lcd_wdat('c');
    	lcd_wdat('k');
    	lcd_wdat(' ');
    	lcd_wdat('O');
    	lcd_wdat('K');	
    }
     /***********************************************************************
    动态显示
    *******************************************************************************/
    void Display(uint8_t display_Flag)
    {
    	switch (display_Flag)
    	{
    		case display_Flag_Jishu_CH1_CH2:
    		LCD_DisPlay_Jishulv_CH1_CH2();
    		break;
    	}
    }
     /***********************************************************************
    按键子程序
    *******************************************************************************/
    void Button_Handler()//按键函数
    {
    	if(display_Mode_or_Set == 0) //设置模式
    	{
    		if(Key1 == 0)    //当按键1被按下
    		{
    			if(display_Flag>MIN_Display_flag)
    			{
    				display_Flag--;
    				lcd_wcom(0x01);
    				Display(display_Flag);
    			}
    			while(Key1 == 0);
    		}
    		if(Key2 == 0)    //当按键2被按下
    		{
    			if(display_Flag<MAX_Display_flag)
    			{
    				display_Flag++;
    				lcd_wcom(0x01);
    				Display(display_Flag);
    			}
    			while(Key2 == 0);
    		}
    	}
    }
     /***********************************************************************
    动态显示处理函数
    *******************************************************************************/
    void Display_Handler(void)
    {
    	if(display_Mode_or_Set == 0)
    	{
    		if(display_sec == 1)
    		{
    			Display(display_Flag);
    			display_sec = 0;
    		}
    	}
    }
    /***********************************************************************
    计数满30组更换
    *******************************************************************************/
    void DataHandler(void) //计数率统计
    {
    	static uint8_t firstTime = 1;//第一组不计算
    	uint8_t i = 0;
    
    	uint16_t last_Count = 0;
    	uint16_t now_Count = 0;
    	if(jishu_sec == 1)	      
    	{
    
    		for(i=0;i<30;i++)
    		{
    			//不满30组填入空白数据
    			if(CH_Count_Buffer[i] == 0)	  
    			{
    				CH_Count_Buffer[i] = Input_1_Count+Input_2_Count;
                    now_Count =  Input_1_Count+Input_2_Count;
    				
    				if(i == 0)
    				{
    					firstTime = 1;
    				}
    				else
    				{
    					last_Count = CH_Count_Buffer[i-1];
    					
    				}
    
    				break;
    			}
    		}
    
    		if(i == 30) //计数满30组
    		{
    			for(i=0;i<29;i++)
    			{
    				CH_Count_Buffer[i] = CH_Count_Buffer[i+1];
    			}
    			last_Count = CH_Count_Buffer[28];
    			CH_Count_Buffer[29] =  Input_1_Count+Input_2_Count;
    			now_Count = Input_1_Count+Input_2_Count;			
    		}	
    		if(firstTime == 1)
    		{
    			firstTime = 0;
    		}
    		else
    		{
    
    			if((now_Count>=(last_Count*10))||(last_Count>=(now_Count*10)))
    			{				
    				LED = 0; 
    				for(i = 0;i<30;i++)
    					CH_Count_Buffer[i] = 0;
    				CH_Count_Buffer[0] = now_Count;
    			}
    		}
    		Input_1_Count = 0;
    		
    		Input_2_Count = 0;
    	
    		jishu_sec = 0;
    		
    	}
    }
    
     /***********************************************************************
    进行自检
    *******************************************************************************/
    uint8_t self_checking() //自检程序
    {
    	uint16_t self_check_buffer[3];
    	unsigned char xdata system_status=0;
    	
    	u8 JLZ=0;
    	u8 JLL=0;
    	uint8_t i = 0;
    	uint8_t a = 1;
    	u8 b=0;
    	uint8_t count = 0;
    	float v=0.3;
    	TR0 = 1; //打开定时器
    		while(i<3)
    	{
    		ReadInput();
    
    		if(jishu_sec ==1) //1S
    		{
    			jishu_sec = 0;
    			self_check_buffer[i] = Input_1_Count+Input_2_Count;
    			Input_1_Count = 0;
    			Input_2_Count = 0;
    			i++;		
    		}		
    	}
    判断自检是否成功
    	for(count= 0;count<3;count++)
    	{
    		if((self_check_buffer[count]<1)||(self_check_buffer[count]>10000))   
    		{	
    			TR0 = 0;
    			return 0;
    		}		
    	}
        	TR0 = 0;
        	return 1;
    }
    /***********************************************************************
    主函数
    *******************************************************************************/
    void main()		 
    {
    	u16	 ad;
    	uint8_t i = 0;
    	lcd_init(); //LCD初始化
    	Timer_Init(); //定时器初始化
    	Display_Checking();//开始自检
    
    	if(self_checking() == 1)
    		Display_CheckOk();//当自检成功
    	else
    	{
    		Display_CheckFall();
    		while(1);//完成之后下一步
    	}
    	delay_1s(10);	
    	  TR0 = 1;  //打开定时器
    	while(1)	//
    	{
    		ReadInput();//读取输入		
    		Button_Handler(); //按键函数
    		Display_Handler(); //显示函数
    		DataHandler(); //数据函数
    	delay(10); 
    	}
    		i++;			
    	}
    }
    定时器函数
    void trigger_timer0() interrupt 1
    {  
        TH0 = 0xFC;
        TL0 = 0x18;   
       millis++;
       if(millis%1000 == 0) 
       {
       	 display_sec = 1;
       	 jishu_sec = 1;  	 
       } 
    }
    

    整体仿真效果图,我这是加了其他模块,使用的话可以自行修改

    write by 亦舒斋
    交流联系QQ:1464475872

    展开全文
  • 51单片机心率计数Proteus仿真 由于仿真中没有红外,手指也模拟不了,其实就是单片机的IO口检测脉冲信号,那样用个方波信号模拟就ok
  • 51单片机1602简易脉冲计数器频率计程序
  • 基于51单片机脉冲信号计数并报警源代码,从P2^0与gnd之间取信号,报警P3^4
  • proteus 51单片机定时计数仿真,t0用于定时,t1用于计数计数脉冲来自p1.0
  • 基于c51的脉冲计数

    2011-08-31 21:58:07
    基于c51单片机的等精度频率的测量频率脉冲计数
  • 51单片机计数测速转速测量,在仿真中等价于测量外部脉冲频率;如果修改输入脉冲的频率,在数码管上可实时显示当前频率! 功能:霍尔传感器测速,霍尔传感器的信号输出脚接T1(P3.5)引脚 测量范围:假设转盘只有一个磁钢...
  • 单片机模拟脉冲计数 C程序,可以仿真流量计的工作原理
  • 满意答案jinyu1002013.06.25采纳率:58%等级:12已帮助:4461人#include#define uint unsigned int#define uchar unsigned char uchar code tabel[]={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8...//计数变量声明sbi...

    满意答案

    dcebd7a0de6265b6ccae5ead692f1eab.png

    jinyu100

    2013.06.25

    dcebd7a0de6265b6ccae5ead692f1eab.png

    采纳率:58%    等级:12

    已帮助:4461人

    #include

    #define uint unsigned int

    #define uchar unsigned char uchar code tabel[]={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

    uint num;//计数变量声明sbit wei_ge=P2^0; //个位控制角定义

    sbit wei_shi=P2^1; //十位控制角定义

    sbit wei_bai=P2^2; //白位控制角定义

    sbit wei_qian=P2^3;//千位控制角定义/*延时子程序*******************************************************/

    void delay(uint xms)

    {

    uint j;

    for(;xms>0;xms--)

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

    }/*数码管扫描显示子程序************************************************/

    void shuma_show(uint date)

    {

    uchar ge,shi,bai,qian;//数码管显示变量声明 ge=date%1000;//个位数换算

    shi=date/10%10;//十位换算

    bai=date/100%10;//百位换算

    qian=date/1000;//千位换算

    wei_ge=1;//打开个位显示

    P0=tabel[ge]; //数据输入数码管内

    delay(2);//延时显示2ms

    wei_ge=0;//关闭个位显示 wei_shi=1;//打开个位显示

    P0=tabel[shi]; //数据输入数码管内

    delay(2);//延时显示2ms

    wei_shi=0;//关闭个位显示 wei_bai=1;//打开个位显示

    P0=tabel[bai]; //数据输入数码管内

    delay(2);//延时显示2ms

    wei_bai=0;//关闭个位显示 wei_qian=1;//打开个位显示

    P0=tabel[qian]; //数据输入数码管内

    delay(2);//延时显示2ms

    wei_qian=0;//关闭个位显示

    }/*初始化子程序**********************************************************/

    void inti()

    {

    wei_ge=wei_shi=wei_bai=wei_qian=0;//各I/O口初始化

    TMOD=0x05;//设置计数器0工作方式1,为16位计数器,且为外部计数

    TH0=0;//计数器高8位装初值

    TL0=0;//计数器低8位装初值

    TR0=1;//开计数器

    }/*主程序***************************************************************/

    void main()

    {

    inti();

    while(1)

    {

    num=TH0*255+TL0;//读计数器数据

    if(num==10000){TH0=TL0=0;} //计满清零

    shuma_show(num);//数码管扫描显示

    }

    } 你电路图太不清楚了,我随便定义的I/O口,我刚写完的,程序只是编译了没问题,可能会有问题,但问题不大,希望你能够满意,很少有女生学单片机的,加个扣扣如何呢?我现在在学AVR了,觉得51的资源不够用了,做过很多项目,一起交流交流?我的QQ:576689422

    30分享举报

    展开全文
  • 《C51单片机的C语言程序设计....1、2020/8/7,1,第10章 80C51的C语言程序设计,单片机C语言概述,10.1,C51的数据类型与运算,10.2,C51流程控制语句,10.3,C51的指针类型,10.4,C51的函数,10.5,C51编程实例,10.6,2020/8/7...
  • ㈡ 实验器材G6W仿真器一台MCS—51实验板一台PC机一台电源 一台信号发生器一台㈢ 实验内容及要求8051内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数,使用8051的T1作定时器,50ms中断...
  • 关于51单片机计数功能的应用

    千次阅读 2017-09-29 21:07:37
    51内部有两个定时器,两个定时器的本质还是加一计数器,只不过作为定时器是计数内部脉冲,而作为计数器时是对外部脉冲计数,在计数模式下,P3.4端口是T0计数器的外部脉冲输入口,P3.5端口是T1计数器的外部脉冲输入口...
  • 用杜邦线讲P1.3口接到P3.4上 利用c51计数功能,脉冲计数,利用定时器1再P1.3口产生脉冲,用定时器0接受脉冲并计数,当计时器0溢出时,P1.4口取反,使P1.4同样产生脉冲,P1.4的周期为P1.3六倍
  • 利用单片机及4位LED数码管做成四位脉宽显示 ,在一个脉宽期间对内部周期进行计数,得到的一个高电平脉冲内的计数值显示在四位数码管上,并达到相应的技术指标要求。
  • 基于51单片机脉冲宽度调制(即PWM)直流电机转速快慢以及霍尔测速的项目一、前言1、基于51单片机脉冲宽度调制(即PWM)直流电机转速快慢以及霍尔测速的项目包括用Keil软件编写单片机C语言程序和用Proteus软件仿真...
  • 基于51单片机计数器程序代码编写,驱动数码管显示0~99,程序代码基于C语言
  • mcs-51脉冲计数资料

    2010-07-16 22:26:48
    mcs51单片机:利用计数器T1(P3.5)记录脉冲个数,每计满10个脉冲,使灯亮1秒,然后重新计数 利用计数器T1(P3.5)记录脉冲个数,每计满10个脉冲,使灯亮1秒,然后重新计数
  • 测定脉冲频率,附带部分PROTUES仿真结果和完整C语言程序,对于初学者或着急使用的电子爱好者来说,软件硬件结合,十分方便移植。仿真结果十分精确,实际应用中可能会存在少许误差,通过相应的...本设计利用51单片机
  • /********************************************** 方法1:延时法 硬件:11.0592MHz晶振,STC89C52,RXD P1.0 TXD P1.1 T1 P...T1用于计数,10s定时时间到后,将计数脉冲利用模拟串口发送出去 外部的脉冲是用STM
  • 单片机】数码管应用一、操作目的二、代码详解(简单应用)三、代码详解(60进制) 一、操作目的 (1)简单的数码管应用。 (2)60进制操作练习。 二、代码详解(简单应用) #include <reg51.h> #include <...
  • 晶振频率12M,其程序如下:#include《reg51.h》void timer0_init(){TMOD = 0x01; //定时器在方式1工作,是16位计数器,最大值为65536TL0 = 0xb0; //给TL0赋计数初值0xb0TH0 = 0x3c; //给TH0赋计数初值0x3cTR0 = 1; /...
  • 51单片机计数/定时器设置

    千次阅读 2015-09-16 23:33:26
    51单片机内部一般有两个计数/定时器,T0 T1,其框图如下: 其中TH1 TL1用来设定T1的计数初值,TH0 TL0则用来设定T0的。 一、工作模式设置寄存器TMOD,地址为89H,格式如下图: 1、GATE——门控位  GATE = 0...
  • 入门有针对性的解决一些简单的实际问题,边理论边实践学一样会一样基本实验:LED流水灯,数码管显示,键盘控制,音乐播放,继电器控制I2C通信实验,串口通信实验,红外线遥控信号解码实验等单片机的定义分类和...
  • 1.基本原理:http://www.51hei.com/bbs/dpj-103111-1.html 补充: 1.TMOD定时器/计数器工作方式寄存器 GATE=1时,定时器由INT和TR共同控制,用于测量脉宽; 2.TCON定时器/计数器控制寄存器 3.   2....
  • 利用红外发光管发射红外线,红外接收管接收此红外线,并将其放大、整流形成低电平信号当有人或物挡住红外光时,接收数码管没有接收到红外信号,放大器将输出高电平,同时将这个电平信号送入单片机进行控制计数,并且...
  • 51单片机制作脉冲发生器

    千次阅读 2020-10-26 19:53:20
    任务描述:应用单片机定时/计数器设计一个秒脉冲发生器,并用2位数码管显示脉冲数 文章目录设计一个秒脉冲发生器要求总结 要求 1.在Keil IDE(u Vision2)中完成应用程序设计,并编译 2.在ISIS 7 Professional 中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,609
精华内容 1,043
关键字:

51单片机脉冲计数程序