📄 dianji001.lst
字号:
C51 COMPILER V8.08 DIANJI001 08/13/2008 13:50:26 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE DIANJI001
OBJECT MODULE PLACED IN dianji001.OBJ
COMPILER INVOKED BY: D:\电子设计程序\keil\C51\BIN\C51.EXE dianji001.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**************************************************************
2 **项目名称:两相混合式步进电机驱动程序
3 **功能描述:
4 **说 明:
5 /**************************************************************
6 头文件预处理:
7 **************************************************************/
8 #include <reg52.h>
9 #include <math.h>
10 #include <stdio.h>
11 /**************************************************************
12 数据类型宏定义:
13 **************************************************************/
14 #define uchar unsigned char
15 #define uint unsigned int
16 /*============================================================
17 I/O Ports' Definition:
18 ============================================================*/
19 sbit IN1=P2^0;
20 sbit IN2=P2^1;
21 sbit IN3=P2^2;
22 sbit IN4=P2^3;
23 sbit Led_Clk=P1^5; //clock port of 74HC164
24 sbit Led_Dat=P1^6; //data port of 74HC164
25 sbit Led_Cs=P1^7; //Led display controlling(using BJT's base)
26 /**************************************************************
27 全局变量声明:
28 **************************************************************/
29 uint t=15;
30 uchar fx;
31 uchar power;
32 uchar step0=0;
33 uchar step1=0;
34 uchar Cnt0=0;
35 uchar Cnt1=0;
36 uchar key_value,key_value_temp;
37 /**************************************************************
38 函数说明:
39 **************************************************************/
40 void Led_Display();
41 void Led_Write(uchar leddat);
42 void Key_Func();
43 //void zheng();
44 //void fan();
45 void delay(uint t);
46 void delay1();
47 /**************************************************************
48 code tab:
49 **************************************************************/
50 uchar code tab[]={
51 0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,//0-9
52 0xFF//dark all
53 };
54
55
C51 COMPILER V8.08 DIANJI001 08/13/2008 13:50:26 PAGE 2
56 void main()
57 {
58 1 TMOD=0x11; //甚至定时器0/1的工作方式
59 1 ET0=1; //允许定时器0中断
60 1 ET1=1; //允许定时器1中断
61 1 EA=1; //允许总中断
62 1
63 1 while(1)
64 1 {
65 2 Key_Func();
66 2 Led_Display();
67 2
68 2 }
69 1
70 1 }
71
72
73 /**************************************************************
74 **函数名称:Key_Func
75 **功能描述:键盘处理
76 ***************************************************************
77 **调用函数:None
78 **参 数:None
79 **返 回 值:None
80 **************************************************************/
81 void Key_Func()
82 {
83 1 P1=0xff;
84 1
85 1 key_value=P1;
86 1 key_value=(key_value&0x1f);
87 1 do
88 1 {
89 2 key_value_temp=P1;
90 2 key_value_temp=(key_value_temp&0x1f);
91 2 delay1();
92 2 }while(key_value_temp!=0x1f);
93 1
94 1 switch(key_value)
95 1 {
96 2
97 2 case 0x1e: if(t<995) t+=5;
98 2 break;
99 2
100 2 case 0x1d: if(t>5) t-=5;
101 2 break;
102 2
103 2 case 0x1b: fx=0; //正向向运转
104 2 power=1;
105 2 TH0=0xBC;
106 2 TL0=0xb0;
107 2 TR1=0; //关闭定时器1
108 2 TR0=1; //启动定时器0
109 2 IN1=0;
110 2 IN2=1;
111 2 IN3=0;
112 2 IN4=1;
113 2 break;
114 2
115 2 case 0x17: fx=1; //反向运转
116 2 power=1;
117 2 TH1=0xBC;
C51 COMPILER V8.08 DIANJI001 08/13/2008 13:50:26 PAGE 3
118 2 TL1=0xb0;
119 2 TR0=0; //关闭定时器0
120 2 TR1=1; //启动定时器1
121 2 IN1=0;
122 2 IN2=1;
123 2 IN3=0;
124 2 IN4=1;
125 2
126 2 break;
127 2
128 2 case 0x0f: power=0; //停止运转
129 2 TR0=0; //关闭定时器0
130 2 TR1=0; //关闭定时器1
131 2
132 2
133 2 default: break;
134 2 }
135 1 }
136
137 /*==================Key_Func 函数结束=======================*/
138
139
140
141 /**************************************************************
142 **函数名称:Led_Display
143 **功能描述:LED数码管显示
144 ***************************************************************
145 **调用函数:Led_Write
146 **参 数:None
147 **返 回 值:None
148 ************************************************************/
149
150 void Led_Display()
151 {
152 1 uint p=t ;
153 1 uchar s ,i;
154 1 Led_Cs=1;
155 1 for (i=0;i<3;i++)
156 1 {
157 2 s=p%10;
158 2 p=p/10;
159 2 Led_Write(s);
160 2 }
161 1 //输出转速
162 1 Led_Write(10); //全黑,作为分割点
163 1 Led_Write(fx); //运转方向标识符 1为正向,0为反向
164 1 Led_Write(power);
165 1 Led_Cs=0;
166 1 delay1(); //输出运转标识符 1为运转,0为停转
167 1 }
168 /********************Led_Display 函数结束*********************/
169
170 /**************************************************************
171 **函数名称:Led_Write
172 **功能描述:移位寄存器送出一个字节的数据
173 ***************************************************************
174 **调用函数:None
175 **参 数:None
176 **返 回 值:None
177 **************************************************************/
178 void Led_Write(uchar leddat)
179 {
C51 COMPILER V8.08 DIANJI001 08/13/2008 13:50:26 PAGE 4
180 1 uchar i;
181 1 uchar dat=tab[leddat];
182 1 for(i=0;i<8;i++)
183 1 {
184 2 if((dat&0x80)==0) Led_Dat=0;
185 2 else Led_Dat=1;
186 2
187 2 Led_Clk=0; //时钟端产生脉冲
188 2 Led_Clk=1; //送出一位数据
189 2 dat<<=1;
190 2 }
191 1 }
192
193 /*********************Led_Write 函数结束**********************/
194 /**************************************************************
195 **函数名称:delay
196 **功能描述:延时
197 ***************************************************************
198 **调用函数:None
199 **参 数:None
200 **返 回 值:None
201 **************************************************************/
202
203 void delay1()
204 {
205 1 uchar i,k;
206 1 for(i=0;i<=50;i++)
207 1 for(k=0;k<15;k++)
208 1 {
209 2 ;
210 2 }
211 1 }
212
213
214 /********************* delay 函数结束**********************/
215 void Tmr0_ISR() interrupt 1 using 1 //定时器0中断 正转
216 {
217 1 Cnt0++;
218 1 if(Cnt0==t)
219 1 {
220 2 Cnt0=0 ;
221 2 switch(step0)
222 2 {
223 3 case 0: IN1=1;
224 3 IN2=0;
225 3 break;
226 3 case 1: IN3=1;
227 3 IN4=0;
228 3 break;
229 3 case 2: IN2=1;
230 3 IN1=0;
231 3 break;
232 3 case 3: IN4=1;
233 3 IN3=0;
234 3 break; //正转输出顺序
235 3 }
236 2 if(step0==3) step0=0;
237 2 else step0++;
238 2
239 2 }
240 1 TH0=0x3c;
241 1 TH0=0xb0;
C51 COMPILER V8.08 DIANJI001 08/13/2008 13:50:26 PAGE 5
242 1 }
243 /**************************************************************/
244 void Tmr1_ISR() interrupt 3 using 2 //定时器1 反转
245 {
246 1 Cnt1++;
247 1 if(Cnt1==t)
248 1 {
249 2 Cnt1=0 ;
250 2 switch(step1)
251 2 {
252 3 case 0: IN4=1;
253 3 IN3=0;
254 3 break;
255 3 case 1: IN2=1;
256 3 IN1=0;
257 3 break;
258 3 case 2: IN3=1;
259 3 IN4=0;
260 3 break;
261 3 case 3: IN1=1;
262 3 IN2=0;
263 3 break; //反转输出顺序
264 3 }
265 2 if(step1==3) step1=0;
266 2 else step1++;
267 2 }
268 1 TH1=0x3c;
269 1 TH1=0xb0;
270 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 429 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 4
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 + -