⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dcmotorspeed.txt

📁 embedded C code for DC motor speed control using PWM method
💻 TXT
字号:
#include<16f877a.h>
#include<stdlib.h>
#include <string.h>
#include<ctype.h>
#use delay (clock=20000000)
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,PUT,NOLVP

#define lcd 0x06
#define RS PIN_E0
#define E PIN_E1
#bit op1 = 0x07.0
#bit op2 = 0x07.1
#bit sw = 0x07.7
/* keypad */
#byte matkey=0x08
#define p PIN_D0 //row1
#define q PIN_D1 //row2
#define s PIN_D2 //row3
#define g PIN_D3 //row4

void speed();
void keyrelease();
void delay1();
void matrixkey();
void delayms(int);
void enableCommand();
void sendCommand(int);
void disableCommand();
unsigned char l=0,gs,gs1,gs2,gs3,gs4,psg1;
unsigned char dupnum;
int32 set;
unsigned int i,aa,gee=0;
unsigned long int gs5,q1;
int1 keypress,keyref;
unsigned char b[5],pas[5]={1,2,3,4};

char n,a,num,d,v,flag,R;
char disp[16] = {0x00,0x07,0x04,0x01,
                 0x4e,0x08,0x05,0x02,
                 0x00,0x09,0x06,0x03,
                 0x19,0x1F,0x20,0x23};

void  cmd()
 {

           for(i=0;i<255;i++);
	        output_low(RS);
	        for(i=0;i<255;i++);
	        output_high(E);
           for(i=0;i<255;i++);
           output_low(E);
 }
void  dwr()
  {
         for(i=0;i<255;i++);
	      output_high(RS);
         for(i=0;i<255;i++);
	      output_high(E);
         for(i=0;i<255;i++);
         output_low(E);
   }
void  LCDInit()
{
   output_b(0x38);
   cmd();
   output_b(0x0e);
   cmd();
   output_b(0x01);
   cmd();
   output_b(0x84);
   cmd();
}
void  clear()
{
  output_b(0x01);
   cmd();
  output_b(0x80);
  cmd();

}
void display(unsigned char x)
	{

    output_b(x);
    dwr();
  }




void delayms(int n)
 {
	   int i;
	   for(i=0;i<=n*1;i++);
 }

int main (void)
{

	unsigned char k,read_value,t1,t2,kt;
	int  i;
//top:
	set_tris_b(0x00);
   set_tris_e(0x00);
   set_tris_a(0x00);
   set_tris_d(0x0f);
   set_tris_c(0x80);
   LCDInit();
   output_b(0x84);
   cmd();
   printf(display,"DC MOTOR");
   output_b(0xc1);
   cmd();
   printf(display,"SPEED  CONTROLL");
   delay_ms(2000);
   output_b(0x01);
   cmd();
   output_b(0x80);
   cmd();
   printf(display,"ENTER RPM :");
   op1 = 0;
   op2 = 0;
   sw = 1;
   gs = gs1 = gs2 = gs3 = gs4 = gs5 = 0;
   k=0;
   psg1 = 0;
   read_value = 0;
   t1 = 0;
   t2 = 0;
   kt=0;

while(1)
    {

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




                 if(!keypress)
                     {
                     set_tris_d(0x0f);
                     matrixkey();
                     }

                  else
                     {
                     keyrelease();
                     set=0;
                     }
 /**************************************************************************************/
     }

}

void matrixkey()
{
 char m=0xef,b,i=0;
 num=0;
 do
  {
   output_b(0x0f);
   matkey=m|0x0f;
   set_tris_d(0x0f);
	  #asm
     MOVF 0x08,w
	  MOVWF b
     #endasm
     b=b&0x0f;
     i++;
  if(b==0x0f)
    {
     m=m<<1;
     num=num+4;
    }
  else
    {
     i=4;
     v++;
  switch(b)
    {
      case 0x0e :num=num+1; break;

      case 0x0d :num=num+2; break;

      case 0x0b :num=num+3; break;

      case 0x07 :num=num+4; break;

    }

   if(v==1)
    {
     dupnum=num;
    }

   else
     {
      if((dupnum==num)&&(v==2))
        keypress=1;
        keyref=0;
        v=0;
     }

   }

 }while(i<4);
}

void keyrelease()
{

  if((matkey&0x0f)==0x0f)
    {
    
    psg1++;
    flag=0;
    keyref=1;
    keypress=0;

    n=disp[num];

     b[gee++]=n;

    if(gee==4)
    {
    gee=0;
    }


    R = n + 0x30;
/*
  output_b(0x8B+l);
  cmd(); */
 
if(psg1==1)
{
output_b(0x8B);
cmd();
}
if(psg1==2)
{
output_b(0x8C);
cmd();
}
if(psg1==3)
{
output_b(0x8D);
cmd();
psg1=0;
} 

   l++;

  display(R);

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

    gs++;

      if(gs==1)
      {
      gs1 = n;
      delay_ms(500);
      }

      if(gs==2)
      {
      gs2 = n;
      delay_ms(500);
      }

      if(gs==3)
      {
      gs3 = n;
      delay_ms(500);
      gs = 0;
      gs4=1;
      }

         if(gs4==1)
         {
         gs5 = ((gs3)+(gs2*10)+(gs1*100));
   
            if(gs5>=251)
               {
               output_b(0x01);
               cmd();
               output_b(0x80);
               cmd();
               gs4 = 0;
               printf(display,"RE ENTERE RPM");
               delay_ms(1000);
               while(3);
               }
           if(gs5<=250)
           {
            output_b(0x01);
            cmd();
            output_b(0xc4);
            cmd();
            gs4 = 0;
            printf(display,"RPM:%ld",gs5);
            speed();
            delay_ms(1000);
           }
         }

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

        if(n==0x4e)
           {
           l=0;
           output_b(0x01);
           cmd();
           output_b(0xc0);
           cmd();
           }
    }
}

void speed()
{

   while(2)
   {
      op1 = 1;
         for(q1=0;q1<=gs5;q1++)
         {
         delay1();
         }

      op1 = 0;
         for(q1=0;q1<=gs5;q1++)
         {
         delay1();
         }
         
         if(sw==0)
         {
         sw = 1;
         op1 = 0;
         op2 = 0;
         output_b(0x01);
         cmd();
         output_b(0x80);
         cmd();
         printf(display,"ENTER RPM :");
         delay_ms(2000);
         break;
         }
   }

}

void delay1()
{
delay_us(300);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -