?? main.lst
字號:
C51 COMPILER V8.05a MAIN 08/11/2007 16:59:45 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\main.c BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\main.lst)
- OBJECT(main.obj)
line level source
1 //*************************************************************************************************
2 //*************************************************************************************************
3 //**<程序名>:鍵盤控制直流電機運轉。 **
4 //**<功能>:通過按鍵控制直流電機運轉并在LCD上顯示運行狀態。 **
5 //**<作者>:LastRitter **
6 //**<完成時間>:2007年8月8日 **
7 //**<聯系方式>:E-Mail:superyongzhe@163.com;QQ:314665354。 **
8 //*************************************************************************************************
9 //*************************************************************************************************
10 #include "includes.h"
11
12
13 #define TIME0H 0xFF
14 #define TIME0L 0x9C //定時器0溢出時間:0.1ms
15
16
17 #define TIME1H 0x3C
18 #define TIME1L 0xB0 //定時器1溢出時間:50ms
19
20
21
22 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
23 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PWM調制計數>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
24 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
25 unsigned char uc_MoCount=0;
26 unsigned char uc_MoChange=128;
27
28 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
29 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖動標志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
30 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
31 bit b_KeyShock=0; //鍵盤防抖動標志位。
32 //當按鍵中斷產生時,首先判斷此位。
33 //0--執行鍵盤掃描及鍵碼處理程序;1--不執行。
34
35 bit b_KillShock=0; //防抖標志清除位:0--不清除;1--清除。
36
37 unsigned char uc_KillCount=1; //抖動標志清除計數,使用定時器1。
38
39
40 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
41 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<鍵盤掃描開啟標志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
42 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
43 bit b_KeyScan=0; //0--不掃描;
44 //1--掃描。
45
46
47
48 void main()
49 {
50 1 vdInitialize();
51 1
52 1 vWriteCMD(0x80);
53 1 vShowChar("Motor Run Status");
54 1 vWriteCMD(0xC4);
C51 COMPILER V8.05a MAIN 08/11/2007 16:59:45 PAGE 2
55 1 vShowChar("Stop");
56 1 vWriteCMD(0xCC);
57 1 vShowNumber(uc_MoChange);
58 1
59 1 SCANPORT=0x0F;
60 1
61 1 MOTORPORT=MO_STOP;
62 1
63 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中斷0,用于開啟鍵盤掃描及鍵碼處理標志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
64 1 IT0=1; // 中斷方式:下降沿。
65 1 EX0=1; // 開啟外部中斷。
66 1
67 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定時器0,定時器0中斷,用于PWM調制計數 >>>>>>>>>>>>>>>>>>>>>>>>
68 1 TMOD=0x11;
69 1
70 1 TH0=TIME0H;
71 1 TL0=TIME0L;
72 1 TR0=1;
73 1 ET0=1;
74 1
75 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定時器1,用于防抖動標志清除 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
76 1 TH1=TIME1H;
77 1 TL1=TIME1L;
78 1 TR1=1; //開啟定時器1
79 1 ET1=1; //開定時器1中斷
80 1
81 1
82 1 EA=1;
83 1
84 1 while(1)
85 1 {
86 2 if(b_KeyScan==1) //如果有按鍵按下,則進行按鍵掃描和鍵碼處理。
87 2 {
88 3 b_KeyScan=0;
89 3 vKeyProcess(ucKeyScan());
90 3 }
91 2 }
92 1 }
93
94 //*************************************************************************************************
95 //* *
96 //* ******************************外部中斷0,用于開啟鍵盤掃描及鍵碼處理****************** *
97 //* *
98 //*************************************************************************************************
99 void vINT0(void) interrupt 0
100 {
101 1 if(b_KeyShock==0)
102 1 {
103 2 b_KeyScan=1; //開啟鍵盤掃描標志。
104 2 b_KeyShock=1; //設置防抖動標志。
105 2 }
106 1 else b_KeyShock=0; //如果有抖動則不執行鍵掃描,恢復防抖動標志。
107 1
108 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<設置防抖動清除標志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
109 1 if(b_KeyShock==1)
110 1 b_KillShock=1; //如果防抖動標志位開啟則開啟防抖動標志清除位,
111 1 //300ms后清除防抖動標志。
112 1
113 1 }
114
115
116 //*************************************************************************************************
C51 COMPILER V8.05a MAIN 08/11/2007 16:59:45 PAGE 3
117 //* *
118 //* ****************************定時器0中斷,用于PWM調制計數**************************** *
119 //* *
120 //*************************************************************************************************
121 void vTimer0() interrupt 1
122 {
123 1
124 1 if(uc_MoChange>128) //正向。
125 1 {
126 2 if(uc_MoCount<uc_MoChange)
127 2 MOTORPORT=MO_COMMON;
128 2 else
129 2 MOTORPORT=MO_CUTOFF;
130 2 }
131 1 else
132 1 {
133 2 if(uc_MoChange<127) //反向。
134 2 {
135 3 if(uc_MoCount>uc_MoChange)
136 3 MOTORPORT=MO_OPPOSE;
137 3 else
138 3 MOTORPORT=MO_CUTOFF;
139 3 }
140 2 else
141 2 MOTORPORT=MO_STOP; //停止
142 2 }
143 1
144 1
145 1
146 1
147 1 if(uc_MoCount<255)
148 1 uc_MoCount++;
149 1 else
150 1 uc_MoCount=0;
151 1
152 1 TH0=TIME0H;
153 1 TL0=TIME0L;
154 1 }
155 //*************************************************************************************************
156 //* *
157 //* ****************定時器1中斷,用于計時功能和防抖動標志清除以及顯示報告**************** *
158 //* *
159 //*************************************************************************************************
160 void vTimer1(void) interrupt 3
161 {
162 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
163 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖動標志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
164 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
165 1 if(b_KillShock==1)
166 1 {
167 2 if(uc_KillCount==5) //當防抖動標志位為1時,計時300ms后清除抖動標志位。
168 2 {
169 3 b_KeyShock=0;
170 3 b_KillShock=0;
171 3 uc_KillCount=1;
172 3 }
173 2 else uc_KillCount++;
174 2 }
175 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
176 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢復定時器1溢出時間>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
177 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
178 1 TH1=TIME1H;
C51 COMPILER V8.05a MAIN 08/11/2007 16:59:45 PAGE 4
179 1 TL1=TIME1L;
180 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 227 ----
CONSTANT SIZE = 22 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -