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

📄 pwm.c

📁 转速表采用的是测量编码盘的信号
💻 C
字号:
#include<STC12C2052AD.h>
#include<intrins.h>
sbit  L_dat=P1^5;
sbit  L_clk=P1^6;
sbit  p34=P3^4;
sbit  dirt=P1^4;
unsigned char disp[6];
unsigned char tcount;
unsigned long  cishu;

unsigned char dy;
void display(void)
{	unsigned char sdate,vvv,n;
	unsigned char disp1[6];
                			  
	for(vvv=5;vvv>0;vvv--)
	{
	switch(disp[vvv]){
		case 0x00:disp1[vvv]=0x3f;break;
		case 0x01:disp1[vvv]=0x06;break;
		case 0x02:disp1[vvv]=0x5B;break;
		case 0x03:disp1[vvv]=0x4F;break;
		case 0x04:disp1[vvv]=0x66;break;	
		case 0x05:disp1[vvv]=0x6D;break;		
		case 0x06:disp1[vvv]=0x7D;break;	
		case 0x07:disp1[vvv]=0x07;break;
		case 0x08:disp1[vvv]=0x7F;break;	
		case 0x09:disp1[vvv]=0x6F;break;	
		case 0x0a:disp1[vvv]=0x77;break;	
		case 0x0b:disp1[vvv]=0x7C;break;	
		case 0x0c:disp1[vvv]=0x39;break;	
		case 0x0d:disp1[vvv]=0x5e;break;	
		case 0x0e:disp1[vvv]=0x79;break;	
		case 0x0f:disp1[vvv]=0x71;break;
		case 0x10:disp1[vvv]=0xbf;break;	//0.
		case 0x11:disp1[vvv]=0x86;break;	
		case 0x12:disp1[vvv]=0xdb;break;	
		case 0x13:disp1[vvv]=0xcf;break;	
		case 0x14:disp1[vvv]=0xe6;break;	
		case 0x15:disp1[vvv]=0xed;break;	
		case 0x16:disp1[vvv]=0xfd;break;	
		case 0x17:disp1[vvv]=0x87;break;	
		case 0x18:disp1[vvv]=0xff;break;	
		case 0x19:disp1[vvv]=0xef;break;	
		case 0x1a:disp1[vvv]=0xf7;break;	
		case 0x1b:disp1[vvv]=0xfc;break;
		case 0x1c:disp1[vvv]=0xb9;break;
		case 0x1d:disp1[vvv]=0xde;break;
		case 0x1e:disp1[vvv]=0xf9;break;
		case 0x1f:disp1[vvv]=0xf1;break;//F.
		case 0x20:disp1[vvv]=0x76;break;//h
		case 0x21:disp1[vvv]=0x06;break;//I
		case 0x22:disp1[vvv]=0x0f;break;//j
		case 0x23:disp1[vvv]=0x73;break;//p
		case 0x24:disp1[vvv]=0x3e;break;//U
		case 0x25:disp1[vvv]=0x00;break;//灭
		case 0x26:disp1[vvv]=0x6d;break;//
		case 0x27:disp1[vvv]=0x38;break;
		case 0x28:disp1[vvv]=0x40;break;
		case 0x29:disp1[vvv]=0xe7;break;
		default:break;}
	}	
	for(vvv=5;vvv>0;vvv--)
		{
		
			sdate=disp1[vvv];

			for(n=0;n<=7;n++)

			{ACC=sdate;
			ACC<<=1;	
			L_clk=0;
	
			L_dat=CY;
	

			_nop_();	
			L_clk=1;
			sdate=ACC;
			}
		}
}
void int_t1() interrupt 3
{
 unsigned long jishu;
 ET1=0;
 TR1=0;
 tcount=tcount-1;
 if(tcount==0)
 {
  tcount=20;
  ET0=0;
  TR0=0;
 if(dirt==0)
 {
  disp[5]=0x25;
 }
 else
 {
 disp[5]=0x28;
 }
 jishu=TH0*256+TL0;
 jishu=jishu*60;
 cishu=jishu/333;
 disp[4]=(cishu-cishu%1000)/1000;
 disp[3]=(cishu%1000-cishu%100)/100;
 disp[2]=(cishu%100-cishu%10)/10;
 disp[1]=cishu%10;
  display();
  TH0=0;
  TL0=0;
  TR0=1;
  ET0=1;
  TR1=1;
  ET1=1; 
 }
 else
 {
  TH1=0x3C;//50ms
  TL1=0xb0;
  ET1=1;
  TR1=1;
 }
}
void  delay(unsigned char  j)
{
  unsigned char  k,l;
  for(l=0;l<=j;l++)
    for(k=0;k<=250;k++);
}
void main(void)
{
 WDT_CONTR=0x3c;
 TMOD=0x15;  //TO计数,TI计时
 TH0=0x00;
 TL0=0x00;
 TH1=0x3C;//50ms
 TL1=0xb0;
 tcount=20;
 CMOD=0x02;
 CL=0x00;
 CH=0x00;
 CCAP0L=256;
 CCAP0H=256;
 CCAPM0=0x42;
 CR=1;
  disp[5]=0x25;
   disp[4]=0;
   disp[3]=0;
   disp[2]=0;
   disp[1]=0;
   display();
  TR0=1;
  ET0=1;
  TR1=1;
  ET1=1;
  PT0=1;
  EA=1;
 while(1)
 {
  WDT_CONTR=0x3c; 
  if(cishu==0)
  {
  PCA_PWM0=0x03;
 // CCAP0H=256;
  }
  else if(cishu>=1500)
  {
   PCA_PWM0=0x00;
   CCAP0H=00;
   }
   else
  {
  PCA_PWM0=0x00;
 // cishu1=cishu*1000/5859;
 // CCAP0H=256-cishu1;
  CCAP0H=256-cishu*1000/5859; 
  }
  display();
  WDT_CONTR=0x3c; 
  delay(80);
 }

}


⌨️ 快捷键说明

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