📄 ds1302.lst
字号:
C51 COMPILER V8.02 DS1302 02/22/2009 12:09:52 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: E:\Proteus_keil\Keil\C51\BIN\C51.EXE ds1302.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<uint.h>
3 #include<delay.h>
4
5 uchar ds_time[]={"Time:"};
6 uchar ds_date[]={"Date:"};
7 uchar week[]={"Week:"};
8 uchar heng[]={"-"};
9 uchar td[]={"0123456789"};
10 uchar ten=0;
11
12 sbit ds1302_rs=P2^0;
13 sbit ds1302_clk=P2^1;
14 sbit ds1302_dat=P2^2;
15 sbit lcd_rs=P3^5;
16 sbit lcd_rw=P3^6;
17 sbit lcd_ep=P3^7;
18
19 void write_ds1302_dat(uchar cmd) //写入时钟一个字节
20 {
21 1 uchar i;
22 1 for(i=0;i<8;i++)
23 1 {
24 2 cmd=cmd>>1;
25 2 ds1302_dat=CY;
26 2 ds1302_clk=1;
27 2 ds1302_clk=0;
28 2 }
29 1 }
30
31 uchar read_ds1302_dat(void) //读时钟一个字节
32 {
33 1 uchar i;
34 1 for(i=0;i<8;i++)
35 1 {
36 2 ACC=ACC>>1;
37 2 if(ds1302_dat)ACC=ACC|0x80;
38 2 ds1302_clk = 1;
39 2 ds1302_clk= 0;
40 2 }
41 1 ds1302_rs = 0;
42 1 return(ACC);
43 1 }
44
45 uchar read_ds1302(uchar ord1) //读时钟
46 {
47 1 uchar dd=0;
48 1 ds1302_rs=0;
49 1 ds1302_clk=0;
50 1 ds1302_rs=1;
51 1 write_ds1302_dat(ord1);
52 1 dd=read_ds1302_dat();
53 1 ds1302_rs=0;
54 1 return(dd);
55 1 }
C51 COMPILER V8.02 DS1302 02/22/2009 12:09:52 PAGE 2
56
57 void write_ds1302(uchar ord2,uchar dd) //写时钟
58 {
59 1 ds1302_rs=0;
60 1 ds1302_clk=0;
61 1 ds1302_rs=1;
62 1 write_ds1302_dat(ord2);
63 1 write_ds1302_dat(dd);
64 1 ds1302_rs=0;
65 1 }
66
67 void inti_ds1302()
68 {
69 1 ds1302_rs=0;
70 1 ds1302_clk=0;
71 1 ds1302_dat=0;
72 1
73 1 /* write_ds1302(0x8e,0x00); //打开写保护
74 1 write_ds1302(0x80,0x23); //启动时钟,并设置秒
75 1 write_ds1302(0x82,0x43); //分
76 1 write_ds1302(0x84,0x15); //时
77 1 write_ds1302(0x86,0x03); //日
78 1 write_ds1302(0x88,0x03); //月
79 1 write_ds1302(0x8a,0x02); //星期
80 1 write_ds1302(0x8c,0x10); //年
81 1 write_ds1302(0x90,0xa5); //启动充电器
82 1 write_ds1302(0x8e,0x80); //关写保护 */
83 1 }
84
85 void lcd_enable()
86 {
87 1 lcd_rs=0;
88 1 lcd_rw=0;
89 1 lcd_ep=0;
90 1 delay(4);
91 1 lcd_ep=1;
92 1 }
93
94 void lcd_inti()
95 {
96 1 P1=0x3c; //显示 模式设置
97 1 lcd_enable();
98 1 P1=0x08; //显示关闭(光标返回00地址)
99 1 lcd_enable();
100 1 P1=0x01; //清显示
101 1 lcd_enable();
102 1 P1=0x06; //显示光标移动设置
103 1 lcd_enable();
104 1 P1=0x0c; //开显示及光标设置
105 1 lcd_enable();
106 1 }
107
108 write_lcd(uchar x)
109 {
110 1 P1=x;
111 1 lcd_rs=1;
112 1 lcd_rw=0;
113 1 lcd_ep=0;
114 1 delay(4);
115 1 lcd_ep=1;
116 1 }
117
C51 COMPILER V8.02 DS1302 02/22/2009 12:09:52 PAGE 3
118 void c_a_dp(uchar asd)
119 {
120 1 ten=0;ten=asd&0xf0;ten=ten>>4;asd=asd&0x0f;
121 1 write_lcd(td[ten]);
122 1 write_lcd(td[asd]);
123 1 }
124
125 void main()
126 {
127 1 uchar s=0,cou;
128 1 P1=0x00;
129 1 inti_ds1302();
130 1 lcd_inti();
131 1
132 1 do{P1=0x80;
133 2 lcd_enable();
134 2 s=read_ds1302(0x89);
135 2 for(cou=0;cou<5;cou++)
136 2 {write_lcd(ds_time[cou]);}
137 2
138 2 s=read_ds1302(0x85); //时
139 2 c_a_dp(s);
140 2 write_lcd(heng[0]);
141 2 s=read_ds1302(0x83); //分
142 2 c_a_dp(s);
143 2 write_lcd(heng[0]);
144 2 s=read_ds1302(0x81); //秒
145 2 c_a_dp(s);
146 2
147 2 P1=0xc0;
148 2 lcd_enable();
149 2 for(cou=0;cou<5;cou++)
150 2 {write_lcd(week[cou]);}
151 2 s=read_ds1302(0x8b); //星期
152 2 write_lcd(td[s-1]);
153 2
154 2 P1=0x90;
155 2 lcd_enable();
156 2 for(cou=0;cou<5;cou++)
157 2 {write_lcd(ds_date[cou]);}
158 2 s=read_ds1302(0x87); //日
159 2 c_a_dp(s);
160 2 write_lcd(heng[0]);
161 2 s=read_ds1302(0x89); //月
162 2 c_a_dp(s);
163 2 write_lcd(heng[0]);
164 2 s=read_ds1302(0x8d); //年
165 2 c_a_dp(s);
166 2 } while(1);
167 1
168 1
169 1 }
170
171
172
173
174
175
176
177
178
C51 COMPILER V8.02 DS1302 02/22/2009 12:09:52 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 403 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 32 11
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -