📄 mocontrol.lst
字号:
C51 COMPILER V7.10 MOCONTROL 12/17/2007 11:35:15 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE MOCONTROL
OBJECT MODULE PLACED IN MoControl.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MoControl.c ROM(COMPACT) OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 // 目标器件: STC12C4052AD
2 // 系统频率: 外部时钟,12M.
3
4 #include <STC12C2052AD.H>
5 #include <intrins.h>
6 #define uint unsigned int
7 #define uchar unsigned char
8
9
10 #define DogReset() WDT_CONTR=0x36
11
12 #define vBtnVal_Null 0x00 // ceeback/20070316
13 #define vBtnVal_StartUp 0x01 //起停
14 #define vBtnVal_HiSpeed 0x02 //高速
15 #define vBtnVal_MiSpeed 0x04 //中速
16 #define vBtnVal_LoSpeed 0x08 //低速
17
18 #define vBtnAct_Null 0
19 #define vBtnAct_Push 1
20 #define vBtnAct_Pop 2
21 #define vBtnAct_Keep 3
22
23 #define vT0HVal 0xff
24 #define vT0LVal 0x9c
25
26 #define vBaudTime 0xfa
27
28 // T0 定时 0.1ms.作为系统计时用,
29 #define vT01ms 10
30 #define vT10ms 10
31 #define vT100ms 10
32 #define vT01S 10 // 1 s = 10 ms * 100
33
34
35 #define WaitSpeed 0
36 #define LoSpeed 1
37 #define MiSpeed 2
38 #define HiSpeed 3
39
40
41 #define STOP 0
42 #define WORK 1
43
44 #define Forward 1
45 #define Backward 0
46
47 #define vSetNum 30000
48
49 uchar idata KeyNum;
50 uchar idata cBtnVal; // 按钮取值
51 uchar idata SpeedType;
52
53 // 定时器延时
54 uchar idata cT01ms;
55 uchar idata cT10ms;
C51 COMPILER V7.10 MOCONTROL 12/17/2007 11:35:15 PAGE 2
56 uchar idata cT100ms;
57 uchar idata cT01s;
58
59 uchar idata Time_01ms;
60
61 uchar idata cDY_Clock; // 时钟计时
62
63 //正转
64 uchar idata StepTab1[6]={0x01,0x02,0x04}; //三相单三拍
65 uchar idata StepTab2[6]={0x03,0x05,0x06}; //三相双三拍
66 uchar idata StepTab3[12]={0x01,0x03,0x02,0x05,0x04,0x06}; //三相六拍
67
68 //反转
69 uchar idata StepTabRev1[6]={0x02,0x01,0x04}; //三相单三拍
70 uchar idata StepTabRev2[6]={0x05,0x03,0x06}; //三相双三拍
71 uchar idata StepTabRev3[12]={0x02,0x05,0x01,0x03,0x04,0x06}; //三相六拍
72
73 uchar cTime;
74 uint SetNum;
75 uint TurnNum;
76
77 bit b_Power; // 电机起停标志
78 bit SpeedFlag;
79
80 //-----------------------------------------------------------------------------
81 // 函数声明
82 //-----------------------------------------------------------------------------
83
84 void Para_initial(void);
85
86
87 /**************************************************************************
88 * 函数原型: void delay_1us(uint Count)
89 * 功 能: 延时Count个1us
90 **************************************************************************/
91 void delay_1us(register uint Count){
92 1
93 1 for(;Count>0;Count--){
94 2 // _nop_();
95 2 // DogReset();
96 2 }
97 1 }
98
99 /**************************************************************************
100 * 函数原型: void delay_ms(uint Count)
101 * 功 能: 延时Count个ms
102 **************************************************************************/
103 void delay_ms(register uint Count){
104 1 register uchar T;
105 1
106 1 for(;Count>0;Count--){
107 2 for(T=0;T<80;T++){
108 3 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
109 3 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
110 3 }
111 2 DogReset();
112 2 }
113 1 }
114
115
116 /**************************************************************************
117 * 函数原型: uchar ButtonScan(void);
C51 COMPILER V7.10 MOCONTROL 12/17/2007 11:35:15 PAGE 3
118 * 功 能: 对按钮进行扫描,返回按钮值
119 **************************************************************************/
120 uchar key_scan(void){
121 1
122 1 uchar ikey;
123 1 ikey=~(P3&0x0f)&0x0f;
124 1 return(ikey&0x0f);
125 1 }
126
127 /**************************************************************************
128 * 函数原型: uchar ButtonScan(void);
129 * 功 能: 对按钮进行扫描,返回按钮值
130 **************************************************************************/
131 uchar ButtonAction(void){
132 1 uchar cButton;
133 1
134 1 cButton=key_scan();
135 1 if(cButton==cBtnVal){
136 2 if(cButton==vBtnVal_Null) // 无按键
137 2 return(vBtnAct_Null);
138 2
139 2 else // 按键保持
140 2 return(vBtnAct_Keep);
141 2 }
142 1 else{
143 2 delay_ms(20);
144 2 if(key_scan()==cButton){
145 3 cBtnVal=cButton;
146 3
147 3 if(cButton==vBtnVal_Null){ // 按键弹起
148 4 return(vBtnAct_Pop);
149 4 }
150 3 else{ // 按键按下
151 4 return(vBtnAct_Push);
152 4 }
153 3 }
154 2 }
155 1 }
156
157 /**************************************************************************
158 * 函数原型: void ButtonHandle(void);
159 * 功 能: 处理按钮输入
160 **************************************************************************/
161 void ButtonHandle(void){
162 1
163 1 uchar cBtnType;
164 1 DogReset();
165 1 cBtnType=ButtonAction();
166 1 if(cBtnType==vBtnAct_Push){
167 2
168 2 switch(cBtnVal){
169 3
170 3 case vBtnVal_StartUp:
171 3 if(++KeyNum>3){
172 4 KeyNum=0;
173 4 }
174 3 switch(KeyNum){
175 4 case WaitSpeed:
176 4 b_Power=STOP;
177 4 break;
178 4
179 4 case LoSpeed:
C51 COMPILER V7.10 MOCONTROL 12/17/2007 11:35:15 PAGE 4
180 4 SetNum = 0;
181 4 b_Power = WORK;
182 4 cTime = 10;
183 4 break;
184 4
185 4 case MiSpeed:
186 4 SetNum = 0;
187 4 b_Power = WORK;
188 4 cTime = 6;
189 4 break;
190 4
191 4 case HiSpeed:
192 4 SetNum = 0;
193 4 b_Power = WORK;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -