为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

12864显示程序

2017-10-20 5页 doc 16KB 10阅读

用户头像

is_682974

暂无简介

举报
12864显示程序12864显示程序 #include #include //#include"44.h" #include"LCD12864.h" //#include"PID.h" #define uint unsigned int #define uchar unsigned char #define CP 100 #define CI 0.6 #define CD 1 int sbai,sshi,sge;//定义设定值的百位,十位,个位 uchar fbai,fshi,fge;//定义返回的百位,十位,个位 int w...
12864显示程序
12864显示程序 #include #include //#include"44.h" #include"LCD12864.h" //#include"PID.h" #define uint unsigned int #define uchar unsigned char #define CP 100 #define CI 0.6 #define CD 1 int sbai,sshi,sge;//定义设定值的百位,十位,个位 uchar fbai,fshi,fge;//定义返回的百位,十位,个位 int wbai,wshi,wge;//定义误差的百位,十位,个位 int setpoint;//设定目标转速 uint pwm;//用于计算pwm sbit pwmout=P3^1; //l298使能,用于pwm控制电机的转速 sbit l298interrupt1=P3^2;//l298的输入,用于控制电机转动方向 code unsigned char a[]=; void delay(uint z) { uint x,y; for(x=120;x>0;x--) for(y=z;y>0;y--); } uchar temp,gone,back; uint num; void keyscan(); void keyscan1(); void keyscan2(); uchar i,j; uchar shuzi;//读取设定的数字 int speed;//实测每秒转速 uint set_rps;//设定每秒转速 int wc;//用来存放误差变量的 uint speed1;//处理过了的采样回来的速度 void init() //======================================================================== // 语法格式: int DCMotor_Speed_PID(int SetSpeed, int CurSpeed) // 实现功能: 增量式PID计算: u0 = u1 + CP*(e0-e1) + CI*e0 + CD*(e0-2*e1+e2) // 参数: SetSpeed: 设定的转速 // CurSpeed: 实际测得转速 // 返回值: 直流电机速度等级(PWM占空比) //======================================================================== int DCMotor_Speed_PID(int SetSpeed,int CurSpeed) { int e0, u0; static int u1 = 0; // 前一次输出值(为避免浮点运算将该值扩大16倍) static int e1 = 0, e2 = 0; e0 = SetSpeed - CurSpeed; // 当前速度偏差 wc=e0; u0 = u1 + CP * (e0 - e1) // 比例项 + CI * e0 // 积分项 + CD * (e0 - e1 - e1 + e2); // 微分项 if(u0 > 1023) u0 = 1023; // 输出值应小于64(扩大16倍) if(u0 < 16) u0 = 16; // 输出值应不小于1(扩大16倍) u1 = u0; // 更新u1、e1和e2 e2 = e1; e1 = e0; return u0; // 返回u0 } void PID_ctrl()//PID控制 void main() { j=0; Delay400Ms(); //启动等待,等LCD讲入工作状态 LCDInit(); //LCD初始化 Delay5Ms(); //延时片刻 LCDClear(); DisplayListChar(2,2,a); //显示字库中的中文数字 DisplayListChar(4,3,b); //显示字库中的中 文数字 i=1; init(); l298interrupt1=1; while(1) { keyscan(); keyscan1(); // keyscan2(); if(gone==1) { DCMotor_Speed_PID(setpoint,speed); PID_ctrl(); // speed=1980; // speed1=speed/8; // wc=setpoint-speed1; fbai=speed1/100; fshi=speed1%100/10; fge=speed1%10; wbai=wc/100; wshi=wc%100/10; wge=wc%10; DisplayOneChar(5,3,f[fbai]); DisplayOneChar(6,3,f[fshi]); DisplayOneChar(7,3,f[fge]); if(wc>=0) else if (out>pwm&&pwm<100) //周期分为100分 else if (out>pwm&&pwm<100) //周期分为100分
/
本文档为【12864显示程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索