📄 text.lst
字号:
C51 COMPILER V8.02 TEXT 04/15/2009 13:03:06 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TEXT
OBJECT MODULE PLACED IN Text.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Text.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************/
2 /* */
3 /* 51单片机- 128*64LCD显示 */
4 /* */
5 //;* LCD型号:带汉字库)或兼容型号 控制器ST7920 */
6 //;* MCU:STC89C52 ,晶体频率:12MHz */
-
7 /* */
8 /*******************************************************************/
9
10
11 #include<AT89X52.H>
12 #include <absacc.h>
13 #include <intrins.h>
14 #define uchar unsigned char
15 #define uint unsigned int
16
17
18 sbit T_CLK = P2^4; /* 实时时钟的时钟线引脚*/
19 sbit T_IO = P2^5; /* 实时时钟的数据线*/
20 sbit T_RST = P2^6; /* 实时时钟的复位线引脚*/
21 uint ucCurtime[7]={0x40,0x59,0x23,0x29,0x03,0x00,0x09}; // 秒 分 时 日 月 星期 年
22
23 /*******************************************************************/
24 /* */
25 /* 输入字节 */
26 /* */
27 /*******************************************************************/
28 void v_RTInputByte(uchar ucDa)
29 {
30 1 uchar i;
31 1 ACC=ucDa;
32 1 for(i=8;i>0;i--)
33 1 {
34 2 if((ACC&0x01)==1)
35 2 //T_IO=ACC0; /* 相当于汇编中的RRC */
36 2 T_IO=1;
37 2 else T_IO=0;//if((ACC&0x01)==0)
38 2 T_CLK=1;
39 2 T_CLK=0;
40 2 ACC=ACC>>1;
41 2 }
42 1 }
43
44 /*******************************************************************/
45 /* */
46 /* 读取字节 */
47 /* */
48 /*******************************************************************/
49 uchar uc_RTOutputByte(void)
50 {
51 1 uchar i,ACC;
52 1 ACC=0;
53 1 for(i=0;i<8;i++)
54 1 {
C51 COMPILER V8.02 TEXT 04/15/2009 13:03:06 PAGE 2
55 2 ACC=ACC>>1; /*相当于汇编中的RRC*/
56 2 if(T_IO==1)
57 2 ACC=ACC|0x80;
58 2 T_CLK=1;
59 2 T_CLK=0;
60 2 }
61 1 return(ACC);
62 1 }
63
64 /*******************************************************************/
65 /* */
66 /* 按地址写命令 */
67 /* */
68 /*******************************************************************/
69 void v_W1302(uchar ucAddr,uchar ucDa)
70 {
71 1 T_RST=0;
72 1 T_CLK=0;
73 1 T_RST=1;
74 1 v_RTInputByte(ucAddr); /*地址,命令*/
75 1 v_RTInputByte(ucDa); /*写1Byte数据*/
76 1 T_CLK=1;
77 1 T_RST=0;
78 1
79 1 }
80
81 /*******************************************************************/
82 /* */
83 /* 按地址读取命令 */
84 /* */
85 /*******************************************************************/
86 uchar uc_R1302(uchar ucAddr)
87 {
88 1 unsigned char ucDa,k;
89 1 k=0x00;
90 1 T_RST=0;
91 1 T_CLK=0;
92 1 T_RST=1;
93 1 v_RTInputByte(ucAddr); /*地址,命令*/
94 1 ucDa=uc_RTOutputByte(); /*读取1Byte数据*/
95 1 T_CLK=1;
96 1 T_RST=0;
97 1 k=ucDa/16;
98 1 ucDa=ucDa%16;
99 1 ucDa=ucDa+k*10;
100 1 return(ucDa);
101 1 }
102
103 /*******************************************************************/
104 /* */
105 /* 设置状态 */
106 /* */
107 /*******************************************************************/
108 void v_Set1302()//uchar *pSecDa)
109 {
110 1 uchar i,j;
111 1 uchar ucAddr=0x80;
112 1 v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
113 1 for(i=0;i<7;i++)
114 1 {
115 2 j=ucCurtime[i];
116 2 v_W1302(ucAddr,j); /* 秒 分 时 日 月 星期 年 */
C51 COMPILER V8.02 TEXT 04/15/2009 13:03:06 PAGE 3
117 2 ucAddr +=2;
118 2 }
119 1 v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
120 1 }
121
122 /*******************************************************************/
123 /* */
124 /* 获取状态 */
125 /* */
126 /*******************************************************************/
127 void v_Get1302()
128 {
129 1 uchar i;
130 1 uchar ucAddr=0x81;
131 1
132 1 for (i=0;i<7;i++)
133 1 {
134 2 ucCurtime[i]=uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
135 2 ucAddr +=2;
136 2 }
137 1 }
138 ////////////////////////////////////////////////////////////////////
139 ////////////////////////////////////////////////////////////////////
140 ////////////////////////////////////////////////////////////////////
141 /* DS18B20端口定义及初始化*/
142 uchar tCount=0;
143 uint nCurTemp;
144
145 sbit DQ=P1^0;
146
147 bit Reset(void)
148 {
149 1 uchar i;
150 1
151 1 DQ=0;
152 1 for(i=255;i>0;i--);
153 1 DQ=1;
154 1 for(i=60;i>0;i--);
155 1 return(DQ);
156 1 //for(i=200;i>0;i--);
157 1 }
158 /*******************************************************************/
159 /* */
160 /* DS18B20写字节 */
161 /* */
162 /*******************************************************************/
163 void WriteDS18b20(uchar CMD)
164 {
165 1 uchar i,j;
166 1
167 1 for(i=0;i<8;i++)
168 1 {
169 2 if((CMD & 0x01)==0)
170 2 {
171 3 DQ=0;
172 3 for(j=35;j>0;j--);
173 3 DQ=1;
174 3 }
175 2 else
176 2 {
177 3 DQ=0;
178 3 for(j=2;j>0;j--);
C51 COMPILER V8.02 TEXT 04/15/2009 13:03:06 PAGE 4
179 3 DQ=1;
180 3 for(j=33;j>0;j--);
181 3 }
182 2 CMD = _cror_(CMD,1);
183 2 }
184 1 }
185 /*******************************************************************/
186 /* */
187 /* DS18B20读字节 */
188 /* */
189 /*******************************************************************/
190 unsigned char ReadDS18b20(void)
191 {
192 1 uchar i,j,temp;
193 1
194 1 temp=0;
195 1 for(i=0;i<8;i++)
196 1 {
197 2 temp=_cror_(temp,1);
198 2 DQ=0;
199 2 _nop_();
200 2 _nop_();
201 2 DQ=1;
202 2 for(j=10;j>0;j--);
203 2 if(DQ==1)
204 2 {
205 3 temp=temp | 0x80;
206 3 }
207 2 else
208 2 {
209 3 temp=temp | 0x00;
210 3 }
211 2 for(j=200;j>0;j--);
212 2 }
213 1 return(temp);
214 1 }
215
216 /*******************************************************************/
217 /* */
218 /* DS18B20初始化 */
219 /* */
220 /*******************************************************************/
221 void DS18b20_Init(void)
222 {
223 1 TMOD=0x01;
224 1 TH0=(65536-4000)/256;
225 1 TL0=(65536-4000)%256;
226 1 ET0=1;
227 1 //
228 1 EX0=1;
229 1 IT0=1;
230 1 EA=1;
231 1
232 1 while( Reset() ){};
233 1 WriteDS18b20(0xcc); //跳过ROM配置
234 1 WriteDS18b20(0x44); //启动温度转换
235 1 TR0=1;
236 1 }
237
238 /*******************************************************************/
239 /* */
240 /* 定时T1读取DS18B20当前温度 */
C51 COMPILER V8.02 TEXT 04/15/2009 13:03:06 PAGE 5
241 /* */
242 /*******************************************************************/
243 void t0(void) interrupt 1 using 0
244 {
245 1 uchar a;
246 1
247 1 TH0=(65536-4000)/256;
248 1 TL0=(65536-4000)%256;
249 1
250 1 tCount++;
251 1 if(tCount>=150)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -