📄 clock.lst
字号:
C51 COMPILER V8.02 CLOCK 12/02/2008 10:41:38 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN clock.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE clock.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 以写内容:初始化液晶后读时钟将时钟写入液晶,按键中断中setupint=1时读取
3 年数据然后写向0x80+0x40;读取液晶值已经完成。08-11-29
4 加入按键设置时间共五键设置向上向下完成取消加入温度DS18B20和时间限制跟写
5 入程序08-12-02
6
7 */
8 #include <reg52.h>
9 #define uchar unsigned char
10 #define uint unsigned int
11 sbit rs=P1^0;
12 sbit lcde=P1^1;
13 sbit lcdrw=P1^6;
14 sbit dscs=P1^2;
15 sbit dsas=P1^3;
16 sbit dsrw=P1^4;
17 sbit dsds=P1^5;
18 sbit complete=P3^4;
19 sbit cancle=P3^5;
20 sbit up=P3^0;
21 sbit down=P3^1;
22 sbit setupinit=P3^2;
23 sbit DQ=P3^7;//ds18b20与单片机连接口
24 sbit dacs=P1^7;
25 sbit darw=P3^6;
26 uchar code nyr[]=" 20 - -";
27 uchar code sfm[]=" : : . C";
28 uchar code addnyr[]={0x83,0x86,0x89,0x8c,0xc0,0xc3,0xc6};
29 uchar code addc[]={0x09,0x08,0x07,0x06,0x04,0x02,0x00};
30 uchar code hightime[]={99,12,31,7,23,59,59};
31 uchar code week[]="SunMonTueWedThuFriSta";
32 uchar data clockdata[6];
33 uchar setupint,readc;
34 uchar data disdata[5];
35 uint tvalue;//温度值
36 uchar tflag;//温度正负标志
37 void delay(uint x)
38 {
39 1 uchar j;
40 1 uint i;
41 1 for(i=x;i>0;i--)
42 1 for(j=110;j>0;j--);
43 1 }
44 /***********************液晶程序*******************************/
45 void Lcd_write_com(uchar command)
46 {
47 1 lcdrw=0;
48 1 rs=0;
49 1 lcde=0;
50 1 P0=command;
51 1 delay(5);
52 1 lcde=1;
53 1 delay(5);
54 1 lcde=0;
55 1 }
C51 COMPILER V8.02 CLOCK 12/02/2008 10:41:38 PAGE 2
56 uchar Lcd_readtime(uchar radd)
57 {
58 1 uchar rclock,rclock1,rclock2;
59 1 Lcd_write_com(radd);
60 1 rs=1;
61 1 lcdrw=1;
62 1 lcde=1;
63 1 P0=0xff;
64 1 delay(5);
65 1 rclock1=P0;
66 1 delay(5);
67 1
68 1 Lcd_write_com(radd+1);
69 1 rs=1;
70 1 lcdrw=1;
71 1 lcde=1;
72 1 P0=0xff;
73 1 delay(5);
74 1 rclock2=P0;
75 1 delay(5);
76 1 rclock=(rclock1-0x30)*10+(rclock2-0x30);
77 1 while(setupinit==0)
78 1 delay(10); // 消抖
79 1 delay(50);
80 1 EA=1;
81 1 return rclock;
82 1 }
83 void Lcd_write_data(uchar date)
84 {
85 1 lcdrw=0;
86 1 rs=1;
87 1 lcde=0;
88 1 P0=date;
89 1 delay(5);
90 1 lcde=1;
91 1 delay(5);
92 1 lcde=0;
93 1 }
94 void init()
95 {
96 1 uchar i;
97 1 EA=1;
98 1 EX0=1;
99 1 IT0=1;
100 1 Lcd_write_com(0x38);
101 1 Lcd_write_com(0x08);
102 1 Lcd_write_com(0x01);
103 1 Lcd_write_com(0x06);
104 1 Lcd_write_com(0x0c);
105 1 Lcd_write_com(0x80);
106 1 for(i=0;i<9;i++)
107 1 {
108 2 Lcd_write_data(nyr[i]);
109 2 }
110 1 Lcd_write_com(0x80+0x40);
111 1 for(i=0;i<16;i++)
112 1 {
113 2 Lcd_write_data(sfm[i]);
114 2 }
115 1 }
116 uchar ds12887_read(uchar add)
117 {
C51 COMPILER V8.02 CLOCK 12/02/2008 10:41:38 PAGE 3
118 1 uchar dsdate;
119 1 dsas=1;
120 1 dsds=1;
121 1 dsrw=1;
122 1 dscs=0;
123 1 P2=add;
124 1 dsas=0;
125 1 dsds=0;
126 1 P2=0xff;
127 1 dsdate=P2;
128 1 dsds=1;
129 1 dsas=1;
130 1 dscs=1;
131 1 return dsdate;
132 1 }
133 void ds12887_writeLCD()
134 {
135 1 uchar temp,si,ge,i,j;
136 1 for(i=0;i<7;i++)
137 1 {
138 2 temp=ds12887_read(addc[i]);
139 2 si=temp/10;
140 2 ge=temp%10;
141 2 Lcd_write_com(addnyr[i]);
142 2 if(i==3)
143 2 {
144 3 for(j=0;j<3;j++)
145 3 {
146 4 Lcd_write_data(week[(ge-1)*3+j]);
147 4 }
148 3 }
149 2 else
150 2 {
151 3 Lcd_write_data(0x30+si);
152 3 Lcd_write_data(0x30+ge);
153 3 }
154 2 }
155 1
156 1 }
157 void ds12887_keys_num(uchar cadd,uchar num)
158 {
159 1 uchar r1,r2,j;
160 1 r1=num/10;
161 1 r2=num%10;
162 1 if(cadd==0x8c)
163 1 {
164 2 Lcd_write_com(cadd);
165 2 for(j=0;j<3;j++)
166 2 {
167 3 Lcd_write_data(week[(r2-1)*3+j]);
168 3
169 3 }
170 2 Lcd_write_com(cadd+1);
171 2 }
172 1 else
173 1 {
174 2 Lcd_write_com(cadd);
175 2 Lcd_write_data(0x30+r1);
176 2 Lcd_write_data(0x30+r2);
177 2 Lcd_write_com(cadd+1);
178 2 }
179 1 }
C51 COMPILER V8.02 CLOCK 12/02/2008 10:41:38 PAGE 4
180 void ds12887_write()
181 {
182 1 uchar i;
183 1 //设置禁止更新时间
184 1 dscs=0;
185 1 dsas=1;
186 1 dsds=1;
187 1 dsrw=1;
188 1 P2=0x0b;
189 1 dsas=0;
190 1 dsrw=0;
191 1 P2=0x06;
192 1 dsrw=1;
193 1 dsas=1;
194 1 dscs=1;
195 1 for(i=0;i<7;i++)
196 1 {
197 2 dsas=1;
198 2 dsds=1;
199 2 dsrw=1;
200 2 dscs=0;
201 2 P2=addc[i];
202 2 dsas=0;
203 2 dsrw=0;
204 2 P2=clockdata[i];
205 2 dsrw=1;
206 2 dsas=1;
207 2 dscs=1;
208 2 }
209 1 //开始更新时间
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -