📄 motor_main.lst
字号:
C51 COMPILER V7.06 MOTOR_MAIN 03/24/2007 20:31:56 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MOTOR_MAIN
OBJECT MODULE PLACED IN Motor_Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Motor_Main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #define uchar unsigned char
2 #define uint unsigned int
3 #define low_speed 10
4 #define high_speed 100
5 #include<reg52.h>
6 #include<Key_Define.h>
7 #include<Get_Key_Declare.h>
8 #include<Lcd_Init_Declare.h>
9 //#include<Main_Define.h>
10 bit SData_flag=0;
11 bit step_permit=0;
12 bit direction,sisdf;//set direction flag
13 bit stepflag=0; //步进标志
14 bit run=0; //全带运行标志
15 bit stopflag=0;
16 uchar int_cnt;
17 uchar speed=50,step_length=7,thdata,tldata;
18 sbit AA= P3^4;
19 sbit AB= P3^5;
20 sbit BA= P3^6;
21 sbit BB= P3^7;
22 uchar cnt;
23 uchar sicnt=0;
24 //产生脉冲波形
25 void Timer0(void)interrupt 1 using 1
26 {
27 1 TL0=(tldata+10);
28 1 TH0=thdata;
29 1 if(step_permit) int_cnt++;
30 1 if(direction) //反转
31 1 {
32 2 switch(cnt)
33 2 {
34 3 case 0:AA=1;AB=1;BA=0;BB=0; break;
35 3 case 1:AA=0;AB=1;BA=1;BB=0; break;
36 3 case 2:AA=0;AB=0;BA=1;BB=1; break;
37 3 case 3:AA=1;AB=0;BA=0;BB=1; break;
38 3 default: break;
39 3 }
40 2 }
41 1 else {
42 2 switch(cnt)
43 2 {
44 3 case 0:AA=1;AB=1;BA=0;BB=0; break;
45 3 case 1:AA=1;AB=0;BA=0;BB=1; break;
46 3 case 2:AA=0;AB=0;BA=1;BB=1; break;
47 3 case 3:AA=0;AB=1;BA=1;BB=0; break;
48 3 default: break;
49 3 }
50 2 }
51 1 ++cnt;
52 1 if(cnt==4)cnt=0;
53 1 }
54 void SeriCab(void)interrupt 4 using 2
55 {
C51 COMPILER V7.06 MOTOR_MAIN 03/24/2007 20:31:56 PAGE 2
56 1 uchar sda;
57 1
58 1 /*if(RI)*/RI=0;
59 1 sda=SBUF;
60 1 if(sda>=64)
61 1 {
62 2 if((sda<95)&&(run==0)){step_length=sda*3;stepflag=1;}
63 2 else if((sda==0x61)&&(SData_flag==1)){run=1;stopflag=0;}
64 2 else if(sda==0x63){direction=0;sisdf=1;}
65 2 else if(sda==0x64){direction=1;sisdf=1;}
66 2 else if((sda==0x62)&&(SData_flag==1)){run=0;stopflag=1;}
67 2 else if((sda==0x65)&&(SData_flag==1)){step_permit=1;}
68 2
69 2 }
70 1 else speed=sda*2;
71 1 ++sicnt;
72 1 //if((sicnt==1)&&(stepflag==0))SData_flag=1;
73 1 if(sicnt==2){sicnt=0;SData_flag=1;}
74 1 }
75
76 void ST_Convert(void)//将转速转换为T0常数
77 {
78 1 //unsigned long tdata;
79 1 uint tdbuf;
80 1 tdbuf=(1000000/speed)/192;
81 1 tdbuf=0xffff-tdbuf;
82 1 tldata=(uchar)(tdbuf&0xff);
83 1 thdata=(uchar)((tdbuf>>8)&0xff);
84 1 }
85
86 void Get_Speed(void)//转速设置子程序
87 {
88 1 uchar spl,sph,spk,key,spd;
89 1 spd=speed;
90 1 do {
91 2 //key=0;
92 2 key=GetKey();
93 2 spk=spd/100;
94 2 sph=(spd%100)/10;
95 2 spl=spd%10;
96 2 if(spk==0)
97 2 {
98 3 spk=10;
99 3 if(sph==0)sph=10;
100 3 }
101 2 Right_Show_Figure(5,16,spk);
102 2 Right_Show_Figure(5,24,sph);
103 2 Right_Show_Figure(5,32,spl);
104 2 if((key==UP)&&(spd<high_speed))spd+=1;
105 2 else if((key==DOWN)&&(spd>low_speed))spd-=1;
106 2 }while(key!=ENTER);
107 1 speed=spd;
108 1 }
109
110 void Get_Step_Length(void)//预置步长
111 {
112 1 uchar length=10,key,lthh,lthl;
113 1 do {
114 2 key=GetKey();
115 2 lthh=length/10;
116 2 lthl=length%10;
117 2 if(lthh==0)
C51 COMPILER V7.06 MOTOR_MAIN 03/24/2007 20:31:56 PAGE 3
118 2 lthh=10;
119 2 Right_Show_Figure(5,24,lthh);
120 2 Right_Show_Figure(5,32,lthl);
121 2 if((key==UP)&&(length<45))length+=1;
122 2 else if((key==DOWN)&&(length>7))length-=1;
123 2 }while(key!=ENTER);
124 1 length&=0x3f;
125 1 step_length=length;
126 1 }
127
128 bit Operating(void) //开机初始化程序
129 { uchar key;
130 1 bit step_flag=0;
131 1 Show_Null();
132 1 key=0;
133 1 Show_Sign(); //显示===========
134 1 Show_Speed_Set(); //显示"请预置转速 "
135 1 Get_Speed(); //转速设置子程序
136 1 //ST_Convert(); //将转速转换为T0常数
137 1 Show_Null();
138 1 Show_Operation_Model();
139 1 while(key!=LEFT&&key!=RIGHT)
140 1 key=GetKey();
141 1 Show_Null();
142 1 if(key==RIGHT) //步进
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -