找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1128|回复: 0
打印 上一主题 下一主题
收起左侧

求大佬指导单片机控制电机转速仿真

[复制链接]
跳转到指定楼层
楼主
lcd显示屏上显示的转速和电机下面显示的数字不符,他们有什么关系



程序如下
  1. #include <AT89X52.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char             //宏定义
  6. sbit zheng=P1^0;                                        //电机正转控制键
  7. sbit fan=P1^1;                                                //电机反转控制键
  8. sbit add=P1^2;                                        //电机加速
  9. sbit dec=P1^3;                                        //电机减速
  10. sbit stop=P1^4;                                                //电机停止
  11. sbit PWMZ=P2^0;                                                //电机正转PWM信号
  12. sbit PWMF=P2^7;                                                //电机反转PWM信号
  13. bit  run=0;                                                        //电机运行标志位,=1时电机运行,=0电机停止
  14. bit  Z=0,F=0;                                                //电机正反标志位
  15. unsigned char PWM=0xAF;                                //开机时速度为中间值
  16. //unsigned char code  suduzhi[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};              //速度等级数值
  17. void delay(unsigned char n)
  18. {
  19.         unsigned char i,j;
  20.         for(j=0;j<n;j++)
  21.                 for(i=0;i<125;i++);
  22. }
  23. /*****主函数*****/
  24. void main(void)
  25. {
  26.         TMOD=0x21;
  27.         TH0=0xFF;
  28.         TL0=0x00;
  29.         TH1=PWM;
  30.         TL1=PWM;
  31.         EA=1;
  32.         ET0=1;
  33.         ET1=1;
  34.         EX0=1;
  35.         IT0=1;
  36.         PT0=1;                                        //定时中断优先
  37.         PT1=1;
  38.         PX0=0;
  39.         PWMZ=0;                                        //开机时,电机不转动
  40.         PWMF=0;
  41.         while(1)
  42.           {
  43.                        
  44.         }
  45. }
  46. void int0(void) interrupt 0
  47. {
  48.         EX0=0;                                        //关外部中断0
  49.         if(zheng==0)
  50.         {
  51.                 TR0=1;
  52.                 Z=1;
  53.                 F=0;
  54.                 PWMF=0;
  55.         }
  56.         if(fan==0)
  57.         {
  58.                 TR0=1;
  59.                 F=1;
  60.                 Z=0;
  61.                 PWMZ=0;
  62.         }
  63.         if(add==0)
  64.         {
  65.                 delay(10);
  66.                 if(add==0)
  67.                 {
  68.                         if(PWM<0xFF)                                        //定时初值加,脉宽加,速度加
  69.                                 PWM=PWM+8;
  70.                         else
  71.                                 PWM=0xFF;
  72.                 }
  73.                 while(add==0);
  74.         }
  75.         if(dec==0)                                                        //定时初值减,脉宽减,速度减
  76.         {
  77.                 delay(10);
  78.                 if(dec==0)
  79.                 {      
  80.                         if(PWM>0x1F)
  81.                                 PWM=PWM-8;
  82.                         else
  83.                                 PWM=0x1F;
  84.                 }
  85.                 while(dec==0);
  86.         }
  87.         if(stop==0)
  88.         {      
  89.                 TR0=0;
  90.                 TR1=0;
  91.                 PWMZ=0;
  92.                 PWMF=0;
  93.         }
  94.         EX0=1;
  95. }
  96. void time0(void) interrupt 1
  97. {
  98.         TR0=0;
  99.         TR1=1;
  100.         TH0=0xFF;
  101.         TL0=0x00;
  102.         TH1=PWM;
  103.         TL1=PWM;
  104.         TR1=1;
  105.         PWMZ=0;
  106.         PWMF=0;
  107.         TR0=1;
  108. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:480614 发表于 2019-5-4 18:28 | 只看该作者
电机下面转速那么慢为啥lcd上显示的那么快
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表