51单片机制作简易数字频率计程序

51单片机制作简易数字频率计程序,第1张

这里有一个四位数码管的频率计,供参考

#include <reg52h>

#define uchar unsigned char

#define uint  unsigned  int

uchar duan[10]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //所需的段的位码

//uchar wei[4]={0XEf,0XDf,0XBf,0X7f};                                 //位的控制端 (开发板)

uchar wei[4]={0X80,0X40,0X20,0X10};                                 //位的控制端 (仿真)

uint z,x,c,v, date; //定义数据类型

uint dispcount=0;

uint lck=0;

uint disp=0;

/

延时函数

/

void delay(uchar t)

{

  uchar i,j;

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

   {

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

 { ;

 }

   }

}

/

                数码管动态扫描

/

void xianshi()

 { 

 /数据转换/ 

  z=date/1000;  //求千位

  x=date%1000/100;  //求百位

  c=date%100/10;  //求十位

  v=date%10;  //求个位

      P2=wei[0];

  P0=duan[z];

  delay(50);  

     P2=wei[1];

      P0=duan[x];

  delay(50);  

      P2=wei[2];

      P0=duan[c];

  delay(50);  

      P2=wei[3];

      P0=duan[v];

  delay(50);  

                 

       }

/

                                定时器初值1ms

/

void initTimer(void)

{

 TMOD=0x0;

 TH0=0xe3;

 TL0=0xc;

}

/

                                定时器函数

/

void timer0(void) interrupt 1

{

 TH0=0xe3;

 TL0=0xc;

 lck++;

 if(lck==1000)

       {

        disp=dispcount;

      lck=0;

dispcount=0;

       }

}

/

                                中断函数

/

void int0(void) interrupt 0

{

dispcount++; //每一次中断,计数加一

}

/

                                主函数

/

void main(void)

{

IT0=1;     //INT0下降沿中断

EX0=1;     //允许INT1中断

initTimer(); //装入初值

TR0=1;

ET0=1;

EA=1;

while(1)

{

date=disp;

xianshi();

}

}

51单片机,程序下载失败,显示:打开串口失败,是设置错误造成的,解决方法如下:

1、首先在单片机编程软件中,声明头文件,并定义数据类型。

2、先写好主函数,如下图所示。

3、然后设置波特率函数(可用SPI生成),如下图所示。

4、接着设置串口中断函数,在中断里对“TI”“RI”清零,如下图所示。

5、然后编写发送字符串程序,最后在主函数直接调用即可。

>

我这有51的#include#include"global_varibleh"/模块名:PID描述:PID调节子程序采用PID-PD算法。在偏差绝对值大于△e时,用PD算法,以改善动态品质。当偏差绝对值小于△e时,用PID算法,提高稳定精度。PIDout=kpe(t)+ki[e(t)+e(t-1)++e(1)]+kd[e(t)-e(t-1)]============================================================================入口:无出口:无改变:PID_T_Run=加热时间控制/voidPID_Math(void){signedlongee1;//偏差一阶//signedlongee2;//偏差二阶signedlongd_out;//积分输出if(!Flag_PID_T_OK)return;Flag_PID_T_OK=0;Temp_Set=3700;//温度控制设定值3700度PID_e0=Temp_Set-Temp_Now;//本次偏差ee1=PID_e0-PID_e1;//计算一阶偏差//ee2=PID_e0-2PID_e1+PID_e2;//计算二阶偏差if(ee1>500)//一阶偏差的限制范围ee1=500;if(ee1200)//积分最多累计的温差PID_e_SUM=200;if(PID_e_SUM100)//如果温度相差大于1度时积分累计限制{if(PID_e_SUM>100)PID_e_SUM=100;if(PID_e_SUM150)PID_e_SUM=150;if(PID_e_SUM>0)//当前温度高于设定温度05度时削弱积分正输出d_out>>=1;}PID_Out+=d_out;//PID比例,积分和微分输出}elsePID_e_SUM=0;PID_Out/=100;//恢复被PID_Out系数放大的倍数if(PID_Out>200)PID_Out=200;if(PID_Out300)//当前温度比设定温度低3度则全速加热PID_Out=200;if(PID_e0<-20)//当前温度高于设定温度02度则关闭加热PID_Out=0;Hot_T_Run=PID_Out;//加热时间控制输出PID_e2=PID_e1;//保存上次偏差PID_e1=PID_e0;//保存当前偏差}////////////////////////////////////////////////////////////voidPID_Math()end

以上就是关于51单片机制作简易数字频率计程序全部的内容,包括:51单片机制作简易数字频率计程序、51单片机,程序下载失败,显示:打开串口失败! Chinese:串口已被其它程序打开或该串口不存在、关于用51单片机通过PID算法控制温度线性上升等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10068951.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存