📄 main.lst
字号:
C51 COMPILER V7.20 MAIN 04/13/2006 13:47:58 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil_C51\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 * Copyright (C) 2006, 华中科技大学电气与电子科技创新中心
3 * All Rights Reserved.
4 *
5 * 文件名: main.c
6 * 文件描述: STI51开发板测试程序主文件
7 *
8 * 当前版本: 1.0
9 * 作者: SangWei(swkyer@gmail.com)
10 * 完成日期: 2005年12月22日
11 *
12 */
13 #include <REGX52.h>
14 #include <INTRINS.H>
15 #include "SEG7\SEG7.h"
16 #ifdef __AT89X52_H__
17 #include "UART\uart.h"
18 #endif
19 #include "SMC162\SMC162.h"
20 #include "TLC549\TLC549.h"
21 #include "TLC5620\TLC5620.h"
22
23 /* 蜂鸣器控制引脚 */
24 #define BEEP_PIN 0x10
25
26 /* 定时时间高低字节数据 */
27 #define TIMERH 0xEE
28 #define TIMERL 0xFF
29
30 /* 蜂鸣器定时时间 */
31 #define BEEPTMH 0xFF
32 #define BEEPTML 0x80
33
34 void InitTimer0(void);
35 void InitTimer1(void);
36 unsigned char beepcnt1;
37 unsigned int beepcount;
38 void Beep(unsigned char tms);
39
40 #define KEY1 0x20
41 #define KEY2 0x40
42 #define KEY3 0x80
43 unsigned char key, key_old, key_oold;
44
45 bit bkey1, bkey2, bkey3;
46
47 unsigned char advalue, adcnt;
48 unsigned int adsum, addisplay;
49
50 #ifdef __AT89X52_H__
51 unsigned char uartbuf, uart_status;
52 #endif
53
54 void main(void)
55 {
C51 COMPILER V7.20 MAIN 04/13/2006 13:47:58 PAGE 2
56 1 unsigned char i, j;
57 1 unsigned char outdat[4];
58 1
59 1 P0 = 0xFF;
60 1 P1 = 0xFF;
61 1 P2 = 0xFF;
62 1
63 1 Beep(3);
64 1
65 1 TLC5620_Init();
66 1
67 1 LcdInit();
68 1 PutStr(0, 0, " STI51 Dev Board ");
69 1 PutStr(0, 1, " HUST STI ");
70 1
71 1 /* 测试单路输出电压 */
72 1 TLC5620_SetOutput(CHL0, 0);
73 1 TLC5620_SetOutput(CHL1, 0x3F);
74 1 TLC5620_SetOutput(CHL2, 0x7F);
75 1 TLC5620_SetOutput(CHL3, 0xFF);
76 1
77 1 #ifdef __AT89X52_H__
78 1 uart_status = 0;
79 1 UartInit(BAUDRATE_38400);
80 1 SendString("STI51 Dev Board, HUST-STI\r\n");
81 1 #endif
82 1
83 1 adcnt = 0;
84 1 adsum = 0;
85 1
86 1 key = P1&0xE0;
87 1 key_oold = key_old = key;
88 1 bkey1 = bkey2 = bkey3 = 0;
89 1
90 1 InitTimer1();
91 1 dispram[0] = 0;
92 1 dispram[1] = 1;
93 1 dispram[2] = 2;
94 1 dispram[3] = 3;
95 1 TR1 = 1;
96 1
97 1 i = j = 0;
98 1 while(1)
99 1 {
100 2 i++;
101 2 /* 四路同时输出相位不同的锯齿波电压 */
102 2 outdat[CHL0] = i;
103 2 outdat[CHL1] = i + 64;
104 2 outdat[CHL2] = i + 128;
105 2 outdat[CHL3] = i + 192;
106 2 TLC5620_AllOutput(outdat);
107 2
108 2 if(bkey3 == 1)
109 2 {
110 3 advalue = TLC549_GetAD();
111 3 if(adcnt == 255)
112 3 {
113 4 adcnt = 0;
114 4 addisplay = adsum / 128; /* 求累加和,平均值滤波 */
115 4 dispram[0] = 0x10; /* 刷新显示值 */
116 4 dispram[1] = (addisplay/100) | 0x80;/* 添加小数点 */
117 4 dispram[2] = (addisplay%100)/10;
C51 COMPILER V7.20 MAIN 04/13/2006 13:47:58 PAGE 3
118 4 dispram[3] = addisplay%10;
119 4 adsum = 0; /* 累加值清零 */
120 4 }
121 3 else
122 3 {
123 4 adcnt++;
124 4 adsum += advalue; /* 累加128次 */
125 4 }
126 3 }
127 2
128 2 if(key == key_old && key_old == key_oold && key != 0xE0)
129 2 {
130 3 EA = 0;
131 3 if(!(key&KEY1))
132 3 {
133 4 bkey1 ^= 1;
134 4 if(bkey1 == 0)
135 4 {
136 5 PutStr(0, 0, " STI51 Dev Board ");
137 5 PutStr(0, 1, " HUST STI ");
138 5 }
139 4 else
140 4 {
141 5 PutStr(0, 0, " KEY S3 Pressed ");
142 5 PutStr(0, 1, " <--- Back ");
143 5 }
144 4 }
145 3 else if(!(key&KEY2))
146 3 {
147 4 bkey2 ^= 1;
148 4 bkey3 = 0;
149 4 if(bkey2 == 0)
150 4 {
151 5 dispram[0] = 4;
152 5 dispram[1] = 5;
153 5 dispram[2] = 6;
154 5 dispram[3] = 7;
155 5 }
156 4 else
157 4 {
158 5 dispram[0] = 0;
159 5 dispram[1] = 1;
160 5 dispram[2] = 2;
161 5 dispram[3] = 3;
162 5 }
163 4 }
164 3 else if(!(key&KEY3))
165 3 {
166 4 bkey3 = 1;
167 4 }
168 3 EA = 1;
169 3 }
170 2
171 2 if(i == 255)
172 2 {
173 3 if(j >= 3)
174 3 j = 0;
175 3 else
176 3 j++;
177 3 }
178 2 P1 = 0xE0 | (~(1<<j));
179 2
C51 COMPILER V7.20 MAIN 04/13/2006 13:47:58 PAGE 4
180 2 #ifdef __AT89X52_H__
181 2 /* 串口协议(0xAA, 0x55, 0xAA)处理 */
182 2 if(IsUartReceived())
183 2 {
184 3 ReadChar(&uartbuf);
185 3 if(uart_status == 0)
186 3 {
187 4 if(uartbuf == 0xAA)
188 4 uart_status = 1;
189 4 else
190 4 uart_status = 0;
191 4 }
192 3 else if(uart_status == 1)
193 3 {
194 4 if(uartbuf == 0x55)
195 4 uart_status = 2;
196 4 else
197 4 uart_status = 0;
198 4 }
199 3 else if(uart_status == 2)
200 3 {
201 4 uart_status = 0;
202 4 if(uartbuf == 0xAA)
203 4 SendString("Protocol: 0xAA, 0x55, 0xAA Received\r\n");
204 4 }
205 3 else
206 3 uart_status = 0;
207 3 }
208 2 #endif
209 2 }
210 1 }
211
212 /**************************************
213 说明: 定时器1初始化
214 定时时间10mS
215 **************************************/
216 void InitTimer1(void)
217 {
218 1 /* 变量初始化 */
219 1 seg7cs = 0;
220 1 dispram[0] = dispram[1] = dispram[2] = dispram[3] = 0;
221 1 /* 初始化定时器,定时时间10mS,允许定时器中断 */
222 1 TMOD = 0x90;
223 1 TH1 = TIMERH;
224 1 TL1 = TIMERL;
225 1 /* 开定时器中断 */
226 1 EA = 1;
227 1 ET1 = 1;
228 1 }
229
230 /**************************************
231 说明: 定时器1中断处理函数
232 **************************************/
233 void Timer1ISR(void) interrupt 3 using 2
234 {
235 1 /* 定时器重装 */
236 1 TH1 = TIMERH;
237 1 TL1 = TIMERL;
238 1 /* 清中断标志 */
239 1 TF1 = 0;
240 1 /* 键盘检测 */
241 1 key_oold = key_old;
C51 COMPILER V7.20 MAIN 04/13/2006 13:47:58 PAGE 5
242 1 key_old = key;
243 1 key = P1 & 0xE0;
244 1 /* 循环显示 */
245 1 if(seg7cs >= 3)
246 1 seg7cs = 0;
247 1 else
248 1 seg7cs++;
249 1 WriteSegData(dispram[seg7cs]);
250 1 WriteCsData(1<<seg7cs);
251 1 }
252
253 /**************************************
254 说明: 定时器初始化
255 定时时间0.5mS
256 **************************************/
257 void InitTimer0(void)
258 {
259 1 /* 变量初始化 */
260 1 beepcnt1 = 0;
261 1 beepcount = 0;
262 1 /* 初始化定时器,定时时间0.5mS,允许定时器中断 */
263 1 TMOD = 0x09;
264 1 TH0 = BEEPTMH;
265 1 TL0 = BEEPTML;
266 1 /* 开定时器中断 */
267 1 EA = 1;
268 1 ET0 = 1;
269 1 }
270
271 /**************************************
272 说明: 定时器0中断处理函数
273 **************************************/
274 void Timer0ISR(void) interrupt 1 using 3
275 {
276 1 /* 定时器重装 */
277 1 TH0 = BEEPTMH;
278 1 TL0 = BEEPTML;
279 1 /* 清中断标志 */
280 1 TF0 = 0;
281 1 /* 循环显示 */
282 1 if(beepcnt1%2)
283 1 P1 ^= BEEP_PIN;
284 1 beepcount++;
285 1 }
286
287 void Beep(unsigned char tms)
288 {
289 1 InitTimer0();
290 1 TR0 = 1;
291 1
292 1 while(1)
293 1 {
294 2 if(beepcount == 1000)
295 2 {
296 3 EA = 0;
297 3 beepcount = 0;
298 3 EA = 1;
299 3 if(beepcnt1 == 2*tms)
300 3 break;
301 3 else
302 3 beepcnt1++;
303 3 }
C51 COMPILER V7.20 MAIN 04/13/2006 13:47:58 PAGE 6
304 2 }
305 1
306 1 TR0 = 0;
307 1 EA = 0;
308 1 ET0 = 0;
309 1 }
310
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 739 ----
CONSTANT SIZE = 133 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 6
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 + -