采用三个按键控制电机的正反转,但是电机的转动效果不明显
以下是单片机代码:
- #include <REGX52.H>
- #define uchar unsigned char
- uchar flag = 0;
- uchar a=1,t=100;
- uchar code tab1[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
- uchar code tab2[]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
- uchar upstep4_table[]={0x08,0x02,0x06,0x01};
- void delay(uchar ms)
- {
- uchar j;
- while(ms--)
- for(j=0;j<100;j++);
- }
- void keyscan()
- {
-
- //按键一
- if(P0_0==0) //如果K1按键按下
- {
- delay(20); //延时消抖
- while(P0_0==1); //松手检测
- delay(20); //延时消抖
- flag = 1;
- }
- //按键二
- else if(P0_1==0) //如果K1按键按下
- {
- delay(20); //延时消抖
- while(P0_1==1); //松手检测
- delay(20); //延时消抖
- flag = 2;
- }
- //按键三
- else if(P0_2==0) //如果K1按键按下
- {
- delay(20); //延时消抖
- while(P0_2==1); //松手检测
- delay(20); //延时消抖
- flag = 3;
- }
- else
- flag =0;
-
- }
- void time0_init() //定时器T0初始化
- {
- TMOD=0x01; //设置定时器0工作方式1
- TH0=(65536-50000)/256;//定时50ms取高八位
- TL0=(65536-50000)%256; //取低八位
- ET0=1; //开定时器0中断使能
- EA=1; //开总中断使能
- TR0=1; //开启中断
- }
- void time0() interrupt 1 //定时器T0入口函数
- {
- TH0=(65536-50000)/256; //定时50ms重新赋初值
- TL0=(65536-50000)%256;
- keyscan();
- }
- void main()
- {
- uchar i;
- time0_init();
- P1 = 0x00;
- P2 = 0x00;
- while(1)
- {
- if(flag != 0)
- {
- if(flag == 1)
- {
- for(i=0;i<4;i++)
- {
- P1 = upstep4_table[i];
- delay(t); // 延迟t毫秒
- }
- // flag =0;
- }
- else if(flag == 2)
- {
- for(i=0;i<4;i++)
- {
- P2 = upstep4_table[i];
- delay(t); // 延迟t毫秒
- }
- // flag =0;
- }
- else if(flag == 3)
- {
- for(i=0;i<8;i++)
- {
- P2 = tab2[i];
- delay(t); // 延迟t毫秒
- }
- // flag =0;
- }
- }
- else
- {
- P1 = 0x00;
- P2 = 0x00;
- }
- }
- }
复制代码
|