📄 da-ad.lst
字号:
C51 COMPILER V7.10 DA_AD 03/30/2011 11:55:46 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE DA_AD
OBJECT MODULE PLACED IN DA-AD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DA-AD.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************************************************************************
2 * 标题: ************* 光敏电阻和热敏电阻试验******************* *
3 * * *
4 * 1.通过本例程了解并掌握AD-DA转换芯片和热敏光敏电阻的基本原理和使用 *
5 * 2.了解掌握I2C总线接口的工作原理及一般编程方法。
6 *
7 * 连接方法:JP10 (P0)与J12用跳线连接 *
8
9 * 通过改变学习板上光敏和热敏电阻实现模拟输入,AD输入通道在第3和第4通道上
10 * 学员观察数码管的数字变化情况
11 * 学员用遮挡光敏电阻和有触摸热敏电阻可以看到AD的值发生变化 *
12 * *
13 * 请学员认真消化本例程,懂得AD-DA 在C语言中的操作应用 *
14 ***********************************************************************************/
15
16 #include<reg52.h>
17 #include <I2C.H>
18
19 #define PCF8591 0x90 //PCF8591 地址
20
21
22 //else IO
23 sbit LS138A=P2^2;
24 sbit LS138B=P2^3;
25 sbit LS138C=P2^4;
26
27 //此表为 LED 的字模, 共阴数码管 0-9 -
28 unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
29
30 unsigned char AD_CHANNEL;
31 unsigned long xdata LedOut[8];
32 unsigned int D[32];
33
34
35 /*******************************************************************
36 ADC发送字节[命令]数据函数
37 *******************************************************************/
38 bit ISendByte(unsigned char sla,unsigned char c)
39 {
40 1 Start_I2c(); //启动总线
41 1 SendByte(sla); //发送器件地址
42 1 if(ack==0)return(0);
43 1 SendByte(c); //发送数据
44 1 if(ack==0)return(0);
45 1 Stop_I2c(); //结束总线
46 1 return(1);
47 1 }
48
49 /*******************************************************************
50 ADC读字节数据函数
51 *******************************************************************/
52 unsigned char IRcvByte(unsigned char sla)
53 { unsigned char c;
54 1
55 1 Start_I2c(); //启动总线
C51 COMPILER V7.10 DA_AD 03/30/2011 11:55:46 PAGE 2
56 1 SendByte(sla+1); //发送器件地址
57 1 if(ack==0)return(0);
58 1 c=RcvByte(); //读取数据0
59 1
60 1 Ack_I2c(1); //发送非就答位
61 1 Stop_I2c(); //结束总线
62 1 return(c);
63 1 }
64
65 //******************************************************************/
66 main()
67 { char i,j;
68 1
69 1 while(1)
70 1 {/********以下AD-DA处理*************/
71 2 switch(AD_CHANNEL)
72 2 {
73 3 case 0: ISendByte(PCF8591,0x41);
74 3 D[0]=IRcvByte(PCF8591)*2; //ADC0 模数转换1 放大2倍显示
75 3 break;
76 3
77 3 case 1: ISendByte(PCF8591,0x42);
78 3 D[1]=IRcvByte(PCF8591)*2; //ADC1 模数转换2
79 3 break;
80 3
81 3 case 2: ISendByte(PCF8591,0x43);
82 3 D[2]=IRcvByte(PCF8591); //ADC2 模数转换3
83 3 break;
84 3
85 3 case 3: ISendByte(PCF8591,0x40);
86 3 D[3]=IRcvByte(PCF8591); //ADC3 模数转换4
87 3 break;
88 3 }
89 2
90 2 if(++AD_CHANNEL>3) AD_CHANNEL=0;
91 2
92 2 /********以下将AD3 AD4采集的热名电阻和光敏电阻值送到LED数码管显示*************/
93 2
94 2 LedOut[0]=Disp_Tab[D[2]%10000/1000];
95 2 LedOut[1]=Disp_Tab[D[2]%1000/100];
96 2 LedOut[2]=Disp_Tab[D[2]%100/10]|0x80;
97 2 LedOut[3]=Disp_Tab[D[2]%10];
98 2
99 2 LedOut[4]=Disp_Tab[D[3]%10000/1000];
100 2 LedOut[5]=Disp_Tab[D[3]%1000/100];
101 2 LedOut[6]=Disp_Tab[D[3]%100/10]|0x80;
102 2 LedOut[7]=Disp_Tab[D[3]%10];
103 2
104 2
105 2 for( i=0; i<8; i++)
106 2 { P0 = LedOut[i];
107 3
108 3 switch(i) //使用switch 语句控制138译码器 也可以是用查表的方式 学员可以试着自己修改
109 3 {
110 4 case 0:LS138A=0; LS138B=0; LS138C=0; break;
111 4 case 1:LS138A=1; LS138B=0; LS138C=0; break;
112 4 case 2:LS138A=0; LS138B=1; LS138C=0; break;
113 4 case 3:LS138A=1; LS138B=1; LS138C=0; break;
114 4 case 4:LS138A=0; LS138B=0; LS138C=1; break;
115 4 case 5:LS138A=1; LS138B=0; LS138C=1; break;
116 4 case 6:LS138A=0; LS138B=1; LS138C=1; break;
117 4 case 7:LS138A=1; LS138B=1; LS138C=1; break;
C51 COMPILER V7.10 DA_AD 03/30/2011 11:55:46 PAGE 3
118 4
119 4 }
120 3
121 3 for (j = 0 ; j<90 ;j++) { ;} //扫描间隔时间
122 3 }
123 2
124 2 P0 = 0;
125 2
126 2 }
127 1 }
128
129
130
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 665 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = 32 ----
PDATA SIZE = ---- ----
DATA SIZE = 65 4
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 + -