📄 复 lcd_18b20.lst
字号:
C51 COMPILER V7.06 ___LCD_18B20 12/17/2006 14:08:51 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ___LCD_18B20
OBJECT MODULE PLACED IN ..\复 LCD_18B20.obj
COMPILER INVOKED BY: C:\Program Files\keilc\C51\BIN\C51.EXE 复 LCD_18B20.C BROWSE DEBUG OBJECTEXTEND OBJECT(..\复 LCD_18
-B20.obj)
stmt level source
1 /*LCD_18B20温度采集
2 电路搭建: CSPIN = P2^7; CLKPIN = P2^6; DIPIN = P2^5;
3 DQ= P3^4; 晶振:11.0592M
4 实现功能:通过AT89S51(STC89C51)采集控制DS18B20,在小太阳人LCD上显示
5 设计者:陈仲库
6 设计日期:2006年12月12日
7 */
8
9 #include<reg51.h>
10 #include<intrins.h>
11 #define time_1 300
12 sbit CSPIN = P2^7; //用户自定义CS对应引脚
13 sbit CLKPIN = P2^6; //用户自定义CLK对应引脚
14 sbit DIPIN = P2^5; //用户自定义DI对应引脚
15 sbit DQ= P3^4; //用户自定义18B20对应引脚
16 unsigned char data l_data[7]; //用户自定义LCD缓冲区 其中前四个为数字
17 unsigned char code ch_data[]={0xEB, 0x60,0xC7,0xE5,0x6C,0xAD,0xAF,0xE0,0xEF,0xED};//定义0~9十个数字 小数点
-并上0x10
18
19 void LCD_WriteBit(bit n)
20 { DIPIN = n;
21 1 _nop_();
22 1 _nop_();
23 1 CLKPIN = 1;
24 1 _nop_();
25 1 _nop_();
26 1 CLKPIN = 0;
27 1 _nop_();
28 1 _nop_();
29 1 CLKPIN = 1;
30 1 }
31
32 void LCD_WriteCommand(unsigned char cmdcode) //送控制字
33 { unsigned char i;
34 1 CSPIN=1;
35 1 CSPIN=0;
36 1 LCD_WriteBit(1);
37 1 LCD_WriteBit(0);
38 1 LCD_WriteBit(0);
39 1 for (i=0;i<8;i++)
40 1 { if((cmdcode&0x80)==0x80)
41 2 LCD_WriteBit(1);
42 2 else
43 2 LCD_WriteBit(0);
44 2 cmdcode<<=1;
45 2 }
46 1 LCD_WriteBit(0);
47 1 DIPIN=1;
48 1 CSPIN=1;
49 1 }
50
51 void LCD_Reset() //初始化
52 { LCD_WriteCommand(0x00); //掉电
53 1 LCD_WriteCommand(0x02); //关闭
C51 COMPILER V7.06 ___LCD_18B20 12/17/2006 14:08:51 PAGE 2
54 1 LCD_WriteCommand(0x01); //上电
55 1 LCD_WriteCommand(0x03); //显示
56 1 LCD_WriteCommand(0x29); //模式设置
57 1 }
58
59 void lcdwd(unsigned char address,unsigned char data1) //送6位地址+8位数据
60 { unsigned char i;
61 1 CSPIN = 1;
62 1 CSPIN = 0;
63 1 LCD_WriteBit(1);
64 1 LCD_WriteBit(0);
65 1 LCD_WriteBit(1);
66 1 address<<=2;
67 1 for (i=0;i<6;i++)
68 1 { if((address&0x80)==0x80)
69 2 LCD_WriteBit(1);
70 2 else
71 2 LCD_WriteBit(0);
72 2 address<<=1;
73 2 }
74 1 for (i=0;i<8;i++)
75 1 { if((data1&0x01)==0x01)
76 2 LCD_WriteBit(1);
77 2 else
78 2 LCD_WriteBit(0);
79 2 data1>>=1;
80 2 }
81 1 DIPIN=1;
82 1 CSPIN=1;
83 1 }
84
85 void LCD_WriteWord() //送数(从第一个地址起)
86 { unsigned char j;
87 1 for(j=0;j<7;j++) lcdwd(j+j,l_data[j]);
88 1 }
89
90 ///////延时子程序////////
91 void Delay(int us) { int s; for ( s=0; s<us; s++);}
92
93 ///////DS18B20初始化子程序////////
94 void DS18B20_rst(void)
95 {
96 1 DQ = 1;
97 1 Delay(2);
98 1 DQ = 0;
99 1 Delay(30); //精确延时 480~960us
100 1 DQ = 1;
101 1 Delay(8);
102 1 }
103
104 unsigned int DS18B20_Read(void)
105 {
106 1 int i=0;
107 1 unsigned int u=0;
108 1 for (i=0;i<16;i++)
109 1 {
110 2 DQ=0;
111 2 u>>=1;
112 2 DQ=1;
113 2 if(DQ) u|=0x8000;
114 2 Delay(4);
115 2 }
C51 COMPILER V7.06 ___LCD_18B20 12/17/2006 14:08:51 PAGE 3
116 1 return (u);
117 1 }
118
119 void DS18B20_Write(unsigned char ku)
120 {
121 1 int i=0;
122 1 for (i=0;i<8;i++)
123 1 {
124 2 DQ=0;
125 2 DQ =ku&0x01;
126 2 Delay(3);
127 2 DQ=1;
128 2 ku>>=1;
129 2 }
130 1 }
131 //采集处理显示程序
132 void Display(void)
133 {
134 1 int t1,t2, t0;
135 1 unsigned int tp;
136 1 unsigned int lsb;
137 1 DS18B20_rst();
138 1 DS18B20_Write(0xCC);
139 1 DS18B20_Write(0x44);
140 1 DS18B20_rst();
141 1 DS18B20_Write(0xCC);
142 1 DS18B20_Write(0xBE);
143 1 tp=DS18B20_Read(); //取得DS18B20读的温度值
144 1
145 1 LCD_Reset(); //初始化
146 1 Delay(1000);
147 1 lsb=(unsigned int)(tp*6.25); //18B20采集到结果
148 1 t0=lsb/1000;
149 1 if(t0) //液晶显示最高位
150 1 l_data[0]=ch_data[t0];
151 1 else
152 1 l_data[0]=0x00;
153 1 t2= lsb%1000;
154 1 l_data[1]=ch_data[t2/100]|0x10;//第0位写0 小数点|0x10
155 1 t1=t2%100;
156 1 l_data[2]=ch_data[t1/10];
157 1 //l_data[3]=ch_data[t1%10]; 第四位
158 1 l_data[3]=0xcc;//显示0的上半部 好像度一样
159 1 LCD_WriteWord();
160 1 // Delay(time_1);
161 1 }
162
163 void main(void)
164 {
165 1 l_data[4]=0x20;//显示度的符号
166 1 while(1)
167 1 {
168 2
169 2 Display();
170 2 }
171 1 }//温度18b20
172
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 504 ----
CONSTANT SIZE = 10 ----
C51 COMPILER V7.06 ___LCD_18B20 12/17/2006 14:08:51 PAGE 4
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 ----
IDATA SIZE = ---- ----
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 + -