有程序,h桥原理图以及红外的原理图
下面是用ad画的原理图和pcb
红外对管电路:
pcb:
单片机源程序:
- #include<AT89X52.H>
- #define uint unsigned int
- #define uchar unsigned char
- sbit led1=P2^4;
- sbit led2=P2^5;
- sbit led3=P2^6;
- sbit led4=P2^7;
- sbit key1=P1^0;
- sbit key2=P1^1;
- sbit key3=P1^2;
- sbit key4=P1^3;
- sbit key5=P1^4;
- sbit key6=P1^5;
- sbit zheng=P2^0;
- sbit fan=P2^1;
- sbit zhengled=P3^6;
- sbit fanled=P3^7;
- sbit zhixing=P3^5;
- uchar code table[]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,
- 0x20,0x28,0x30,0x25,0xE4,0x23,0x64,0x74};
- uint count=0,count1=0,time=0;
- uint qian,bai,shi,ge;
- uint moshi=0;
- uchar pwm=75;
- unsigned long int jishu=0,shuzhi;
- void delay(uint xms) //延时函数
- {
- int a,b;
- for(a=xms;a>0;a--)
- for(b=110;b>0;b--);
- }
- void initclock() //时钟初始化
- {
- T2MOD=0x00;
- T2CON=0x04; /*定时器2为自动重装定时工作模式) TR2=1 */
- RCAP2L=(65536-50000)%256; //给定时器T2装初值
- RCAP2H=(65536-50000)/256;
- TR2=1; //打开定时器中断1,2
- ET2=1;
- EA=1; //开中断
- }
- void timer_init() //定时器一初始化
- {
- TMOD=0x15;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- ET1=1; //开定时器零1中断
- TR1=1; //启动计数器1
- TH0=0X00;
- TL0=0X00;
- ET0=1; //开计数器中断
- TR0=1; //启动计数器器0
- EA=1; //开中断
- }
- void jisuan() //计算时间速度距离函数
- {
- if(time==1)
- {
- jishu=10;
- jishu=TH0*256+TL0; //读取计数器的值
- TH0=0X00;
- TL0=0X00; //重装
- time=0;
- TF2=0;
- RCAP2H=(65536-50000)/256;
- RCAP2L=(65536-50000)%256;
- jishu=jishu*60;
- shuzhi=jishu;
- qian=jishu/1000;
- bai=jishu%1000/100;
- shi=jishu%1000%100/10;
- ge=jishu%1000%100%10;
- }
- }
- void display()
- {
- led1=0;
- P0=table[qian];
- delay(5);
- led1=1;
- led2=0;
- P0=table[bai];
- delay(5);
- led2=1;
- led3=0;
- P0=table[shi];
- delay(5);
- led3=1;
- led4=0;
- P0=table[ge];
- delay(5);
- led4=1;
- }
- void keyscan()
- {
- if(key1==0)
- {
- delay(5);
- if(key1==0)
- {
- while(!key1);
- moshi=0;
- }
- }
- if(key2==0)
- {
- delay(5);
- if(key2==0)
- {
- while(!key2);
- moshi=1;
- }
- }
- if(key3==0)
- {
- delay(5);
- if(key3==0)
- {
- EA=0;
- delay(2);
- while(!key3);
- pwm=pwm+5;
- if(pwm>=150)
- {
- pwm=145;
- }
- EA=1;
- }
- }
- if(key4==0)
- {
- delay(5);
- if(key4==0)
- {
- while(!key4);
- EA=0;
- delay(2);
- pwm=pwm-5;
- if(pwm<=5)
- {
- pwm=5;
- }
- EA=1;
-
- }
- }
- if(key5==0)
- {
- delay(5);
- if(key5==0)
- {
- while(!key5);
- timer_init();
- initclock();
- EA=1;
- delay(100);
- zhixing=0;
- }
- }
- if(key6==0)
- {
- delay(5);
- if(key6==0)
- {
- while(!key6);
- zhixing=1;
- EA=0;
- zheng=0;
- fan=0;
- jishu=0;
- }
- }
- }
- void main()
- {
- while(1)
- {
- display();
- jisuan();
- keyscan();
- if(shuzhi<1000)
- {
- zhengled=0;
- fanled=1;
- }
- if(shuzhi>2500)
- {
- zhengled=1;
- fanled=0;
- }
- if(shuzhi>=1000&&shuzhi<=2500)
- {
- zhengled=1;
- fanled=1;
- }
- }
- }
- void T1_time()interrupt 5 //定时器
- {
- TF2=0;
- RCAP2H=(65536-50000)/256;
- RCAP2L=(65536-50000)%256;
- count++;
- if(count==10)
- {
- time=1;
- count=0;
- }
- }
- void time1(void)interrupt 3 //定时器1溢出,yichu=1
- {
- TH1=(65536-1000)/256;
- TL1=(65536-1000)%256;
- count1++;
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
下载:
H桥直流电机调速红外.rar
(1.2 MB, 下载次数: 69)
|