📄 direct_motor.lst
字号:
C51 COMPILER V7.06 DIRECT_MOTOR 12/15/2004 18:36:53 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DIRECT_MOTOR
OBJECT MODULE PLACED IN direct_motor.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE direct_motor.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //p1.0接J16的2脚,p1.1接J16的1脚
2 #include<reg52.h>
3 #include<absacc.h>
4 #include<stdio.h>
5
6 #define COM8279 XBYTE[0x8041]
7 #define DATA8279 XBYTE[0x8040]
8 #define uchar unsigned char
9 #define uint unsigned int
10 #define up 1
11 #define down 0
12
13 sbit p10=P1^0;
14 sbit p11=P1^1;
15 sbit StatusBit= ACC^7;
16
17 uint time_up=20; //高电平的延时时间
18 uchar time_down=45;//低电平的延时时间
19 uchar time_count=0;//计时间个数
20 bit up_down=up; //控制正反转
21 uint freqency; //频率
22 uint speed;//转速
23
24 uchar code tab[23]={0x3f,0x06,0x5b,0x4f,0x66,0x6d, // 0 1 2 3 4 5 //
25 0x7d,0x07,0x7f,0x6f,0x77,0x7c}; // 6 7 8 9 A b //
26
27
28 void delay_up(uint time_up)//高电平的延时
29 {
30 1 uchar j;
31 1 for(j=0;j<time_up;j++)
32 1 {
33 2 ;
34 2 }
35 1 }
36
37 void delay_down(uchar time_down) //低电平的延时
38 {
39 1 uchar j;
40 1 for(j=0;j<time_down;j++)
41 1 {
42 2 ;
43 2 }
44 1 }
45
46 void deasil(void) //顺时针旋转
47 {
48 1 p10=1;
49 1 delay_up(time_up);
50 1 p10=0;
51 1 delay_down(time_down);
52 1 }
53
54 void reverse(void)//逆时针旋转
55 {
C51 COMPILER V7.06 DIRECT_MOTOR 12/15/2004 18:36:53 PAGE 2
56 1 p11=1;
57 1 delay_up(time_up);
58 1 p11=0;
59 1 delay_down(time_down);
60 1 }
61
62 void control(up_down)//控制正反转
63 {
64 1 if(up_down==up)
65 1 {
66 2 deasil();
67 2 p11=1;
68 2 }
69 1 else
70 1 {
71 2 reverse();
72 2 p10=1;
73 2 }
74 1 }
75
76 void initial_8279(void)//8279初始化
77 {
78 1 COM8279=0x00;
79 1 COM8279=0x5c;
80 1 COM8279=0x2a;
81 1 COM8279=0x94;
82 1 COM8279=0xd1;
83 1 }
84
85 void initial_interrupt(void)//中断初始化
86 {
87 1 TMOD=0x51;
88 1 TH0=0X1E;
89 1 TL0=0X58;
90 1 TH1=0;
91 1 TL1=0;
92 1 ET1=1;
93 1 TR1=1;
94 1 ET0=1;
95 1 TR0=1;
96 1 EX1=1;
97 1 EA=1;
98 1 }
99
100 void disp(uint num,uchar index) //显示
101 {
102 1 uint up_time;
103 1 COM8279=0X90+index;
104 1 //freqency=TH1*256+TL1;
105 1 // speed=freqency*30;
106 1 COM8279=0xd1;
107 1 do
108 1 {
109 2 ACC=COM8279;
110 2 }while(StatusBit==1);
111 1 while(num>0)
112 1 {
113 2 DATA8279=tab[num%10];
114 2 num=num/10;
115 2 }
116 1 up_time=time_up;
117 1 COM8279=0X94;
C51 COMPILER V7.06 DIRECT_MOTOR 12/15/2004 18:36:53 PAGE 3
118 1 DATA8279=tab[up_time%10];
119 1 up_time=up_time/10;
120 1 COM8279=0X95;
121 1 DATA8279=tab[up_time%10];
122 1 up_time=up_time/10;
123 1 COM8279=0X96;
124 1 DATA8279=tab[up_time%10];
125 1 }
126
127 void time_0(void) interrupt 1//内部中断0
128 {
129 1 uchar i;
130 1
131 1 i++;
132 1 if(i==20)
133 1 {
134 2 ET0=0;
135 2 TR1=0;
136 2 EA=0;
137 2 i=0;
138 2 freqency=TH1*256+TL1;
139 2 speed=freqency*30;
140 2 disp(speed,0);
141 2 TH1=0;
142 2 TL1=0;
143 2 ET0=1;
144 2 TR1=1;
145 2 EA=1;
146 2 }
147 1
148 1
149 1 TH0=0X1E;
150 1 TL0=0X58;
151 1 }
152
153 void int_1(void) interrupt 2//外部中断1
154 {
155 1 EA=0;
156 1 switch(DATA8279)
157 1 {
158 2 case 0xd9: //8键++
159 2 {
160 3 time_up++;
161 3 }break;
162 2 case 0xd8://4键--
163 2 {
164 3 time_up--;
165 3 }break;
166 2 case 0xc3://13键控制方向
167 2 {
168 3 up_down=~up_down;
169 3 }break;
170 2 default:;
171 2 }
172 1 EA=1;
173 1 }
174 /***********************************************
175 主程序
176 ***********************************************/
177 void main(void)
178 {
179 1 initial_8279();
C51 COMPILER V7.06 DIRECT_MOTOR 12/15/2004 18:36:53 PAGE 4
180 1 initial_interrupt();
181 1
182 1 while(1)
183 1 {
184 2 control(up_down);
185 2 }
186 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 505 ----
CONSTANT SIZE = 23 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 1
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -