📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 04/03/2009 13:14:46 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #define uint unsigned int;
3 #define uchar unsigned char
4
5 //以下定义LED片选信号
6 sbit LED_1 = P3^0;
7 sbit LED_2 = P3^1;
8 sbit LED_3 = P1^6;
9 sbit LED_4 = P1^7;
10
11 //以下定义M1驱动信号
12 sbit M1_1 = P2^0;
13 sbit M1_2 = P2^1;
14 sbit M1_3 = P2^2;
15 sbit M1_4 = P2^3;
16
17 //以下定义M2驱动信号
18 sbit M2_1 = P2^4;
19 sbit M2_2 = P2^5;
20 sbit M2_3 = P2^6;
21 sbit M2_4 = P2^7;
22
23 //以下定义M3驱动信号
24 sbit M3_1 = P3^4;
25 sbit M3_2 = P3^5;
26 sbit M3_3 = P3^6;
27 sbit M3_4 = P3^7;
28
29 //定义输入按键的序号
30 sbit K_1 = P1^0;
31 sbit K_2 = P1^1;
32 sbit K_3 = P1^2;
33 sbit K_4 = P1^3;
34 sbit K_5 = P1^4;
35 sbit K_6 = P1^5;
36
37 //以下定义共阴极LED的显示代码,0~9
38 uchar code tab[10] =
39 { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };
40
41 //以下定义电机正转代码
42 uchar code zheng[9] =
43 { 0x00,0x03,0x02,0x06,0x04,0x0c,0x08,0x09,0x01 };
44
45 //以下定义电机反转代码
46 uchar code fan[9] =
47 { 0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x00 };
48
49 //下面定义全局变量
50 uchar m1_zheng = 0;//主轴正转,用1表示,停止用0表示
51 uchar m1_zheng_val = 0;//正转的步进
52 uchar m1_fan = 0;//主轴反转,用2表示,停止用0表示
53 uchar m1_fan_val = 0;//反转步进
54
55 uchar m2_mode = 0;//m2状态 X轴增加时用0,递减时用1
C51 COMPILER V8.08 MAIN 04/03/2009 13:14:46 PAGE 2
56 uchar m2_zheng_val = 0;//m2 X轴递增时的位置
57 uchar m2_fan_val = 0;//m2 X轴递减时的位置
58 uchar m2_pre_mode = 0;//存储m2前一次的状态,递增为0,递减为1
59
60 uchar m3_mode = 0;//m3状态 Y轴增加时用0,递减时用1
61 uchar m3_zheng_val = 0;//m3 Y轴递增时的位置
62 uchar m3_fan_val = 0;//m3 Y轴递减时的位置
63 uchar m3_pre_mode = 0;//存储m3前一次的状态,递增为0,递减为1
64
65 uchar inc_dec = 0;//递增为0,递减为1
66 uchar choose_motor = 0;//电机驱动选择,1为驱动M1,2为驱动M2,3为驱动M3
67
68
69 //下面是 函数声明
70 extern void delay(uchar time);//延时程序
71 void init_cpu(void);//初始化51单片机
72 void led_show(void);//LED显示程序
73 void int0_isr();//中断处理程序
74 void motor_driver();//电机控制程序
75 void key_1();//KEY_1处理程序,既主轴正转程序
76 void key_2();//主轴反转程序
77 void key_3();//M2处理程序,既X轴电机
78 void key_4();//M3处理程序,既Y轴电机
79 void key_5();//设置X轴或Y轴位置递增或递减程序
80 void key_6();//未定义,留待功能扩展
81 //主函数开始
82 void main()
83 {
84 1 init_cpu();//初始化单片机
85 1 while(1)
86 1 {
87 2 led_show(); //显示当前电机状态
88 2 }
89 1 }
90 void init_cpu()
91 {
92 1 EA = 0;//关所有中断
93 1 IT0 = 0;//下降沿触发
94 1 EX0 = 1;//允许INT0中断
95 1 EA = 1;//开所有中断
96 1 }
97 void led_show()
98 {
99 1 uchar i;
100 1 LED_1 = 0;//显示第一个LED,既M1的状态
101 1 if(m1_zheng == 1) //如果是正传,i = 1
102 1 i = 1;
103 1 else if (m1_fan == 2)//如果是反转,i = 2
104 1 i = 2;
105 1 else
106 1 i = 0; //如果是停止,i = 0
107 1 P0 = tab[i];
108 1 delay(20);//延时20ms
109 1 LED_1 = 1;
110 1 LED_2 = 0;//显示第二个LED,既M2的状态
111 1 i = m2_mode;
112 1 P0 = tab[i];
113 1 delay(20);//延时20ms
114 1 LED_2 = 1;
115 1 LED_3 = 0;//显示第三个LED,既M3的状态
116 1 i = m3_mode;
117 1 P0 = tab[i];
C51 COMPILER V8.08 MAIN 04/03/2009 13:14:46 PAGE 3
118 1 delay(20);
119 1 LED_3 = 1;
120 1 }
121
122 void int0_isr() interrupt 0 using 0
123 { EX0 = 0;
124 1 K_1 = 1;//读数前先置1
125 1 if (K_1 == 0) key_1();//key_1按下,则调用key_1()
126 1 K_2 = 1;//读数前先置1
127 1 if (K_2 == 0) key_2();//key_2按下,则调用key_2()
128 1 K_3 = 1;//读数前先置1
129 1 if (K_3 == 0) key_3();//key_3按下,则调用key_3()
130 1 K_4 = 1;//读数前先置1
131 1 if (K_4 == 0) key_4();//key_4按下,则调用key_4()
132 1 K_1 = 1;//读数前先置1
133 1 if (K_5 == 0) key_5();//key_5按下,则调用key_5()
134 1 K_6 = 1;//读数前先置1
135 1 if (K_6 == 0) key_6();//key_6按下,则调用key_6()
136 1 EX0 = 1;
137 1 }
138
139 void key_1()
140 {
141 1 m1_zheng = 1;//表示主轴正转
142 1 m1_fan = 0;//清除反转标志
143 1 while( K_1 == 0 )//KEY_1键一直按着,则一直循环显示正转信号和主轴正转
144 1 {
145 2
146 2
147 2 led_show();
148 2 choose_motor = 1;//驱动M1
149 2 motor_driver();
150 2 if (m1_zheng_val <= 7 )
151 2 m1_zheng_val++;
152 2 else
153 2 m1_zheng_val = 0;
154 2
155 2 }
156 1
157 1 }
158
159 void key_2()
160 {
161 1 m1_zheng = 0;//清除正转标志
162 1 m1_fan = 2;//表示反转
163 1 while( K_2 == 0 )//KEY_2键一直按着,则循环显示反转信号和主轴反转
164 1 {
165 2
166 2 led_show();
167 2 choose_motor = 1;//驱动M1
168 2 motor_driver();
169 2 if (m1_fan_val <= 7 )
170 2 m1_fan_val++;
171 2 else
172 2 m1_fan_val = 0;
173 2 }
174 1 }
175
176 void key_3()
177 {
178 1 if( inc_dec == 0)//如果是递增的,
179 1 m2_mode = 0;//m2X轴位置递增
C51 COMPILER V8.08 MAIN 04/03/2009 13:14:46 PAGE 4
180 1 else
181 1 m2_mode = 1;//m2X轴位置递减
182 1 if ( m2_mode != m2_pre_mode ) //判断前一次和这次不都是递增或者递减
183 1 {
184 2 if (inc_dec == 0) m2_zheng_val=0;//这次递增,前一次递减则m2_zheng_val清0
185 2 else m2_fan_val = 0;//这次递减,前一次递增,则m2_fan_val清0
186 2 }
187 1 led_show();
188 1 choose_motor = 2;//驱动M2
189 1 motor_driver();
190 1 if( (inc_dec == 0) && (m2_zheng_val <= 8 ) )//如果是递增的,且m2_zheng_val <= 7
191 1 m2_zheng_val++;
192 1 if ( m2_zheng_val == 9 )m2_zheng_val = 0;//m2_zheng_val等于9则清0
193 1 if( (inc_dec == 1 ) && (m2_fan_val <= 8 ))//如果是 递减,且m2_fan_val <= 7
194 1 m2_fan_val++;
195 1 if ( m2_fan_val == 9 )m2_fan_val = 0;//m2_fan_val等于9则清0
196 1 while( K_3 == 0 ){;}//当KEY_3还按着时,等待,直到KEY_3松开
197 1 }
198
199 void key_4()
200 {
201 1 if (inc_dec == 0 )//如果是递增的,则m3_y加1,否则减1
202 1 m3_mode = 0;//m3 y轴位置递增
203 1 else
204 1 m3_mode = 1;//m3 y轴位置递减
205 1 led_show();
206 1 choose_motor = 3;//驱动M3
207 1 motor_driver();
208 1 if( (inc_dec == 0) && (m3_zheng_val <= 8 ) )//如果是递增的,且m3_zheng_val <= 7
209 1 m3_zheng_val++;
210 1 if ( m3_zheng_val == 9 )m3_zheng_val = 0;//m3_zheng_val等于9则清0
211 1 if( (inc_dec == 1 ) && (m3_fan_val <= 8 ))//如果是 递减,且m3_fan_val <= 7
212 1 m3_fan_val++;
213 1 if ( m3_fan_val == 9 )m3_fan_val = 0;//m3_fan_val等于9则清0
214 1 while( K_4 == 0 );//KEY_4未松开,等待
215 1 }
216
217 void key_5()
218 {
219 1 uchar i ;
220 1 i = (inc_dec ^ 0x0ff );//inc_dec中的值与0x0ff异或,值变反
221 1 inc_dec = i;
222 1 while( K_5 == 0 ){;}//KEY_5未松开,等待
223 1 }
224
225 void key_6()
226 {
227 1 ;}
228
229 void motor_driver()
230 {
231 1 uchar j;
232 1 if (choose_motor == 1 )//驱动M1
233 1 {
234 2 if(m1_zheng == 1)//如果是 正转
235 2 j = zheng[m1_zheng_val];
236 2 if(m1_fan == 2 )//如果是 反转
237 2 j = fan[m1_fan_val];
238 2 M1_1 = j^0;
239 2 M1_2 = j^1;
240 2 M1_3 = j^2;
241 2 M1_4 = j^3;
C51 COMPILER V8.08 MAIN 04/03/2009 13:14:46 PAGE 5
242 2 }
243 1 if (choose_motor == 2 )//驱动M2
244 1 {
245 2 if(m2_mode == 0 )//正转,+X
246 2 j = zheng[m2_zheng_val];
247 2 if(m2_mode == 1 )//反转,-X
248 2 j = fan[m2_fan_val];
249 2 M2_1 = j^0;
250 2 M2_2 = j^1;
251 2 M2_3 = j^2;
252 2 M2_4 = j^3;
253 2 }
254 1 if (choose_motor == 3 )//驱动M3
255 1 {
256 2 if(m3_mode == 0 )//正转,+X
257 2 j = zheng[m3_zheng_val];
258 2 if(m3_mode == 1 )//反转,-X
259 2 j = fan[m3_fan_val];
260 2 M3_1 = j^0;
261 2 M3_2 = j^1;
262 2 M3_3 = j^2;
263 2 M3_4 = j^3;
264 2 }
265 1 }
266
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 572 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 1
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -