📄 text1.lst
字号:
C51 COMPILER V6.12 TEXT1 09/07/2005 12:47:12 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN .\Text1.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE .\Text1.c DEBUG OBJECTEXTEND
stmt level source
1 //********************************************************************************
2 // 步近电机控制程序
3 // 完整篇
4 // 测试可以运行
5 //********************************************************************************
6
7 #include <at89x51.h>
8
9 #include <stdio.h>
10
11 bit b=0,q=0;
12
13 unsigned char code j[3]={9,6,3}; //速度选项
14
15 unsigned char code z[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//正转
16
17 unsigned char code f[8]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03};//反转
18
19 unsigned char code xs[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//显示
20
21 unsigned char code wx[]={0x01,0x02,0x04,0x10,0x20,0x40,0x80};//位选
22
23 unsigned char x,i;
24
25 unsigned char n,y,m;
26
27 unsigned int c,s,s1,s2,s3,s4;
28
29 unsigned char e[7];//缓冲数据
30
31
32
33 void delay(int a) //延时
34 { while(--a); }
35
36
37 void led() // 设定圈数并显示
38 {
39 1 s1=(int)s%10;
40 1
41 1 s2=(int)s%1000%100/10;
42 1
43 1 s3=(int)s%1000/100;
44 1
45 1 s4=(int)s/1000;
46 1
47 1 e[0]=xs[y]; //速度设定
48 1
49 1 e[1]=xs[b]; // 正反转
50 1
51 1 e[2]=xs[q]; //开始
52 1
53 1 e[3]=xs[s1]; //设定
54 1
55 1 e[4]=xs[s2];
C51 COMPILER V6.12 TEXT1 09/07/2005 12:47:12 PAGE 2
56 1
57 1 e[5]=xs[s3];
58 1
59 1 e[6]=xs[s4];
60 1
61 1 }
62
63
64
65 void control()
66
67 {
68 1 if(b==0) //判断正反转
69 1
70 1 P1=z[x];
71 1
72 1 else
73 1
74 1 P1=f[x];
75 1
76 1 if(P3_3==0) // 选择正反转
77 1
78 1 delay(10000);
79 1
80 1 if(P3_3==0)
81 1
82 1 b=~b;
83 1
84 1 if(P3_4==0) //转动速度设定
85 1
86 1 delay(10000);
87 1
88 1 if(P3_4==0)
89 1
90 1 y++;
91 1
92 1 if(y==3)
93 1
94 1 y=0;
95 1
96 1
97 1 if(P3_5==0) //转动圈数设定
98 1
99 1 delay(10000);
100 1
101 1 if(P3_5==0)
102 1
103 1 s++;
104 1
105 1 if(s==10000)
106 1
107 1 s=0;
108 1
109 1 }
110
111
112
113 void main()
114
115 {
116 1 TMOD=0x11;
117 1
C51 COMPILER V6.12 TEXT1 09/07/2005 12:47:12 PAGE 3
118 1 TH0=(65536-m*1000)/256;
119 1
120 1 TL0=(65536-m*1000)%256;
121 1
122 1 TH1=(65536-4000)/256;
123 1
124 1 TL1=(65536-4000)%256;
125 1
126 1 TR1=1;
127 1
128 1 ET1=1;
129 1
130 1 EA=1;
131 1
132 1 while(1)
133 1 {
134 2 led();
135 2
136 2 control();
137 2
138 2 if(P3_2==0) //电机启动选择(1启动,0停止)
139 2
140 2 delay(10000);
141 2
142 2 if(P3_2==0)
143 2
144 2 q=~q;
145 2
146 2 if(q==0 || c==s*10)//判断是否启动和设定圈数是否已到
147 2
148 2 ET0=0;
149 2
150 2 else
151 2
152 2 {
153 3 delay(100);
154 3
155 3 ET0=1;
156 3
157 3 TR0=1;
158 3 }
159 2 }
160 1 }
161
162
163 void t0(void) interrupt 1 using 3 //给电机脉冲
164 {
165 1 x++; //每隔(m*1000)就读取一个脉冲
166 1
167 1 c++;
168 1
169 1 if(x==8)
170 1
171 1 x=0;
172 1
173 1 m=j[y];//代入设定初始数值
174 1
175 1 TH0=(65536-m*1000)/256;
176 1
177 1 TL0=(65536-m*1000)%256;
178 1 }
179
C51 COMPILER V6.12 TEXT1 09/07/2005 12:47:12 PAGE 4
180
181
182 void t1(void) interrupt 3 using 1 // 显示部分
183
184 {
185 1
186 1 P2=wx[i];
187 1
188 1 P0=e[i];
189 1
190 1 i++;
191 1
192 1 if(i==7)
193 1
194 1 i=0;
195 1
196 1 TH1=(65536-3000)/256;
197 1
198 1 TL1=(65536-3000)%256;
199 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 573 ----
CONSTANT SIZE = 36 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 24 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -