📄 ds1307.lst
字号:
C51 COMPILER V7.07 DS1307 02/27/2007 10:08:54 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE DS1307
OBJECT MODULE PLACED IN ds1307.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ds1307.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /********************************************************************
2 VIIC_C51.C
3 此程序是I2C操作平台(主方式的软件平台)的底层的C子程序,如发送数据
4 及接收数据,应答位发送,并提供了几个直接面对器件的操作函数,它很方便的
5 与用户程序连接并扩展.....
6
7 注意:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作
8 一定的修改....(本例是1us机器周期,即晶振频率要小于12MHZ)
9
10 ********************************************************************/
11
12 // adress-8bits
13
14 //#include <reg764.h>
15 #include <SST89x5x4.H> /*头文件的包含*/
16
17 #include <intrins.h>
18 #include <math.h>
19
20 //#include <SST89x5x4.H>
21
22 #define uchar unsigned char
23 #define uint unsigned int
24 #define lcd_clr 0x01
25 #define you_on 0x0f
26
27 #define BIT0 0X01
28 #define BIT1 0X02
29 #define BIT2 0X04
30 #define BIT3 0X08
31 #define BIT4 0X10
32 #define BIT5 0X20
33 #define BIT6 0X40
34 #define BIT7 0X80
35 #define _Nop() _nop_() /*定义空指令*/
36
37
38 /*
39 keyboard data
40 0 12
41 1 8
42 2 4
43 3 0
44 4 1
45 5 2
46 6 3
47 7 5
48 8 6
49 9 7
50 10-ok 9
51 11 10
52 12-wrong11
53 13 13
54 14 14
55 15 15
C51 COMPILER V7.07 DS1307 02/27/2007 10:08:54 PAGE 2
56 */
57
58 //全局变量定义
59 sbit rs = P1^7;
60 sbit rw = P1^6;
61 sbit e = P2^1;
62 sbit lcd_deng = P2^3;
63
64
65 //函数申明
66 void lcd_ini(void);
67 void lcd_wrc(uchar com);
68 void lcd_wrd(uchar dat);
69 void lcd_checkbusy();
70 void delay(uchar n);
71 void lcd_on();
72 void lcd_off();
73 uchar lcd_read_ac();
74 void lcd_dis_num(uint dat);
75 void lcd_dis_ch(uchar h,uchar l);
76 void lcd_add(uchar h,uchar l);
77 void lcd_dis_int(long dat,uint int_bits); //显示一个有符号的整数,显示为dat的低int_bits位
78
79 uchar key_data(void);
80
81
82 //i2c相关函数
83 void Start_I2c(); //起动总线函数
84 void Stop_I2c(); //结束总线函数
85 void SendByte(uchar c); //字节数据传送函数send
86 uchar RcvByte(); //字节数据传送函数 receive
87 void Ack_I2c(bit a); //主控器进行应答信号
88 bit ISendStr_8(uchar add,uchar son_add,uchar dat); //向子地址为8位的器件发送多字节数据函数
89 bit ISendStr_16(uchar add,uint son_add,uchar dat); //向子地址为16位的器件发送多字节数据函数
90 uchar IRcvStr_8(uchar add,uchar son_add); //向子地址为8位的器件读取多字节数据函数
91 uchar IRcvStr_16(uchar add,uint son_add); //向子地址为16位的器件读取多字节数据函数
92
93
94 void lcd_dis_time(void); //时钟显示函数
95 void set_time(uchar sec, uchar min, uchar hr, uchar dy, uchar dt,uchar mn,uchar yr); //时钟设置sec, min,
-hr, dy, dt, mn, yr
96
97
98
99 /* 常,变量定义区 */
100
101 /*端口位定义*/
102 sbit SDA = P3^3; /*模拟I2C数据传送位*/
103 sbit SCL = P1^4; /*模拟I2C时钟控制位*/
104 sbit WP = P1^3;
105 /*状态标志*/
106
107 bit ack; /*应答标志位*/
108 uchar s;
109
110 void main()
111 {
112 1 uchar i = 0;
113 1 uchar v;
114 1 uchar mydata = 0;
115 1 uchar keydata = 0;
116 1 // uint pot_i;
C51 COMPILER V7.07 DS1307 02/27/2007 10:08:54 PAGE 3
117 1 // pot_i = &i;
118 1 uchar max=58;
119 1 uchar *s;
120 1 s = &max;
121 1
122 1 lcd_off();
123 1 lcd_on();
124 1 lcd_ini();
125 1 // lcd_add(2,1);
126 1 // lcd_dis_ch(0xb4,0xa1);
127 1
128 1
129 1 // I2C
130 1 WP = 0;
131 1
132 1 // write to rom
133 1 /*
134 1 lcd_add(2,1);
135 1
136 1 i = ISendStr_16(0xa0,0x0000,19);
137 1 lcd_wrd(0x30+i);
138 1 */
139 1 /*
140 1 lcd_add(3,1);
141 1 for(v=0x0000;v<8;v++)
142 1 {
143 1 i = 0;
144 1 while(i == 0)
145 1 {
146 1 i = ISendStr_16(0xa0,v,250+2*v+1);
147 1 }
148 1 lcd_wrd(0x30+(uchar)i);
149 1 }
150 1 */
151 1
152 1 // read rom set address
153 1 /*
154 1 for(v=0x0000;v<8;v++)
155 1 {
156 1 i = IRcvStr_16(0xa0,v);
157 1 lcd_wrc(0x88+2*v);
158 1 lcd_dis_num(i);
159 1 }
160 1
161 1 /*
162 1 */
163 1
164 1
165 1 // while(1);
166 1
167 1 set_time(30,11,10,2,27,2,7); //时钟设置sec, min, hr, dy, dt, mn, yr
168 1 while(1)
169 1 {
170 2 lcd_dis_time(); //时钟显示函数
171 2
172 2
173 2 keydata = key_data();
174 2 lcd_add(4,6);
175 2 switch(keydata)
176 2 {
177 3 case 0:
178 3 {
C51 COMPILER V7.07 DS1307 02/27/2007 10:08:54 PAGE 4
179 4 v = 3;
180 4 lcd_dis_num(v);
181 4 break;
182 4 }
183 3 case 1:
184 3 {
185 4 v = 4;
186 4 lcd_dis_num(v);
187 4 break;
188 4 }
189 3 case 2:
190 3 {
191 4 v = 5;
192 4 lcd_dis_num(v);
193 4 break;
194 4 }
195 3 case 3:
196 3 {
197 4 v = 6;
198 4 lcd_dis_num(v);
199 4 break;
200 4 }
201 3 case 4:
202 3 {
203 4 v = 2;
204 4 lcd_dis_num(v);
205 4 break;
206 4 }
207 3 case 5:
208 3 {
209 4 v = 7;
210 4 lcd_dis_num(v);
211 4 break;
212 4 }
213 3 case 6:
214 3 {
215 4 v = 8;
216 4 lcd_dis_num(v);
217 4 break;
218 4 }
219 3 case 7:
220 3 {
221 4 v = 9;
222 4 lcd_dis_num(v);
223 4 break;
224 4 }
225 3 case 8:
226 3 {
227 4 v = 1;
228 4 lcd_dis_num(v);
229 4 break;
230 4 }
231 3 case 9:
232 3 {
233 4 v = 10;
234 4 lcd_dis_num(v);
235 4 break;
236 4 }
237 3 case 10:
238 3 {
239 4 v = 11;
240 4 lcd_dis_num(v);
C51 COMPILER V7.07 DS1307 02/27/2007 10:08:54 PAGE 5
241 4 break;
242 4 }
243 3 case 11:
244 3 {
245 4 v = 12;
246 4 lcd_dis_num(v);
247 4 break;
248 4 }
249 3 case 12:
250 3 {
251 4 v = 0;
252 4 lcd_dis_num(v);
253 4 break;
254 4 }
255 3 case 13:
256 3 {
257 4 v = 13;
258 4 lcd_dis_num(v);
259 4 break;
260 4 }
261 3 case 14:
262 3 {
263 4 v = 14;
264 4 lcd_dis_num(v);
265 4 break;
266 4 }
267 3 case 15:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -