2019年10月26日 星期六

pwm v3

#include <reg51.h>
sbit  wled  = P2^7;
sbit  spk   = P3^4;
sbit  sw1   = P3^2;
sbit  k2    = P3^3;
sbit  output= P3^0;
//共陽 target >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
char code DATA_7SEG[16]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
char code act[4]={0xfe, 0xfd, 0xfb, 0xf7};    /* p2.0--p2.3 2.5*/
char data disp[4]={0,0,0,0};
char di=0;
//============================================
void delay_1ms(int d)
{
int i, j;
 for(i=0; i<d; i++)
    for(j=0; j<114; j++)  ;
}
/*----------------------------*/
void led_bl()
{
int i;
 for(i=0; i<1; i++)
  {
   wled=0;  delay_1ms(50);
   wled=1;  delay_1ms(50);
  }
}
/*----------------*/

void t0isr(void) interrupt 1
{
 TH0=(65536-2000)/256;
 TL0=(65536-2000)%256;
 P0=DATA_7SEG[disp[di]];
  P1=act[di]; 
  di++;
  if(di==4) di=0;
}

void init_t1()
{
 TH0=(65536-2000)/256;
 TL0=(65536-2000)%256;
 TMOD=0x01;
 IE=0x82;
 TR0=1;
}

void show_data(char c)
{
 disp[0]=c;
 disp[1]=0;
 disp[2]=0;
 disp[3]=0;
}
/*------------------*/
void test_seg()
{
int i;
  for(i=0; i<10; i++)
   {
    show_data(i);   
    delay_1ms(500);
   }
}
//------------------------
void bz()
{
int i;
 for(i=0; i<100; i++)
  {
   spk=0;  delay_1ms(1);
   spk=1;  delay_1ms(1);
  }
 delay_1ms(50);
}
//-----------------------------------
void delay_100us() /* 100 uS  0.1 mS delay */
{
char  i;
 for(i=0; i<25; i++) ; //需微調
}

//-----------------------------
test_kx()
{
int c, i,j;

//wait sw1 .......
//長按下 ---0   短按 2 下 pause
//
 show_data(0); TR0=1;
 c=0;
 while(1)
  {
go:
   show_data(c); c++; if(c==9) c=0;
//短按 2 下 pause  test 5000 次 sw1==1 表示放開 在次按下)  pause / clear

   for(i=0; i<5000; i++)  //5000
     {
      delay_100us();

      if(sw1==0) //表示放開 K=1  K=0 K=1 在次按下?
         {
           delay_1ms(100);
//         while(1) if(sw1==1) { delay_1ms(100); break;}
           while(1) //loop count delay_1ms  5000
            { for(j=0; j<8000; j++) if(sw1==1) { delay_1ms(100); goto next;}
              if(sw1==0) { delay_1ms(300);  c=0; show_data(c);
                          while(1) if(sw1==1) { delay_1ms(100); break;}
                          goto go;  }
            }
next:
// --------------------------------------------------
           while(1) if(sw1==0) { delay_1ms(100); break;}

           while(1) if(sw1==1)
            { //短按 2 下 pause.....get it!!!!!!!!!....
              bz(); delay_1ms(500); //key to go.......
              while(1) if(sw1==0) { delay_1ms(300); goto go;}
              break;   //last state sw1==1;放開
            }
         }

     }//test t times key off

//一直案注 sw1=0
//     if(sw1==0) {  delay_1ms(300);  if(sw1==0) c=0;    }
  }//loop
}
//-------------------------------------
// 250HZ---4 ms =10x0.4 ms
// PWM 10~90% 切成 10 等分來控制
void delay_400us() /* 400 uS  0.4 mS delay */
{
char  i;
 for(i=0; i<110; i++) ; //25x4=100 需微調>
}
//-------------------------------------------
void pwm(char du) //1~9
{
char i;
 while(1)
  {
   if(sw1==0) { delay_1ms(300); break; }
   output=1; for(i=0; i<du; i++)      delay_400us();
   output=0; for(i=0; i<(10-du); i++) delay_400us();
  }
}
//---------------------------
test_pwm()
{
//pwm1 seg=1 output=10% 250HZ LED8=10B
 while (1)
 {
  show_data(1);   pwm(1);
  show_data(2);   pwm(2);
  show_data(3);   pwm(3);
  show_data(4);   pwm(4);
  show_data(5);   pwm(5);
show_data(6);   pwm(6);
show_data(7);   pwm(7);
  show_data(8);   pwm(8);
show_data(9);   pwm(9);
//show_data(0);   pwm(0);
 }
}
//--------------------------------------------
main()
{
  bz();
 led_bl();
 init_t1();
// test_seg();
 test_kx();   //測試按鍵按下 等基本功能,理解才容易記憶
// test_pwm();    //測試 PWM 輸出 250HZ 如圖,sw1 切換5組
 while (1) {}
}

沒有留言:

張貼留言

algorithm

 #include <iostream> #include <string.h> using namespace std; int main(int argc, char** argv)  { for(int j=2;j<=100;j++)//j...