四川师范大学成都学院专科毕业设计
else if(SA0==1or SA2==1) {P0=12H;}
pwmcycle=60% delay(30); P0=00H; delay(20); }
void shijiancha(void) {
TMOD=0x11; /定时方式,工作在方式1 TH0=0xff; TL0=0xff; TH1=0xff; TL1=0xff; IT0=1; IT1=1; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; }
void timer1(void)interrupt 0 using 1 {
unsigned char tmp1,tmp2; do { tmp1=TH0; tmp2=TL0;
timer1=256*tmp1+tmp2; TH0=0; TL0=0;
11
四川师范大学成都学院专科毕业设计
}
void timer2(void)interrupt 1 using 1 {unsigned char tmp3,tmp4; do { tmp3=TH1; tmp4=TL1;
timer2=256*tmp3+tmp4; } TH0=0; TL0=0; }
void Tongbu(void) /两电机同步子程序 {
int e(k),ec(k); for(k=0;;k++)
{ e(k)=timer1(k)-timer2(k); ec(k)=E(k)-E(k-1); }
if(e(k)>25ms) {e(k)=25ms;} else if(e(k)<-25ms) {e(k)=-25ms;} if (ec(k)>50ms) {ec(k)=50ms;) else if(ec(k)<-50ms) {ec(k)=-50ms;}
if(e(k)>15ms) /时间误差置位规律 {E(k)[0]=1;}
else if (e(k)>8ms&&e(k)<=15ms) {E(k)[1]=1;}
else if (e(k)>0&&e(k)<=8ms)
12
四川师范大学成都学院专科毕业设计
{E(k)[2]=1;} else if (e(k)==0) {E(k)[3]=1;}
else if (e(k)>-8ms&&e(k)>0) {E(k)[4]=1;}
else if(e(k)>=-15ms&&e(k)<-8ms) {E(k)[5]=1;}
else if (e(k)<-15ms) {E(k)[6]=1;}
if(ec(k)>16&&ec(k)<=30) /时间误差变化置位规则 {Ec(k)[0]=1;}
else if (ec(k)>0&&ec(k)<=16) {Ec(k)[1]=1;} else if(ec(k)==0) {Ec(k)[2]=1;}
else if(ec(k)>-16&&ec(k)<0) {Ec(k)[3]=1;}
else if(ec(k)>=-30&&ec(k)<=-16) {Ec(k)[4]=1;}
while(E(k)[6]=1) /查表 {
if(Ec(4)=1) {U=-3;} else if(Ec(3)=1) {U=-2;} else if(Ec(2)=1) {U=-2;} else if(Ec(1)=1) {U=-1;} else if(Ec(0)=1) {U=0;} }
13
四川师范大学成都学院专科毕业设计
while(E(k)[5]=1) {
if(Ec(4)=1) {U=-3;}
else if(Ec(3)=1) {U=-2;}
else if(Ec(2)=1) {U=-2;}
else if(Ec(1)=1) {U=-1;}
else if(Ec(0)=1) {U=0;} }
按键功能程序设计,键盘和LED显示器是单片机应用系统中常用的输入/输出装置本设计采用的是动态接口程序,采用各数码管循环轮流显示的方法,当循环显示的频率较高时,利用P1.0,P2.0,P3.0,P4.0这些接口完成程序码的输出,另一接口完成各数码管的轮流点亮,根据数码管显示部分的电路设计可知,两个数码管的显示只需要控制6个单片机引脚。其中AA、BB、CC、DD引脚连接的是74LS47芯片的输入引脚,单片机控制这四个引脚输出的2进制数经过74LS47译码,控制数码管显示相应的十进制数字其中lock1,lock2分别连接两个74HC573使能端,当lock1=0,lock2=1时,红色数码管保持当前读数不变,蓝色数码管根据AA、BB、CC、DD的输出信号改变数字,当lock1=1lock2=0时,蓝色数码管保持当前读数不变,红色数码管根据P1、P2、P3、P4的输出信号改变灯的循环循序。该程序中包含了毫秒延时函数,具体仿真图见附录2,汇编语言程序设计如下。 ORG 0000H
AJMP START1 ORG 0030H SAME
EQU 4EH
;无输入时无输出
START1: MOV P1,#00H START: MOV A,P3
;读P3口数据
ANL A,#1FH ;取用P3口的低五位数据
;对P3口低五位数据进行判断
14
CJNE A,#1FH,SHIY
四川师范大学成都学院专科毕业设计
AJMP START1
SAME, A YS
;延时 ;读P3口的数据 ;取用P3口的低五位数据
SHIY: MOV
LCALL
MOV A,P3
ANL A,#1FH
CJNE A,#1FH,SHIY1 ;对P3口的低五位数据进行判断 AJMP START1
;开关没有动作时无输出
SHIY1: CJNE A,SAME,START1
CJNE A,#17H,NEXT1 ;P3.3=0时进入左转分支 AJMP LEFT
NEXT1: CJNE A,#0FH,NEXT2 ;P3.4=0时进入右转分支
AJMP RIGHT
NEXT2: CJNE A,#1DH,NEXT3 ;P3.1=0时进入紧急分支
AJMP EARGE
NEXT3: CJNE A,#1EH,NEXT4 ;P3.0=0时进入刹车分支
AJMP BRAKE
NEXT4: CJNE A,#1BH,NEXT5 ;P3.2=0时进入停靠分支
AJMP STOP
;其他情况进入错误分支
;左转分支
NEXT5: AJMP ERROR LEFT: MOV P1,#2AH
YS: MOV R7,#04H ;延时 YS0: YS1:
MOV
R6, #0FFH
DJNZ R6, YS1 DJNZ R7, YS0 RET MOV
R7,#04H R6, #0FFH R5, #0FFH
;延时
Y1s:
Y1s1: MOV Y1s2: MOV
DJNZ R6, Y1s2 DJNZ R7, Y1s1 RET
R7,#66H
;延时
15
Y100ms: MOV