51单片机热敏电阻测温查表程序Word版文档格式.docx
《51单片机热敏电阻测温查表程序Word版文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机热敏电阻测温查表程序Word版文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
20.
3260,3280,3300,3320,3340,3360,3380,3400,3420,3440,
21.
3460,3480,3500,3520,3540,3560,3580,3600,3620,3640,
22.
3660,3680};
23.uint
temperiture[]={
24.
594,593,586,580,579,560,564,559,552,545,
25.
541,518,513,508,503,497,491,488,483,480,
26.
473,468,463,458,455,451,447,440,434,433,
27.
430,425,420,416,413,409,404,401,401,396,
28.
390,386,382,378,374,372,368,364,361,357,
29.
354,351,347,343,340,336,333,328,326,322,
30.
319,316,313,309,307,303,300,296,294,289,
31.
286,283,280,276,274,271,267,264,260,257,
32.
253,249,246,243,240,237,233,231,228,224,
33.
222,219,214,216,211,209,206,202,198,194,
34.
187,184,181,178,175,171,168,164,161,158,
35.
154,152,148,146,142,139,136,133,130,126,
36.
124,121,116,114,112,108,102,98,96,94,
37.
89,86};
38.uchar
table[]="
T:
00.0`C"
;
39.uchar
num=0;
40.uchar
keynum,max=40,min=0;
41.uchar
Temp_max[]="
Max:
40`C"
Temp_min[]="
Min:
00`C"
42.
43.sbit
ad_wr=P3^6;
44.sbit
ad_rd=P3^7;
45.sbit
ad_cs=P3^5;
46.sbit
ad_int=P3^2;
47.sbit
key1=P0^5;
48.sbit
key2=P0^6;
49.sbit
key3=P0^7;
50.//sbit
Beep=P0^0;
51.
52./*********函数表************/
53.void
init();
//初始化
54.void
ad_delay(uint
t);
//延时函数
55.void
change(uchar
tempture);
//分离百位、十位、个位
56.uchar
ad_getshuju();
//ad转换
57.char
filter();
//滤波
58.uint
convert();
//电压转换
59.void
tempertur();
//度温度
60.void
keyscan();
//键盘扫描
61.
62.//主函数
63.void
main()
64.{
65.
66.
while
(1)
67.
{
68.
69.
}
70.}
71.
72.void
init()
73.{
74.
LCD_init();
75.
for(num=0;
num<
10;
num++)
76.
77.
LCD_Write_add_data(num,0,table[num]);
78.
79.}
80.
81.void
t)
82.{
83.
j;
84.
i;
85.
for(i=0;
i<
t;
i++)
86.
for(j=0;
j<
110;
j++);
87.}
88.
89.uchar
ad_getshuju()
90.{
91.
date;
92.
ad_cs=0;
ad_wr=0;
ad_rd=1;
93.
ad_cs=1;
ad_wr=1;
94.
while(ad_int==1);
95.
ad_rd=0;
96.
date=P2;
97.
98.
return
99.}
100.
101.char
filter()
//滤波函数
中位值滤波法
102.{
103.
value_buf[N],temp_f;
104.
count,i,j;
105.
for
(
count=0;
count<
N;
count++)
106.
107.
value_buf[count]
=
108.
delay
(2);
109.
110.
(j=0;
N-1;
j++)
111.
112.
(i=0;
N-j;
113.
114.
if
value_buf[i]>
value_buf[i+1]
)
115.
116.
temp_f
value_buf[i];
117.
value_buf[i]
value_buf[i+1];
118.
temp_f;
119.
120.
121.
122.
value_buf[(N-1)/2];
123.}
124.
125.uint
convert()
126.{
127.
//用于存储读出数据的高字节和低字节
128.
tmp="
0"
//存储最后处理完的结果
注意数据类型
129.
tmp=filter()+tmp;
//求滤波后ad值
130.
temph=tmp&
0xf0;
//屏蔽低四位
131.
temph=temph>
>
4;
//右移四位
取出高四位
132.
templ=tmp&
0x0f;
//屏蔽高四位
取出低四位
133.
tmp=templ*20+temph*320;
//最后的结果是一个四位数,便于显示
电压值
134.
tmp;
//返回最后处理结果
135.}
136.
137.void
tempture)
138.{
139.
bai=tempture/100;
140.
shi=tempture%100/10;
141.
ge=tempture%10;
142.}
143.
144.void
tempertur()
145.{
146.
for(n=0;
temp>
=ad_date[n];
n++);
147.
tp=temperiture[n-1];
148.
change(tp);
149.
LCD_Write_add_data(4,0,0x30+bai);
150.
LCD_Write_add_data(5,0,0x30+shi);
151.
LCD_Write_add_data(7,0,0x30+ge);
152.}
153.
154.
155.void
keyscan()
156.{
157.
if(key1==0)
158.
159.
delay(5);
160.
161.
162.
while(!
key1);
163.
keynum++;
164.
if(keynum==1)
165.
166.
change(max);
167.
LCD_Write_Com(0x01);
168.
delay(10);
169.
LCD_Write_add_str(0,0,10,Temp_max);
170.
LCD_Write_add_data(6,0,0x30+shi);
171.
172.
173.
if(keynum==2)
174.
175.
change(min);
176.
177.
min=min>
0?
min:
0;
178.
179.
LCD_Write_add_str(0,0,10,Temp_min);
180.
181.
182.
183.
if(keynum==3)
184.
185.
keynum=0;
186.
187.
188.
LCD_Write_add_str(0,0,10,table);
189.
190.
191.
192.
if(keynum==0)
193.
194.
temp=convert();
195.
196.
delay(100);
197.
198.
else
199.
200.
201.
202.
if(key2==0)
203.
204.
205.
206.
207.
key2);
208.
max++;
209.
210.
delay
(1);
211.
212.
213.
if(key3==0)
214.
215.
216.
217.
218.
key3);
219.
max--;
220.
221.
222.
223.
224.
//LCD_Write_add_str(0,0,9,Temp_max);
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
min++;
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
min--;
249.
250.
251.
252.
253.
//LCD_Write_add_str(0,0,9,Temp_min);
254.
255.
256.
257.
258.}