📄 stepper.lst
字号:
C51 COMPILER V7.06 STEPPER 06/26/2008 14:28:37 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE STEPPER
OBJECT MODULE PLACED IN Stepper.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Stepper.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 #include "Stepper.h"
3
4 uchar keyscan(void);
5 void getkey(void);
6 void display(void);
7
8 char code str0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x89,0xc0,0xbf,0xc0,0xc0,0xc0};//0,1,2
-,3,4,5,6,7,8,9,启动,结束,反向,无,无,复位
9 char code str1[]={0x28,0x14,0x24,0x44,0x12,0x22,0x42,0x11,0x21,0x41,0x81,0x82, 0x84,0x18,0x48,0x88};
10 int code str2[]={ 0,40,80,120,160,200,240,280,320,360,100000,0,0,0,0,0} ; // 周期
11
12 static int p,flag_p;
13 unsigned int count,t;
14 char key;
15
16 /* 定时器0服务子程序 */
17 void time0() interrupt 1 using 1 // 用定时器0中断来产生CLK时钟
18 {
19 1 /* 定时10ms,产生20ms周期的时钟,也就是50Hz的时钟 */
20 1 TH0 = T/256;
21 1 TL0 = T%256;
22 1
23 1 if(count!=0)
24 1 {
25 2 CLK = ~CLK;
26 2 count--;
27 2 if(p!=10||key!=0)
28 2 {
29 3
30 3 if(count%40==0)
31 3 {
32 4 flag_p--;
33 4 P0=str0[flag_p];
34 4 LED1=0;
35 4 for(t=0;t<=10000;t++);
36 4 LED1=1;
37 4 }
38 3
39 3 }
40 2 }
41 1 else
42 1 {
43 2 P0=0x89;TR0=0;
44 2 }
45 1
46 1 }
47
48 /* 键消抖延时函数 */
49 void delay(void)
50 {
51 1 uchar i;
52 1 for (i=300;i>0;i--);
53 1 }
54
C51 COMPILER V7.06 STEPPER 06/26/2008 14:28:37 PAGE 2
55 /* 键扫描函数 */
56 uchar keyscan(void)
57 {
58 1 uchar scancode,tmpcode;
59 1 P1 = 0xf0; // 发全0行扫描码
60 1 if ((P1&0xf0)!=0xf0) // 若有键按下
61 1 {
62 2 delay(); // 延时去抖动
63 2 if ((P1&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响
64 2 {
65 3 scancode = 0xfe;
66 3 while((scancode&0x10)!=0) // 逐行扫描
67 3 {
68 4 P1 = scancode; // 输出行扫描码
69 4 if ((P1&0xf0)!=0xf0) // 本行有键按下
70 4 {
71 5 tmpcode = (P1&0xf0)|0x0f;
72 5
73 5 /* 返回特征字节码,为1的位即对应于行和列 */
74 5 return((~scancode)+(~tmpcode));
75 5 }
76 4 else scancode = (scancode<<1)|0x01; // 行扫描码左移一位
77 4 }
78 3 }
79 2 }
80 1 return(0); // 无键按下,返回值为0
81 1 }
82
83 //取键值
84 void getkey(void)
85 {
86 1 key=keyscan();
87 1
88 1 for(p=0;p<=15;)
89 1 {
90 2 if (key==str1[p])
91 2 {
92 3 break;
93 3
94 3 }
95 2 else
96 2 {
97 3 p++;
98 3
99 3 }
100 2
101 2 }
102 1
103 1 }
104
105
106 //显示子程序
107
108 void display(void)
109 {
110 1
111 1 if(key==0)
112 1 {
113 2 P0=0xc0;
114 2 }
115 1 else
116 1 {
C51 COMPILER V7.06 STEPPER 06/26/2008 14:28:37 PAGE 3
117 2 P0=str0[p];
118 2 }
119 1
120 1
121 1 }
122
123 /* 主程序 */
124 void main()
125 {
126 1 uchar key;
127 1
128 1 TMOD = 0x01; // 设置定时器0工作模式
129 1
130 1 EA = 1;
131 1 ET0 = 1;
132 1
133 1 /* 设置为2相激励 */
134 1 M1 = 0;
135 1 M2 = 0;
136 1
137 1
138 1 EN = 0; // 切断驱动输出
139 1 RET = 0; // 归位输入无效
140 1
141 1 CWB = 1; // 初始设置为顺时针方向
142 1
143 1 while(1)
144 1 {
145 2 key=keyscan(); // 调用键盘扫描函数
146 2 getkey();
147 2
148 2 switch(key)
149 2 {
150 3 case 0x81: // 0行3列,启动键
151 3 EN = 1; // 打开驱动输出
152 3 TH0 = -T/256; // 改变T可以改变步进电机转动速度
153 3 TL0 = -T%256;
154 3 TR0 = 1; // 定时器0开始计数
155 3 count=str2[p];
156 3 display();
157 3
158 3 break;
159 3 case 0x82: // 1行3列,停止键
160 3 TR0 = 0; // 定时器0停止计数
161 3 EN = 0; // 切断驱动输出
162 3 break;
163 3 case 0x84: // 2行3列,切换转向按键
164 3 CWB = ~CWB;
165 3 if(LED2==1)
166 3 LED2 = 0;
167 3 else
168 3 LED2=1;
169 3 break;
170 3 case 0x88: // 3行3列,归位键
171 3 RET = 1;
172 3 delay();
173 3 RET = 0;
174 3 break;
175 3 case 0x11: // 7
176 3
177 3 TR0 = 1; // 定时器0开始计数
178 3 count=str2[p];
C51 COMPILER V7.06 STEPPER 06/26/2008 14:28:37 PAGE 4
179 3 display();
180 3 flag_p =p;
181 3 break;
182 3 case 0x21: // 8
183 3 TR0 = 1; // 定时器0开始计数
184 3 count=str2[p];
185 3 display();
186 3 flag_p =p;
187 3 break;
188 3 case 0x41: //9
189 3
190 3 TR0 = 1; // 定时器0开始计数
191 3 count=str2[p];
192 3 display();
193 3 flag_p =p;
194 3 break;
195 3 case 0x12: // 4
196 3
197 3 TR0 = 1; // 定时器0开始计数
198 3 count=str2[p];
199 3 display();
200 3 flag_p =p;
201 3 break;
202 3 case 0x22: //5
203 3
204 3 TR0 = 1;
205 3 count=str2[p];
206 3 flag_p =p;
207 3 display();
208 3 break;
209 3 case 0x42: //6
210 3
211 3 TR0 = 1; // 定时器0开始计数
212 3 count=str2[p];
213 3 flag_p =p;
214 3 display();
215 3 break;
216 3 case 0x14: //1
217 3
218 3 TR0 = 1; // 定时器0开始计数
219 3 count=str2[p];
220 3 flag_p =p;
221 3 display();
222 3 break;
223 3 case 0x24: //2
224 3
225 3 TR0 = 1; // 定时器0开始计数
226 3 count=str2[p];
227 3 flag_p =p;
228 3 display();
229 3 break;
230 3 case 0x44: //3
231 3
232 3 TR0 = 1; // 定时器0开始计数
233 3 count=str2[p];
234 3 flag_p =p;
235 3 display();
236 3 break;
237 3 default:
238 3 break;
239 3 }
240 2 }
C51 COMPILER V7.06 STEPPER 06/26/2008 14:28:37 PAGE 5
241 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 628 ----
CONSTANT SIZE = 64 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 ----
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 + -