📄 1.lst
字号:
C51 COMPILER V8.08 1 06/06/2008 15:43:25 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE 1
OBJECT MODULE PLACED IN 1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //芯片:AT89C51
2 //主频:12MHz
3
4 #include "reg52.h"
5 #include "lcd12864_driver.h"
6 #define ds12887_out P1
7 sbit ds12887_cs= P3^2;
8 sbit ds12887_as =P3^3;
9 sbit ds12887_rw =P3^4;
10 sbit ds12887_ds =P3^5;
11 sbit set_s=P2^0 ;
12 sbit DQ =P2^1;//根据实际情况定义18B20
13 void s_init(void);
14 void dis_one_zi(uchar x_add,uchar y_add,uchar code *po,bit back_flag,bit char_moudle);
15 void dis_one_char(uchar x,uchar y,uchar asc_num,bit b_flag);
16
17 uchar code x0[32] = { //16*16汉字点阵字模
18 /*年 CC4EA */
19 0x00,0x00,0x20,0x30,0xF8,0xDC,0x4C,0x48,
20 0x48,0xF8,0xF8,0x48,0x48,0x48,0x48,0x08,
21 0x00,0x04,0x04,0x04,0x07,0x07,0x04,0x04,
22 0x04,0x7F,0x7F,0x04,0x04,0x04,0x04,0x04};
23 uchar code x1[32] = {
24 /*月 CD4C2 */
25 0x00,0x00,0x00,0x00,0xF8,0xF8,0x48,0x48,
26 0x48,0x48,0x48,0x48,0xF8,0xF8,0x00,0x00,
27 0x00,0x00,0x40,0x70,0x3F,0x0F,0x02,0x02,
28 0x02,0x02,0x42,0x42,0x7F,0x7F,0x00,0x00};
29 uchar code x2[32] = {
30 /*日 CC8D5 */
31 0x00,0x00,0x00,0xF8,0xF8,0x08,0x08,0x08,
32 0x08,0x08,0x08,0x08,0xF8,0xF8,0x00,0x00,
33 0x00,0x00,0x00,0x7F,0x7F,0x11,0x11,0x11,
34 0x11,0x11,0x11,0x11,0x3F,0x3F,0x00,0x00};
35 uchar code x3[32] = {
36 /*星 CD0C7 */
37 0x00,0x00,0x00,0xF8,0xF8,0xA8,0xA8,0xA8,
38 0xA8,0xA8,0xA8,0xA8,0xF8,0xF8,0x00,0x00,
39 0x00,0x48,0x4C,0x4F,0x4B,0x4A,0x4A,0x4A,
40 0x7F,0x7F,0x4A,0x4A,0x4A,0x4A,0x42,0x40};
41 uchar code x4[32] = {
42 /*期 CC6DA */
43 0x00,0x10,0x10,0xFC,0xFC,0x50,0x50,0xFC,
44 0xFC,0x10,0xF8,0xF8,0x48,0x48,0xF8,0xF8,
45 0x00,0x44,0x64,0x3F,0x1F,0x05,0x15,0x37,
46 0x37,0x64,0x7F,0x1F,0x42,0x42,0x7F,0x7F};
47 uchar code x5[32] = {
48 /*时 CCAB1 */
49 0x00,0x00,0xF8,0xF8,0x88,0x88,0xF8,0xF8,
50 0x20,0x20,0x20,0x20,0xFC,0xFC,0x20,0x20,
51 0x00,0x00,0x3F,0x3F,0x08,0x08,0x1F,0x1F,
52 0x01,0x43,0x47,0x46,0x7F,0x7F,0x00,0x00};
53 uchar code x6[32] = {
54 /*分 CB7D6 */
55 0x00,0x00,0x80,0xC0,0xE0,0x70,0x1C,0x0C,
C51 COMPILER V8.08 1 06/06/2008 15:43:25 PAGE 2
56 0x04,0x00,0x0C,0x1C,0x70,0xE0,0xC0,0x80,
57 0x00,0x41,0x41,0x61,0x21,0x31,0x1F,0x0F,
58 0x01,0x41,0x41,0x61,0x7F,0x1F,0x01,0x01};
59 uchar code x7[32] = {
60 /*秒 CC3EB */
61 0x00,0x40,0x48,0xC8,0xF8,0xF8,0x4C,0x44,
62 0xC0,0xF0,0x30,0xFC,0xFC,0x30,0x70,0xE0,
63 0x00,0x08,0x0E,0x07,0x7F,0x7F,0x43,0x43,
64 0x41,0x60,0x20,0x37,0x1F,0x1C,0x0E,0x02
65
66 };
67
68
69 //DS1820 子程序
70 //这里以11.0592M晶体为例,不同的晶体速度可能需要调整延时的时间
71
72 typedef unsigned char byte;
73 typedef unsigned int word;
74 //延时
75 void delay(word useconds)
76 {
77 1 for(;useconds>0;useconds--);
78 1 }
79 //复位
80 byte ow_reset(void) //总线复位
81 {
82 1 byte presence;
83 1 DQ = 0; //pull DQ line low
84 1 delay(29); // leave it low for 480us
85 1 DQ = 1; // allow line to return high
86 1 delay(3); // wait for presence
87 1 presence = DQ; // get presence signal
88 1 delay(25); // wait for end of timeslot
89 1 return(presence); // presence signal returned
90 1 } // 0=presence, 1 = no part
91 //从 1-wire 总线上读取一个字节
92 byte read_byte(void) //读取DS12b80单线总线字节
93 {
94 1 byte i;
95 1 byte value = 0;
96 1 for (i=8;i>0;i--)
97 1 {
98 2 value>>=1;
99 2 DQ = 0; // pull DQ low to start timeslot
100 2 DQ = 1; // then return high
101 2 delay(1); //for (i=0; i<3; i++);
102 2 if(DQ)value|=0x80;
103 2 delay(6); // wait for rest of timeslot
104 2 }
105 1 return(value);
106 1 }
107 //向 1-WIRE 总线上写一个字节
108 void write_byte(char val) //写入DS12b80单线总线字节
109 {
110 1 byte i;
111 1 for (i=8; i>0; i--) // writes byte, one bit at a time
112 1 {
113 2 DQ = 0; // pull DQ low to start timeslot
114 2 DQ = val&0x01;
115 2 delay(5); // hold value for remainder of timeslot
116 2 DQ = 1;
117 2 val=val/2;
C51 COMPILER V8.08 1 06/06/2008 15:43:25 PAGE 3
118 2 }
119 1 delay(5);
120 1 }
121
122 char Read_Temperature(void)//读取温度
123 {
124 1 union
125 1 {
126 1 byte c[2];
127 1 int x;
128 1 }temp;
129 1 ow_reset();
130 1 write_byte(0xCC); // Skip ROM
131 1 write_byte(0xBE); // Read Scratch Pad
132 1 temp.c[1]=read_byte();
133 1 temp.c[0]=read_byte();
134 1 ow_reset();
135 1 write_byte(0xCC); //Skip ROM
136 1 write_byte(0x44); // Start Conversion
137 1 return temp.x/2;
138 1 }
139
140 uchar ds12887_read(uchar addr)//读取DS12C887数据
141 {
142 1 uchar temp;
143 1 ds12887_cs=0;
144 1 ds12887_ds=0;
145 1 ds12887_as=1;
146 1 ds12887_out=addr;
147 1 _nop_();
148 1 ds12887_as=0;
149 1 ds12887_rw=1;
150 1 ds12887_ds=1;
151 1 _nop_();
152 1 temp=ds12887_out;
153 1 ds12887_ds=0;
154 1 ds12887_cs=1;
155 1 return temp;
156 1 }
157
158 void ds12887_write(uchar addr,uchar sdata) //写DS12c887
159 {
160 1
161 1 ds12887_cs=0;
162 1 ds12887_ds=0;
163 1 ds12887_as=1;
164 1 ds12887_out=addr;
165 1 _nop_();
166 1 ds12887_as=0;
167 1 ds12887_rw=0;
168 1 ds12887_ds=1;
169 1 ds12887_out=sdata;
170 1 _nop_();
171 1 ds12887_ds=0;
172 1 ds12887_cs=1;
173 1 }
174
175 uchar get_s() //获取DS12c887秒数据
176 {
177 1 uchar uip,temp;
178 1 while(uip & 0x80 !=0x80)
179 1 {
C51 COMPILER V8.08 1 06/06/2008 15:43:25 PAGE 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -