📄 xiugai.lst
字号:
C51 COMPILER V7.02a XIUGAI 03/18/2009 14:11:51 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE XIUGAI
OBJECT MODULE PLACED IN xiugai.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE xiugai.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 /*********************************************************************************************************
-********
3 2009年3月5日14:58:54
4 下面的程序已经实现了步进电机的基本控制很好。现在要实现附加的功能
5 **********************************************************************************************************
-*******/
6 #include <AT89X51.h>
7 #define uint unsigned int;
8 #define uchar unsigned char
9 //以下定义LED片选信号
10 sbit LED_1 = P3^0;
11 //定义输入按键的序号
12 sbit K_1 = P1^0;
13 sbit K_2 = P1^1;
14 sbit K_3 = P1^2;
15 sbit K_4 = P1^3;
16 sbit K_5 = P1^4;
17 sbit K_6 = P1^5;
18 //以下定义共阴极LED的显示代码,0~9
19 uchar code tab[10] =
20 {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
21 //以下定义M1驱动信号
22 sbit M1_1 = P2^0;
23 sbit M1_2 = P2^1;
24 sbit M1_3 = P2^2;
25 sbit M1_4 = P2^3;
26
27 static unsigned int count; //计数
28 static int step_index; //步进索引数,值为0-7 即是到该转哪一步了
29 static bit turn; //步进电机转动方向 turn=1 反向 turn=0 正向
30 static bit stop_flag; //步进电机停止标志
31 static int speedlevel; //步进电机转速参数,数值越大速度越慢,最小值为1,速度最快
32 static int spcount; //步进电机转速参数计数
33 void delay(unsigned int endcount); //延时函数,延时为endcount*0.5毫秒
34 void gorun(); //步进电机控制步进函数
35 //主函数开始
36 void main(void)
37 {
38 1
39 1 LED_1 = 0;//显示第一个LED,既M1的状态
40 1 count = 0;
41 1 step_index = 0;
42 1 speedlevel =2;
43 1 spcount = 0;
44 1 stop_flag = 1;//这里一开始设定为 stop_flag = 0 表示开机即进行运转,stop_flag = 1则表示停止
45 1 P2_0 = 0;
46 1 P2_1 = 0;
47 1 P2_2 = 0;
48 1 P2_3 = 0;
49 1 EA = 1; //允许CPU中断
50 1 TMOD = 0x11; //设定时器0和1为16位模式1
51 1 ET0 = 1; //定时器0中断允许
52 1
53 1 TH0 = 0x50; //BEFORE FE0C
C51 COMPILER V7.02a XIUGAI 03/18/2009 14:11:51 PAGE 2
54 1 TL0 = 0x00; //设定时每隔65.53ms中断一次
55 1 TR0 = 1; //开始计数
56 1
57 1 delay(10000);
58 1
59 1 }
60 //定时器0中断处理 在这个中断中完成步进电机的步进功能的
61 void timeint(void) interrupt 1
62 {
63 1 TH0=0x50;
64 1 TL0=0x00;//设定时每隔65.536ms中断一次
65 1 TR0 = 1;
66 1 count++;
67 1 spcount--;
68 1 if(spcount<=0) //速度调整,SPEEDLEVEL越大,延时越长(延时约为1MS*SPEEDLEVEL),// 频率越小,速度越慢
69 1 {
70 2 spcount = speedlevel;
71 2
72 2 gorun();
73 2 }
74 1 K_1 = 1;//读数前先置1
75 1 if (K_1 == 0) stop_flag = 1;
76 1 K_2 = 1;//读数前先置1
77 1 if (K_2 == 0) stop_flag = 0 ;
78 1 K_3 = 1;//读数前先置1
79 1 if (K_3 == 0) turn = 1 ;
80 1 K_4 = 1;//读数前先置1
81 1 if (K_4 == 0) turn= 0 ;
82 1 K_5 = 1;//读数前先置1
83 1 if (K_5 == 0)
84 1 {
85 2
86 2 speedlevel+=1;
87 2 }
88 1 K_6 = 1;//读数前先置1
89 1 if (K_6 == 0)
90 1 {
91 2 speedlevel-=1;
92 2 }
93 1 }
94
95 void delay(unsigned int endcount)
96 {
97 1 count=0;
98 1 do{}while(count<endcount);
99 1 }
100
101 void gorun()
102 {
103 1 if (stop_flag==1)
104 1 {
105 2 P2_0 = 0;
106 2 P2_1 = 0;
107 2 P2_2 = 0;
108 2 P2_3 = 0;
109 2 P0 = tab[0];
110 2 return;
111 2 }
112 1 else if (stop_flag==0)
113 1 {
114 2 if (turn==0)
115 2 P0 = tab[1];
C51 COMPILER V7.02a XIUGAI 03/18/2009 14:11:51 PAGE 3
116 2 else
117 2 P0 = tab[2];
118 2 }
119 1
120 1 switch(step_index)
121 1 {
122 2 case 0: //0
123 2 P2_0 = 0;
124 2 P2_1 = 0;
125 2 P2_2 = 0;
126 2 P2_3 = 1;
127 2 break;
128 2 case 1: //0、1
129 2 P2_0 = 0;
130 2 P2_1 = 0;
131 2 P2_2 = 1;
132 2 P2_3 = 1;
133 2 break;
134 2 case 2: //1
135 2 P2_0 = 0;
136 2 P2_1 = 0;
137 2 P2_2 = 1;
138 2 P2_3 = 0;
139 2 break;
140 2 case 3: //1、2
141 2 P2_0 = 0;
142 2 P2_1 = 1;
143 2 P2_2 = 1;
144 2 P2_3 = 0;
145 2 break;
146 2 case 4: //2
147 2 P2_0 = 0;
148 2 P2_1 = 1;
149 2 P2_2 = 0;
150 2 P2_3 = 0;
151 2 break;
152 2 case 5: //2、3
153 2 P2_0 = 1;
154 2 P2_1 = 1;
155 2 P2_2 = 0;
156 2 P2_3 = 0;
157 2 break;
158 2 case 6: //3
159 2 P2_0 = 1;
160 2 P2_1 = 0;
161 2 P2_2 = 0;
162 2 P2_3 = 0;
163 2 break;
164 2 case 7: //3、0
165 2 P2_0 = 1;
166 2 P2_1 = 0;
167 2 P2_2 = 0;
168 2 P2_3 = 1;
169 2 }
170 1 if (turn==0)
171 1 {
172 2 step_index++;
173 2 if (step_index>7)
174 2 step_index=0;
175 2 }
176 1 else
177 1 {
C51 COMPILER V7.02a XIUGAI 03/18/2009 14:11:51 PAGE 4
178 2 step_index--;
179 2 if (step_index<0)
180 2 step_index=7;
181 2 }
182 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 411 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 ----
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 + -