📄 tmp36.lst
字号:
C51 COMPILER V8.05a TMP36 03/10/2009 11:19:06 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE TMP36
OBJECT MODULE PLACED IN .\TMP36.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\TMP36.c BROWSE DEBUG OBJECTEXTEND PRINT(.\TMP36.lst) OBJECT(.\TMP36.o
-bj)
line level source
1 #include <ADI/ADuC834.h>
2 #include <intrins.h>
3 #include"ziku.h"
4
5 long int g_TemperatureL;
6 int g_TemperatureI;
7
8 /***************宏定义及位定义*********************/
9 #define busy 0x80
10 #define uchar unsigned char
11 #define uint unsigned int
12 #define LCD_DATA P0
13 void LCD_Clr();
14 sbit LCD_RS=P2^3;
15 sbit LCD_RW=P2^4;
16 sbit LCD_EN=P2^5;
17 sbit LCD_CSA=P2^6;
18 sbit LCD_CSB=P2^7;
19 sbit LCD_RST=P2^2;
20
21 void delay(int ms)
22 {
23 1 uchar i;
24 1 while(ms--)
25 1 {
26 2 for(i=0;i<250;i++)
27 2 {
28 3 _nop_();
29 3 _nop_();
30 3 _nop_();
31 3 _nop_();
32 3 }
33 2 }
34 1 }
35 //void delay(uint t)
36 //{
37 // uint i,j;
38 // for(i=0;i<t;i++)
39 // for(j=0;j<110;j++);
40 //}
41
42 /***************AD转换器初始化*******************/
43 void ADC_Init(void)
44 {
45 1 SF = 0xFF; //最慢的转换速度效果最好
46 1 ADC0CON = 0x0F;//一通道,单极性,内部参考电源,输入范围0~2.56V
47 1 ADCMODE = 0x23;//连续转换
48 1 }
49
50 /***************读液晶状态字*********************/
51 unsigned char ReadLCDStatus(void)
52 {
53 1 LCD_DATA = 0xFF;
54 1 LCD_RS = 0;
C51 COMPILER V8.05a TMP36 03/10/2009 11:19:06 PAGE 2
55 1 LCD_RW = 1;
56 1 LCD_EN = 0;
57 1 LCD_EN = 0;
58 1 LCD_EN = 1;
59 1 while (LCD_DATA & busy); //检测忙信号
60 1 // delay(1);
61 1 LCD_EN = 0;
62 1 return(P0);
63 1 }
64
65 /*****************写液晶命令*********************/
66 void WriteLCD_Command(uchar Command)
67 {
68 1 ReadLCDStatus ();
69 1 LCD_RS = 0;
70 1 LCD_RW = 0;
71 1 LCD_DATA = Command;
72 1 LCD_EN = 1;
73 1 // delay(1);
74 1 LCD_EN = 0;
75 1 }
76
77 /*****************写液晶数据*********************/
78 void WriteLCD_Data(unsigned char Data)
79 {
80 1 ReadLCDStatus();
81 1 LCD_RS = 1;
82 1 LCD_RW = 0;
83 1 LCD_DATA = Data;
84 1 LCD_EN = 1;
85 1 // delay(1);
86 1 LCD_EN=0;
87 1 }
88
89 /*****************初始化液晶*********************/
90 void LCD_Init()
91 {
92 1 WriteLCD_Command(0x3E);
93 1 WriteLCD_Command(0xC0);
94 1 WriteLCD_Command(0x3F);
95 1 LCD_Clr();
96 1 LCD_CSB=0;
97 1 LCD_CSA=1;
98 1 }
99
100 /*****************显示汉字数据*******************/
101 /************Page0~7、Rom0~63、汉字数组**********/
102 void LCD_Display_Word(unsigned char Page,unsigned char Rom,unsigned char *Data)
103 {
104 1 unsigned char i;
105 1 if(Rom>63)
106 1 {
107 2 LCD_CSB=1;
108 2 LCD_CSA=0;
109 2 }
110 1 else
111 1 {
112 2 LCD_CSB=0;
113 2 LCD_CSA=1;
114 2 }
115 1 if((LCD_CSA==1)&&(LCD_CSB==0))
116 1 {
C51 COMPILER V8.05a TMP36 03/10/2009 11:19:06 PAGE 3
117 2 WriteLCD_Command(0xB8+Page);//页地址
118 2 WriteLCD_Command(0x40+Rom);//列地址
119 2 for(i=0;i<16;i++)
120 2 {
121 3 WriteLCD_Data(Data[i]);
122 3 }
123 2 WriteLCD_Command(0xB8+Page+1);//页地址+1
124 2 WriteLCD_Command(0x40+Rom);//列地址
125 2 for(i=16;i<32;i++)
126 2 {
127 3 WriteLCD_Data(Data[i]);
128 3 }
129 2 }
130 1 if((LCD_CSA==0)&&(LCD_CSB==1))
131 1 {
132 2 WriteLCD_Command(0xB8+Page);//页地址
133 2 WriteLCD_Command(0x40+(Rom-64));//列地址
134 2 for(i=0;i<16;i++)
135 2 {
136 3 WriteLCD_Data(Data[i]);
137 3 }
138 2 WriteLCD_Command(0xB8+Page+1);//页地址+1
139 2 WriteLCD_Command(0x40+(Rom-64));//列地址
140 2 for(i=16;i<32;i++)
141 2 {
142 3 WriteLCD_Data(Data[i]);
143 3 }
144 2 }
145 1 }
146
147 /*****************显示字符数据*******************/
148 void LCD_Display_Eng(unsigned char Page,unsigned char Rom,unsigned char *Data)
149 {//页0~7、列0~63、汉字数组
150 1 unsigned char i;
151 1 if(Rom>63)
152 1 {
153 2 LCD_CSB=1;
154 2 LCD_CSA=0;
155 2 }
156 1 else
157 1 {
158 2 LCD_CSB=0;
159 2 LCD_CSA=1;
160 2 }
161 1 if((LCD_CSA==1)&&(LCD_CSB==0))
162 1 {
163 2 WriteLCD_Command(0xB8+Page);//页地址
164 2 WriteLCD_Command(0x40+Rom);//列地址
165 2 for(i=0;i<8;i++)
166 2 {
167 3 WriteLCD_Data(Data[i]);
168 3 }
169 2 WriteLCD_Command(0xB8+Page+1);//页地址+1
170 2 WriteLCD_Command(0x40+Rom);//列地址
171 2 for(i=8;i<16;i++)
172 2 {
173 3 WriteLCD_Data(Data[i]);
174 3 }
175 2 }
176 1 if((LCD_CSA==0)&&(LCD_CSB==1))
177 1 {
178 2 WriteLCD_Command(0xB8+Page);//页地址
C51 COMPILER V8.05a TMP36 03/10/2009 11:19:06 PAGE 4
179 2 WriteLCD_Command(0x40+(Rom-64));//列地址
180 2 for(i=0;i<8;i++)
181 2 {
182 3 WriteLCD_Data(Data[i]);
183 3 }
184 2 WriteLCD_Command(0xB8+Page+1);//页地址+1
185 2 WriteLCD_Command(0x40+(Rom-64));//列地址
186 2 for(i=8;i<16;i++)
187 2 {
188 3 WriteLCD_Data(Data[i]);
189 3 }
190 2 }
191 1 }
192
193 /********************清屏幕**********************/
194 void LCD_Clr()
195 {
196 1 unsigned char j,i;
197 1 WriteLCD_Command(0xB8);
198 1 WriteLCD_Command(0x40);
199 1 for(i=0;i<8;i++)
200 1 {
201 2 WriteLCD_Command(0xB8+i);
202 2 WriteLCD_Command(0x40);
203 2 for(j=0;j<128;j++)
204 2 {
205 3 WriteLCD_Data(0x00);
206 3 }
207 2 }
208 1 }
209
210 /********************显示文档*********************/
211 void Display_Text(void)
212 {
213 1 LCD_Display_Word(0,16,dis1); //北
214 1 LCD_Display_Word(0,32,dis2); //斗
215 1 LCD_Display_Word(0,48,dis3); //星
216 1 LCD_Display_Word(0,64,dis4); //工
217 1 LCD_Display_Word(0,80,dis5); //化
218 1 LCD_Display_Word(0,96,dis6); //所
219 1 LCD_Display_Eng(2,32,dis7); //b
220 1 LCD_Display_Eng(2,40,dis8); //i
221 1 LCD_Display_Eng(2,48,dis9); //g
222 1 LCD_Display_Eng(2,56,dis10); //-
223 1 LCD_Display_Eng(2,64,dis11); //d
224 1 LCD_Display_Eng(2,72,dis12); //i
225 1 LCD_Display_Eng(2,80,dis13); //p
226 1 LCD_Display_Eng(2,88,dis14); //p
227 1 LCD_Display_Eng(2,96,dis15); //e
228 1 LCD_Display_Eng(2,104,dis16); //r
229 1 LCD_Display_Eng(4,48,dis17); //1
230 1 LCD_Display_Eng(4,56,dis18); //2
231 1 LCD_Display_Eng(4,64,dis19); //8
232 1 LCD_Display_Eng(4,72,dis20); //6
233 1 LCD_Display_Eng(4,80,dis21); //4
234 1 LCD_Display_Word(6,48,dis22);//王
235 1 LCD_Display_Word(6,64,dis23);//敬
236 1 LCD_Display_Word(6,80,dis24);//明
237 1 }
238
239 //void Delay400Ms(void)
240 //{
C51 COMPILER V8.05a TMP36 03/10/2009 11:19:06 PAGE 5
241 // unsigned char TempCycA = 5;
242 // unsigned int TempCycB;
243 // while(TempCycA--)
244 // {
245 // TempCycB=7269;
246 // while(TempCycB--);
247 // };
248 //}
249
250 void Select_Char(char m_char,unsigned char Page,unsigned char Rom)
251 {
252 1 switch(m_char)
253 1 {
254 2 case 0:
255 2 LCD_Display_Eng(Page,Rom,dis30);
256 2 break;
257 2 case 1:
258 2 LCD_Display_Eng(Page,Rom,dis17);
259 2 break;
260 2 case 2:
261 2 LCD_Display_Eng(Page,Rom,dis18);
262 2 break;
263 2 case 3:
264 2 LCD_Display_Eng(Page,Rom,dis26);
265 2 break;
266 2 case 4:
267 2 LCD_Display_Eng(Page,Rom,dis21);
268 2 break;
269 2 case 5:
270 2 LCD_Display_Eng(Page,Rom,dis27);
271 2 break;
272 2 case 6:
273 2 LCD_Display_Eng(Page,Rom,dis20);
274 2 break;
275 2 case 7:
276 2 LCD_Display_Eng(Page,Rom,dis28);
277 2 break;
278 2 case 8:
279 2 LCD_Display_Eng(Page,Rom,dis19);
280 2 break;
281 2 case 9:
282 2 LCD_Display_Eng(Page,Rom,dis29);
283 2 break;
284 2 case 10://.
285 2 LCD_Display_Eng(Page,Rom,dis32);
286 2 break;
287 2 case 11://℃
288 2 LCD_Display_Word(Page,Rom,dis31);
289 2 break;
290 2 default:
291 2 LCD_Display_Eng(Page,Rom,dis33);
292 2 break;
293 2 }
294 1 }
295
296 void Display_Temperature(int DTemperature)//顺序十位、个位、点、点后一位
297 {
298 1 char bai,shi,ge;
299 1 bai = DTemperature/100;
300 1 Select_Char(bai,4,48);
301 1 shi = (DTemperature%100)/10;
302 1 Select_Char(shi,4,56);
C51 COMPILER V8.05a TMP36 03/10/2009 11:19:06 PAGE 6
303 1 Select_Char(10,4,64);
304 1 ge = (DTemperature%100)%10;
305 1 Select_Char(ge,4,72);
306 1 Select_Char(11,4,80);
307 1 }
308
309 int Account_Temperature(long int ATemperature)
310 {
311 1 int m_Temperature;
312 1 m_Temperature = (ATemperature*128)/(1677722);
313 1 m_Temperature = (m_Temperature-500);
314 1 return m_Temperature;
315 1 }
316
317 long int Get_Temperature(void)
318 {
319 1 long int m_Temperature;
320 1 CAL = 0;//启动转换
321 1 RDY0 = 0;//允许写寄存器
322 1 m_Temperature = ADC0H;
323 1 m_Temperature = ADC0M|(m_Temperature<<8);
324 1 m_Temperature = ADC0L|(m_Temperature<<8);
325 1 return m_Temperature;
326 1 }
327
328 void main(void)
329 {
330 1 ADC_Init();
331 1 LCD_Init();
332 1 Display_Text();
333 1 while(1)
334 1 {
335 2 g_TemperatureL = 0;
336 2 g_TemperatureL = Get_Temperature();
337 2 g_TemperatureI = Account_Temperature(g_TemperatureL);
338 2 Display_Temperature(g_TemperatureI);
339 2 delay(10);
340 2 }
341 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1152 ----
CONSTANT SIZE = 704 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 16
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -