📄 display.lst
字号:
C51 COMPILER V7.08 DISPLAY 06/07/2008 20:06:02 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE DISPLAY
OBJECT MODULE PLACED IN display.OBJ
COMPILER INVOKED BY: D:\PTOOL\Keil\C51\BIN\C51.EXE display.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <intrins.h>
3
4 unsigned char data STATUS;
5 #define Idle 0
6 #define Receiving 1
7 #define Sending 2
8 #define Data 3
9
10 unsigned char data Rx_Count;
11 unsigned char data Tx_Count;
12 unsigned char data Tx_Length;
13 unsigned char data Timeout;
14 unsigned int Count_1ms;
15
16
17 code char string[15] ="Welcome you!\r\n";
18 code char Time[16] = "Time set OK!\r\n";
19 code char Date[16] = "Date set OK!\r\n";
20 code char Eorr[16] = "Input data OK!\r\n";
21 code char Init_Date[7] = "0080320";
22 code char Init_Time[7] = "1161215";
23 //0 1 2 3 4 5 6 7 8 9
24 code char LED_NUM[11] = {0x11,0xd7,0x32,0x92,0xd4,0x98,0x18,0xd3,0x10,0x90,0x00};
25
26 unsigned char data Rx_Buffer[16];
27 unsigned char data Tx_Buffer[16];
28 unsigned char data LED_Date[7];
29 unsigned char data LED_Time[7];
30 unsigned char data LED_Disp[7];
31
32 sbit Buzzer = P1^0; //0:响 1:不响
33
34 sbit IIC_CLK = P0^0;
35 sbit IIC_DI = P0^1;
36 sbit LED = P0^2; //0:亮
37 bit Flag;
38 bdata Key;
39
40 #define OSC_CLK (11059200UL)
41 #define OSC_INST (12) //每条指令的时钟周期
42 #define Time_1ms (65536-(unsigned int)(OSC_CLK/(OSC_INST * 1085)))
43 #define TH_1ms (Time_1ms / 256)
44 #define TL_1ms (Time_1ms % 256)
45
46 /****************************************************/
47 /*硬件初始化*/
48 /****************************************************/
49 void Init()
50 {
51 1 TMOD=0x11; //t0为16位定时器,t1为16位定时器,模式1 GATE C/T M1 M0
52 1 SCON=0x50; //串行口工作在模式1,波特率可变 SM0 SM1 SM2 REN TB8 RB8 TI RI
53 1 PCON=0; //SMOD=0 定时器溢出率/32
54 1
55 1 TH0=0xfc;
C51 COMPILER V7.08 DISPLAY 06/07/2008 20:06:02 PAGE 2
56 1 TL0=0x17;
57 1 TR0=1;
58 1
59 1 TH1=TH_1ms;
60 1 TL1=TL_1ms;
61 1 TR1=1;
62 1
63 1 TI=0;
64 1 RI=0;
65 1
66 1 //TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL
67 1 TR2=0;
68 1 RCAP2H=0xff; //T2做波特率发生器
69 1 RCAP2L=0xdc;
70 1 RCLK=1; //接收时钟标志,1->为定时/计算器2为串口接收时钟
71 1 TCLK=1; //发送时钟标志
72 1 TR2=1;
73 1
74 1 /*开中断*/
75 1 IP=0x00; //PS=T0=T1
76 1 ET0=1;
77 1 ET1=1; //1ms定时
78 1 //ET2=1;
79 1 ES=1;
80 1 EA=1;
81 1 }
82 /****************************************************/
83 /*定时器0中断*/
84 /****************************************************/
85 void T0_int(void) interrupt 1 using 2
86 {
87 1 TL0=0;
88 1 TH0=0;
89 1 switch(STATUS)
90 1 {
91 2 case Receiving: //正在接收数据,进行数据包接收完成超时判定
92 2 {
93 3 if(Timeout<10)
94 3 Timeout++;
95 3 else
96 3 {
97 4 Timeout=0;
98 4 STATUS=Data; //数据包接收完成,等待处理数据
99 4 }
100 3 break;
101 3 }
102 2
103 2 case Sending: //正在发送数据,超时判断,如果超发送不成功释放RS232
104 2 {
105 3 if(Timeout<100)
106 3 Timeout++;
107 3 else
108 3 {
109 4 Timeout=0;
110 4 STATUS=Idle; //超时释放RS232
111 4 }
112 3 break;
113 3 }
114 2 case Idle:
115 2 {
116 3 Timeout=0;
117 3 }
C51 COMPILER V7.08 DISPLAY 06/07/2008 20:06:02 PAGE 3
118 2
119 2 default: break;
120 2 }
121 1 }
122 /****************************************************/
123 /*中断服务程序*/
124 /****************************************************/
125 void RS_int(void) interrupt 4 using 3
126 {
127 1 if(RI==1)
128 1 {
129 2 RI=0;
130 2 switch(STATUS)
131 2 {
132 3 case Idle:
133 3 {
134 4 Timeout=0;
135 4 Rx_Count=0;
136 4 STATUS=Receiving;
137 4 break;
138 4 }
139 3 case Receiving:
140 3 {
141 4 Timeout=0;
142 4 break;
143 4 }
144 3 }
145 2 Rx_Buffer[Rx_Count]=SBUF;
146 2 Rx_Count++;
147 2 Rx_Count %=16;
148 2 }
149 1 if(TI==1)
150 1 {
151 2 TI=0;
152 2 if((Tx_Count+1)>=Tx_Length) /*数据发送完毕*/
153 2 {
154 3 Tx_Count=0;
155 3 //Tx_Length=0;
156 3 STATUS=Idle;
157 3 return;
158 3 }
159 2 else
160 2 { Timeout=0; //清除定时器
161 3 Tx_Count++;
162 3 SBUF=Tx_Buffer[Tx_Count];
163 3 }
164 2
165 2 }
166 1 }
167 /****************************************************/
168 /*T1 1ms子程序*/
169 /****************************************************/
170 void T1_int(void) interrupt 3 using 1
171 {
172 1 TR1 = 0;
173 1 TL1=TL_1ms;
174 1 TH1=TH_1ms;
175 1 TR1 = 1;
176 1 Count_1ms ++;
177 1
178 1 }
179 /****************************************************/
C51 COMPILER V7.08 DISPLAY 06/07/2008 20:06:02 PAGE 4
180 /*软件延时子程序*/
181 /****************************************************/
182 void deplay()
183 {
184 1 unsigned int i;
185 1 for(i=0;i<=3000;i++)
186 1 {
187 2 _nop_();
188 2 }
189 1 }
190 /****************************************************/
191 /*LED显示处理子程序*/
192 /****************************************************/
193 void LED_Display_Init(void)
194 {
195 1 unsigned char i;
196 1 for(i=0;i<7;i++)
197 1 {
198 2 LED_Date[i]=Init_Date[i];
199 2 LED_Time[i]=Init_Time[i];
200 2 }
201 1 }
202 void LED_display_Date(void)
203 {
204 1 unsigned char i;
205 1 LED_Disp[0] = 0xfc;
206 1
207 1 for(i=1;i<7;i++)
208 1 {
209 2 LED_Disp[i] = LED_NUM[(LED_Date[i])-0x30];
210 2 }
211 1 }
212 void LED_display_Time(void)
213 {
214 1 unsigned char i;
215 1 LED_Disp[0] = 0xfc;
216 1
217 1 for(i=1;i<7;i++)
218 1 {
219 2 LED_Disp[i] = LED_NUM[(LED_Time[i])-0x30];
220 2 }
221 1 //LED_Disp[2] = LED_Disp[2] - 0x10;
222 1 //LED_Disp[4] = LED_Disp[4] - 0x10;
223 1 }
224 /****************************************************/
225 /*IIC子程序 大约10微秒,最少为5.425微秒*/
226 /****************************************************/
227 void delay_IIC(void)
228 {
229 1 int x;
230 1 x++;
231 1 x++;
232 1 }
233 void writebyte(unsigned char Ndata)
234 {
235 1 unsigned char data i;
236 1 for (i=0;i<8;i++)
237 1 {
238 2 IIC_CLK = 0;
239 2 IIC_DI = (bit)(Ndata & 0x01);
240 2 delay_IIC();
241 2 IIC_CLK = 1;
C51 COMPILER V7.08 DISPLAY 06/07/2008 20:06:02 PAGE 5
242 2 delay_IIC();
243 2 IIC_CLK = 0;
244 2 Ndata >>= 1;
245 2 }
246 1 }
247 void write_LED(unsigned char LED_Data0,unsigned char LED_Data1,
248 unsigned char LED_Data2,unsigned char LED_Data3,
249 unsigned char LED_Data4,unsigned char LED_Data5,
250 unsigned char LED_Data6)
251 {
252 1 EA=0;
253 1 writebyte(LED_Data0);
254 1 writebyte(LED_Data1);
255 1 writebyte(LED_Data2);
256 1 writebyte(LED_Data3);
257 1 writebyte(LED_Data4);
258 1 writebyte(LED_Data5);
259 1 writebyte(LED_Data6);
260 1 EA=1;
261 1 }
262 /****************************************************/
263 /*RS接收数据处理*/
264 /****************************************************/
265 void RS_Data(void)
266 {
267 1 unsigned char i;
268 1 if(Rx_Buffer[0]=='0')
269 1 {
270 2 for(i=1;i<7;i++)
271 2 {
272 3 if(Rx_Buffer[i]<='9'&&Rx_Buffer[i]>='0')
273 3 {
274 4 LED_Date[i] = Rx_Buffer[i];
275 4 }
276 3 else LED_Date[i] = '1';
277 3 }
278 2 for(i=0;i<16;i++)
279 2 {
280 3 Tx_Buffer[i] = Date[i];
281 3 }
282 2 }
283 1 else if(Rx_Buffer[0]=='1')
284 1 {
285 2 for(i=1;i<7;i++)
286 2 {
287 3 if(Rx_Buffer[i]<='9'&&Rx_Buffer[i]>='0')
288 3 {
289 4 LED_Time[i] = Rx_Buffer[i];
290 4 }
291 3 else LED_Time[i] = '1';
292 3 }
293 2 for(i=0;i<16;i++)
294 2 {
295 3 Tx_Buffer[i] = Time[i];
296 3 }
297 2 }
298 1 else
299 1 {
300 2 for(i=0;i<16;i++)
301 2 {
302 3 Tx_Buffer[i] = Eorr[i];
303 3 }
C51 COMPILER V7.08 DISPLAY 06/07/2008 20:06:02 PAGE 6
304 2 }
305 1 Tx_Length = 16;
306 1 }
307 /****************************************************/
308 /*RS接收数据处理*/
309 /****************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -