📄 text2.lst
字号:
C51 COMPILER V8.02 TEXT2 04/27/2011 12:12:40 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include<math.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5
6 uchar code welcome[]={" voltage! "};
7 uchar idata lcdtimer[16]={" 0.0000 V "};
8 uchar timecount;
9 bit timeflag;
10 sbit e=P2^1;
11 sbit rs=P2^0;
12
13
14 sbit CS=P1^4; //TLC1543与89c52的接口连接线路
15 sbit DOUT=P1^3;
16 sbit ADIN=P1^2;
17 sbit CLOCK=P1^1;
18 sbit EOC=P1^0;
19 uint readTLC1543(uchar port);
20 //void deley ();
21 /*sbit sdo=p1^0;
22 sbit addr=p1^1;
23 sbit cs=p1^2;
24 sbit clk=p1^3;
25 sbit eoc=p1^4;*/
26 //void delay();
27 //void display();
28 uint a;
29 void delay(uint del1)
30 {
31 1 uchar del2;
32 1 for(;del1>0;del1--)
33 1 for(del2=100;del2>0;del2--);
34 1 }
35
36 //void delay(uint time);
37 //uint a; //a为全局变量
38
39 /*void main()
40 {
41 while(1)
42 {
43 a=readTLC1543(0x00);
44 display();
45 }
46 }*/
47 uint readTLC1543(uchar port)
48 {
49 1 uint i ,ad;
50 1 uchar datah,datal;
51 1 CLOCK=0; //根据时序图分别设置CS,CLOCK,EOC
52 1 CS=0;
53 1 EOC=1;
54 1 port<<=4; //用port的值来选择是哪个AD芯片的哪个通道,实验板上接的是A0和A1,因此port的值可以选择0000或000
-1
C51 COMPILER V8.02 TEXT2 04/27/2011 12:12:40 PAGE 2
55 1 for(i=0;i<4;i++)//把通道写入TLC1543芯片中
56 1 {
57 2 ADIN=(bit)(port&0x80);
58 2 CLOCK=1;
59 2 CLOCK=0; //只需要CLOCK一个下降沿就能写入,其他接口的电平不变化
60 2 port<<=1; //根据时序图,先写入MSB即最高位,需要左移,然后继续写下一位
61 2 }
62 1 for(i=0;i<6;i++)//填充6个CLOCK
63 1 {
64 2 CLOCK=1;
65 2 CLOCK=0;
66 2 }
67 1 CS=1;
68 1 delay(100);
69 1 CS=0; //等待AD转换
70 1
71 1 for(i=0;i<2;i++) //取D9和D8位,
72 1 {
73 2 DOUT=1;
74 2 CLOCK=1;
75 2 datah<<=1;
76 2 if(DOUT)
77 2 datah|=0x01;
78 2 CLOCK=0;
79 2 }
80 1 for(i=0;i<8;i++)//取D7~D0位
81 1 {
82 2 DOUT=1;
83 2 CLOCK=1;
84 2 datal<<=1;
85 2 if(DOUT)
86 2 datal|=0x01;
87 2 CLOCK=0;
88 2 }
89 1 EOC=0;
90 1 CS=1;
91 1 ad=(uint)datah;
92 1 ad<<=8;
93 1 ad|=datal;//处理高位和低位数据,同时把char型转化为了int型,此处对数值的处理算法,参考“温度传感器”
94 1 ad=(ad*0.4887)*100;
95 1 //ad=(float)( ad*5/1023)*100000;
96 1 return(ad);
97 1 }
98 /*void display()
99 {
100 uint i,temp;
101 //uint shu0,shu1,shu2,shu3,shu4;
102 temp=a;
103 lcdtimer[2]=0x30+temp/10000;
104 lcdtimer[3]=0x30+temp%10000/1000;
105 lcdtimer[4]=0x30+temp%1000/100;
106 lcdtimer[5]=0x30+temp%100/10;
107 lcdtimer[6]=0x30+temp%10;
108 disp_lcd(0xc0,lcdtimer);
109
110 }
111 /*void delay(uint time)
112 {
113 uint i;
114 for(i=time;i>0; i--)
115 {;}
116 }*/
C51 COMPILER V8.02 TEXT2 04/27/2011 12:12:40 PAGE 3
117
118 /*void delay(uint del1)
119 {
120 uchar del2;
121 for(;del1>0;del1--)
122 for(del2=10;del2>0;del2--);
123 }*/
124 //液晶显示器判忙函数
125 //*****************
126 void busy()
127 {
128 1 uchar temp;
129 1 temp=0x00;
130 1 rs=0;
131 1 //rw=1;
132 1 while((temp&0x80)==0x80)
133 1 {
134 2 P0=0xff;
135 2 e=1;
136 2 temp=P0;
137 2 e=0;
138 2
139 2 }
140 1
141 1 }
142 //*************************
143 //向液晶显示器写命令函数
144 //***********************
145 void write_com(uchar temp)
146 {
147 1 busy();
148 1 rs=0;
149 1 //rw=0;
150 1 P0=temp;
151 1 e=1;
152 1 e=0;
153 1 }
154 //********************
155 //向液晶显示器写数据函数
156 //*********************
157 void write_data(uchar num)
158 {
159 1 busy();
160 1 rs=1;
161 1 //rw=0;
162 1 P0=num;
163 1 e=1;
164 1 e=0;
165 1 }
166 //*****************************
167 //*******向液晶显示器写入显示数据函数
168 //*********************
169 void disp_lcd(uchar addr,uchar *temp1)
170 {
171 1 uchar i;
172 1 write_com(addr);
173 1 delay(100);
174 1 for(i=0;i<16;i++)
175 1 {
176 2 write_data(temp1[i]);
177 2 delay(100);
178 2 }
C51 COMPILER V8.02 TEXT2 04/27/2011 12:12:40 PAGE 4
179 1 }
180 //************************
181 //液晶显示器初始化函数
182 //***********************
183 void lcd_ini()
184 {
185 1 char i;
186 1 for(i=3;i>0;i--)
187 1 {
188 2 P0=0x30;
189 2 rs=0;
190 2 //rw=0;
191 2 e=1;
192 2 e=0;
193 2 delay(100);
194 2
195 2 }
196 1 P0=0x38;
197 1 rs=0;
198 1 //rw=0;
199 1 e=1;
200 1 e=0;
201 1 delay(100);
202 1 }
203 //****************
204 //液晶显示器复位函数
205 //***************
206 void lcd_reset()
207 {
208 1 write_com(0x01);
209 1 delay(100);
210 1 write_com(0x06);
211 1 delay(100);
212 1 write_com(0x0c);
213 1 delay(100);
214 1 }
215 //*********************
216 //定时器、计时器中断函数
217 //*********************
218 void timer0() interrupt 1
219 {
220 1 TH0=0xdc;
221 1 TL0=0x23;
222 1 if(--timecount==0)
223 1 {
224 2 timecount=100;
225 2 timeflag=1;
226 2 }
227 1 }
228
229 void main()
230 {
231 1 lcd_ini();
232 1 lcd_reset();
233 1 disp_lcd(0x80,welcome);
234 1 disp_lcd(0xc0,lcdtimer);
235 1 TMOD=0x01;
236 1 TH0=0xdc;
237 1 TL0=0x23;
238 1 TR0=1;
239 1 IE=0x82;
240 1 timeflag=0;
C51 COMPILER V8.02 TEXT2 04/27/2011 12:12:40 PAGE 5
241 1 timecount=100;
242 1
243 1
244 1 /* while(1)
245 1 {
246 1 if(timeflag==1)
247 1 {
248 1 timeflag=0;
249 1 lcdtimer[11]+=1;
250 1 if(lcdtimer[11]>=0x3a)
251 1 {
252 1 lcdtimer[11]=0x30;
253 1 lcdtimer[10]+=1;
254 1 if(lcdtimer[10]>=0x36)
255 1 {
256 1 lcdtimer[10]=0x30;
257 1 lcdtimer[8]+=1;
258 1 if(lcdtimer[8]>=0x3a)
259 1 {
260 1 lcdtimer[8]=0x30;
261 1 lcdtimer[7]+=1;
262 1 if(lcdtimer[7]>=0x36)
263 1 {
264 1 lcdtimer[7]=0x30;
265 1 }
266 1 }
267 1 }
268 1 }
269 1 disp_lcd(0xc0,lcdtimer);
270 1
271 1 }
272 1
273 1 }*/
274 1 while(1)
275 1 {
276 2 uint temp;
277 2 a=readTLC1543(0x00);
278 2 temp=a;
279 2 lcdtimer[1]=0x30+temp/10000;
280 2 lcdtimer[3]=0x30+temp%10000/1000;
281 2 lcdtimer[4]=0x30+temp%1000/100;
282 2 lcdtimer[5]=0x30+temp%100/10;
283 2 lcdtimer[6]=0x30+temp%10;
284 2 disp_lcd(0xc0,lcdtimer);
285 2
286 2 }
287 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 534 ----
CONSTANT SIZE = 18 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 7
IDATA SIZE = 16 ----
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 + -