📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 09/30/2011 15:04:05 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\obj\main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND PRINT(.\obj\main.lst) OBJECT(.\obj\main.ob
-j)
stmt level source
1 /*-----------------------------------------------
2 名称:IIC协议 PCF8591 AD/DA转换 测试热敏电阻
3 修改:无
4 内容:使用1路ad测试热敏电阻阻值,并查表得到温度值,温度精度和多种参数有关。
5 ------------------------------------------------*/
6 #include <reg52.h>
7 #include "i2c.h"
8 #include "delay.h"
9 #include "display.h"
10
11
12 code unsigned int vt_table[]= // 电压温度对照表
13 {
14 4132,4098,4063,4026,3988,3949,3908,3866,3823,3779,
15 3733,3686,3639,3590,3540,3489,3437,3385,3331,3277,
16 3222,3166,3110,3054,2997,2940,2882,2824,2767,2709,
17 2651,2593,2536,2478,2421,2365,2309,2253,2198,2143,
18 2089,2036,1984,1932,1881,1831,1782,1734,1686,1640,
19 1594,1550,1506,1464,1422,1381,1341,1303,1265,1228,
20 1192
21
22 };
23
24 #define AddWr 0x90 //写数据地址 PCF8591
25 #define AddRd 0x91 //读数据地址 PCF8591
26
27 extern bit ack;
28 unsigned char ReadADC(unsigned char Chl);
29 /*------------------------------------------------
30 主程序
31 ------------------------------------------------*/
32 main()
33 {
34 1 unsigned int num=0;
35 1 unsigned char i,temp;
36 1 Init_Timer0();
37 1
38 1 while (1) //主循环
39 1 {
40 2
41 2 num=255-ReadADC(2);
42 2 //变成mv 最大值255 。255x19=4845mv,如果增加精度可以使用浮点计算
43 2 num=num*19;
44 2 for(i=0;i<61;i++)
45 2 {
46 3 //判断采集电压值大于或者等于表格电压时,停下来并记录当前i值
47 3 if(num >= vt_table[i])
48 3 {
49 4 temp=i;
50 4 //如果是前10个数据表明是负温度,需要把温度符号显示出来,并且前10位温度递增
51 4 if(i<10)
52 4 {
53 5 temp=10-temp; //如果i=0,表示-10
54 5 TempData[0]=0x40;//'-'号
C51 COMPILER V7.06 MAIN 09/30/2011 15:04:05 PAGE 2
55 5 }
56 4 else
57 4 {
58 5 temp-=10; //如果大于等于10表明正温度,把前10个表格负温度去掉
59 5 TempData[0]=0x00;//符号位显示空
60 5 }
61 4 break; //检测到即跳出循环,否则继续循环
62 4 }
63 3
64 3 }
65 2 TempData[3]=dofly_DuanMa[temp/10];//显示2位数温度值
66 2 TempData[4]=dofly_DuanMa[temp%10];
67 2 DelayMs(200); //延时防止采集频率过快
68 2 }
69 1 }
70 /*------------------------------------------------
71 读AD转值程序
72 输入参数 Chl 表示需要转换的通道,范围从0-3
73 返回值范围0-255
74 ------------------------------------------------*/
75 unsigned char ReadADC(unsigned char Chl)
76 {
77 1 unsigned char Val;
78 1 Start_I2c(); //启动总线
79 1 SendByte(AddWr); //发送器件地址
80 1 if(ack==0)return(0);
81 1 SendByte(0x40|Chl); //发送器件子地址
82 1 if(ack==0)return(0);
83 1 Start_I2c();
84 1 SendByte(AddWr+1);
85 1 if(ack==0)return(0);
86 1 Val=RcvByte();
87 1 NoAck_I2c(); //发送非应位
88 1 Stop_I2c(); //结束总线
89 1 return(Val);
90 1 }
91
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 187 ----
CONSTANT SIZE = 122 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 5
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 + -