📄 18b20_1602.lst
字号:
C51 COMPILER V8.12 18B20_1602 07/30/2008 10:40:15 PAGE 1
C51 COMPILER V8.12, COMPILATION OF MODULE 18B20_1602
OBJECT MODULE PLACED IN .\18b20_1602.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C:\Documents and Settings\l\桌面\18b20b\ds18b20_1602\18b20_1602.c BROWSE DE
-BUG OBJECTEXTEND PRINT(.\18b20_1602.lst) OBJECT(.\18b20_1602.obj)
line level source
1 #include <at89x52.h>
2 #include <absacc.h>
3 #include <intrins.h>
4 #include <math.h>
5 #include <stdio.h>
6
7 #define uchar unsigned char
8 #define uint unsigned int
9
10 #define LCD_COMMAND 0 //1602写命令或数据参数
11 #define LCD_DATA 1
12
13 #define RS P2_0 //1602控制端口
14 #define RW P2_1
15 #define EN P2_2
16
17 #define DBport P0 //1602数据命令口
18
19 #define DO P1_0 //18b20总线接口
20
21
22 uchar temp_l = 0; //温度值存储低位字节
23 uchar temp_h = 0; //温度值存储高位字节
24
25 uchar tempsign = 0; //温度值符号位
26 uchar temp_integer[4]; //温度整数存储数组
27 uchar temp_dicimal[5]; //温度小数存储数组
28
29 /*延时以ms为单位的t时间*/
30 void Delay(uint t)
31 {
32 1 uint i;
33 1 while(t--)
34 1 {
35 2 for(i=0; i<125; i++)
36 2 { }
37 2 }
38 1 }
39
40 /**********************************************************
41
42 等待程序
43
44 **********************************************************/
45 bit LCD_busy(void)
46 {
47 1 bit result;
48 1 RS = 0;
49 1 RW = 1;
50 1 EN = 1;
51 1 _nop_();
52 1 _nop_();
53 1 _nop_();
54 1 _nop_();
C51 COMPILER V8.12 18B20_1602 07/30/2008 10:40:15 PAGE 2
55 1 result=(bit)(DBport&0x80);
56 1 EN = 0;
57 1
58 1 return result;
59 1 }
60
61 /**********************************************************
62
63 写指令/数据
64
65 **********************************************************/
66 LCD_Write(bit style, uchar input)
67 {
68 1 while(LCD_busy());
69 1 RW = 0;
70 1 RS = style;
71 1 EN = 0;
72 1 _nop_();
73 1 _nop_();
74 1 DBport = input;
75 1 _nop_();
76 1 _nop_();
77 1 _nop_();
78 1 _nop_();
79 1 EN = 1;
80 1 _nop_();
81 1 _nop_();
82 1 _nop_();
83 1 _nop_();
84 1 EN = 0;
85 1 }
86
87
88 /**********************************************************
89
90 设置屏幕初始模式
91
92 **********************************************************/
93 #define LCD_SHOW 0x0C //显示开
94 #define LCD_HIDE 0x08 //显示关
95
96 #define LCD_CURSOR 0x0A //显示光标
97 #define LCD_NO_CURSOR 0x08 //无光标
98
99 #define LCD_FLASH 0x09 //光标闪动
100 #define LCD_NO_FLASH 0x08 //光标不闪动
101
102 void LCD_SetDisplay(unsigned char DisplayMode)
103 {
104 1 LCD_Write(LCD_COMMAND, DisplayMode);
105 1 }
106
107
108 /**********************************************************
109
110 设置写完1byte数据后显示模式(输入每个字符后屏幕变化)
111
112 **********************************************************/
113 #define LCD_CURSOR_LEFT 0x04 //每写完一个字节光标左移,且AC减1
114 #define LCD_CURSOR_RIGHT 0x06 //每写完一个字节光标右移,且AC加1
115
116 #define LCD_CHAR_RIGHT 0x05 //每写完一个字节字符右移
C51 COMPILER V8.12 18B20_1602 07/30/2008 10:40:15 PAGE 3
117 #define LCD_CHAR_LEFT 0x07 //每写完一个字节字符左移
118
119 void LCD_Setinput(unsigned char InputMode)
120 {
121 1 LCD_Write(LCD_COMMAND, InputMode);
122 1 }
123
124
125 /**********************************************************
126
127 设定显示功能
128
129 **********************************************************/
130 #define LCD_DISPLAY_FUNCTION 0x38 //8位两行显示,5×7字型
131
132 void LCD_Setfunction(unsigned char Display_function)
133 {
134 1 LCD_Write(LCD_COMMAND, Display_function);
135 1 }
136
137 /**********************************************************
138
139 做完上面的设置,现在可以初始化LCD了
140
141 **********************************************************/
142 #define LCD_SCREEN_CLEAR 0x01
143
144 void Initial_LCD(void)
145 {
146 1 EN = 0;
147 1
148 1 LCD_Setfunction(LCD_DISPLAY_FUNCTION);
149 1 LCD_Setfunction(LCD_DISPLAY_FUNCTION);
150 1 //这几句顺序很重要,我随便改变了一下,竟然就没有显示了
151 1 LCD_SetDisplay(LCD_SHOW | LCD_NO_CURSOR);
152 1 LCD_Write(LCD_COMMAND, LCD_SCREEN_CLEAR);
153 1 LCD_Setinput(LCD_CURSOR_RIGHT);
154 1
155 1 }
156
157
158 /**********************************************************
159
160 令字符左移
161
162 *********************************************************
163 #define SCREEN_RIGHT_MOVE 0x18
164 #define SCREEN_LEFT_MOVE 0x1C
165 void LCD_SCREEN_MOVE(uchar Move_Director)
166 {
167 LCD_Write(LCD_COMMAND, Move_Director);
168 }*/
169
170
171 /**********************************************************
172
173 设定显示位置程序(即字符在什么位置显示出来)
174
175 **********************************************************/
176 void GotoXY(uchar x, uchar y)
177 {
178 1 if(y == 0)
C51 COMPILER V8.12 18B20_1602 07/30/2008 10:40:15 PAGE 4
179 1 {LCD_Write(LCD_COMMAND, 0x80|x);} //1602地址为第一行00H~0FH,第二行为40H~4FH,
180 1 if(y == 1) //而且写入地址命令格式为1xxx xxxx,
181 1 {LCD_Write(LCD_COMMAND, 0x80|(x-0x40));} //所以这里的0x80|(x-0x40)就是如此得出
182 1 }
183
184
185 /**********************************************************
186
187 写字符程序
188
189 **********************************************************/
190 void Print(uchar *str, uchar j)
191 {
192 1 uchar i = 0;
193 1 for(i=0; i<j; i++)
194 1 {
195 2 LCD_Write(LCD_DATA, *str);
196 2 str++;
197 2 }
198 1 }
199
200
201 /*us级延时,延时时间约4+2*i*/
202 void Delayus(uchar i)
203 {
204 1 while(--i);
205 1 }
206
207 /*产生复位脉冲,等待应答信号*/
208 bit Resetpaulse()
209 {
210 1
211 1 DO = 0; //拉低约600us
212 1 Delayus(150);
213 1 Delayus(150);
214 1
215 1 DO = 1;//产生上升沿,延时约15~60us
216 1 Delayus(30);
217 1
218 1 return(~DO); //等待应答信号
219 1
220 1 }
221
222 /*读取数据一位*/
223 bit Readbit()
224 {
225 1 uint i = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -