微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助!1111111

求助!1111111

时间:10-02 整理:3721RD 点击:
我想加个测速显示模块   哪位大神给改哈程序   硬件电路也给知道哈

// PWM 控制 DC电机转速
// 晶振为12M
// 利用定时器控制产生占空比可变的 PWM 波
// 按K1,PWM值增加,则占空比增加,电机转快
// 按K2,PWM值减小,则占空比减小,电机转慢。
// 当PWM值增加到最大值(255)或减小到最小值(1)时,蜂鸣器将报警。
#include < reg51.h >
sbit  K1 =P1^0 ;            //增加键
sbit  K2 =P1^1 ;            //减少键
sbit  K3 =P1^2 ;            //转向选择键
sbit  PWMUOT =P3^0 ;                                //PWM波输出
sbit  turn_around =P3^1 ;                //转向控制输出
sbit  BEEP =P3^2 ;          //蜂鸣器
unsigned int PWM;   
void Beep(void);
void delay(unsigned int n);
void main(void)
{   
     TMOD=0x11;//设置T0、T1为方式1(16位定时器)
     TH0=0 ;   //65536us延时常数(t=(65536-TH)/fosc/12)
                 TL0=0;
     TH1=PWM ; //脉宽调节,高8位
                 TL1=0;
     EA=1;                 //开总中断
     ET0=1;                 //开T0中断
     ET1=1;                 //开T1中断
     TR0=1 ;         //T0定时允许
   while(1)
   {                 
                 if(K3==0&&K1==1&&K2==1)//转向控制
           {
                                turn_around=!turn_around;                                               
                 }
                 while(K3==0);//检测K3是否释放
                 do{
                                                        PWM++ ;
                                                        if(PWM>0xfe)//防止PWM计数溢出
                                                        {
                                                                        PWM=0xff;       
                                                        }
                                                        if(PWM==0xff)Beep() ;
                                                        delay(3000);
         }
     while(K1==0&&K2==1);
     do{
                                                        PWM-- ;
                                                        if(PWM<1)//防止PWM计数溢出
                                                        {
                                                                        PWM=1;
                                                        }
                                                        if(PWM==1)Beep() ;
                                                        delay(3000);
          }
     while(K1==1&&K2==0);
   }
}

void timer0() interrupt 1 using 2// 定时器0中断服务程序.
{  
    TR1=0 ;                 //T1禁止
                TH0=0 ;    //置T0定时常数
                TL0=0 ;
                TH1=PWM ;         //置T1定时常数
                TL1=0;
                TR1=1 ;                 //T1允许
                PWMUOT=0 ; //PWM波输出0
}
void timer1() interrupt 3 using 3         // 定时器1中断服务程序
{
    TR1=0 ;                 //T1禁止
    PWMUOT=1 ; //PWM波输出1
}
void Beep(void)   //蜂鸣器子程序  
  {
      unsigned char i;
      for (i=0;i<100;i++)
        {
          delay(100);
          BEEP=!BEEP;                //Beep取反
        }
     BEEP=1;                         //关闭蜂鸣器
     delay(100);
  }
void delay(unsigned int n)         // 延时子程序
{
    while(n--)   ;
}


接线图


需要硬件电路做支持

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top