#include <STC89C5xRC.H> sbit PA = P1^0; sbit PB = P1^1; sbit PC = P1^2; sbit PD = P1^3; unsigned int MS =0; unsigned char KeyNum,FormKeyNum=0; unsigned char MotorDIR=0; unsigned char Motorfeq=0; unsigned int x ; unsigned char KeyScan(void) ; void main(){ PA=1; PB=PC=PD=0; TMOD=0x01; TH0=64536/265; TL0=64536%265; ET0=1; EA=1; TR0=1; while(1){ KeyNum=KeyScan(); if(KeyNum==1&&FormKeyNum==0) { if(Motorfeq<1000)Motorfeq++;} else if(KeyNum==2&&FormKeyNum==0) { if(Motorfeq>0)Motorfeq--;} else if(KeyNum==3&&FormKeyNum==0) { if(MotorDIR==0)MotorDIR=1; else MotorDIR=0;} FormKeyNum=KeyNum; } } void Timer0INT() interrupt 1{ TH0=64536/256; TL0=64536%256; MS++; if(MS>1000/Motorfeq){ MS=0; if(MotorDIR){ if(PA&&PB==0&&PC==0&&PD==0)x=1; else if(PA==0&&PB&&PC==0&&PD==0)x=2; else if(PA==0&&PB==0&&PC&&PD==0)x=3; else if(PA==0&&PB==0&&PC==0&&PD)x=4; switch(x) { case 1:PA=0;PB=1;break; case 2:PB=0;PC=1;break; case 3:PC=0;PD=1;break; case 4:PD=0;PA=1;break; } } else{ if(PA&&PB==0&&PC==0&&PD==0)x=1; else if(PA==0&&PB&&PC==0&&PD==0)x=2; else if(PA==0&&PB==0&&PC&&PD==0)x=3; else if(PA==0&&PB==0&&PC==0&&PD)x=4; switch(x) { case 1:PA=0;PD=1;break; case 2:PD=0;PC=1;break; case 3:PC=0;PB=1;break; case 4:PB=0;PA=1;break; } } } } unsigned char KeyScan(){ if(P0==0xFD)return 1; else if(P0==0xFB)return 2; else if(P0==0xF7)return 3; else return 0; }
|