?? ds1307.lst
字號:
C51 COMPILER V7.50 DS1307 01/02/2009 14:29:38 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DS1307
OBJECT MODULE PLACED IN ds1307.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds1307.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3 /*********************************LCD定義部分********************************/
4 //輸入方式設置
5 #define LCD_AC_AUTO_INCREMENT 0x06 //數據讀、寫操作后,AC自動增一
6 #define LCD_AC_AUTO_DECREASE 0x04 //數據讀、寫操作后,AC自動減一
7 #define LCD_MOVE_ENABLE 0x05 //數據讀、寫操作,畫面平移
8 #define LCD_MOVE_DISENABLE 0x04 //數據讀、寫操作,畫面不動
9 #define LCD_GO_HOME 0x02 //AC=0,光標、畫面回HOME位
10 //設置顯示、光標及閃爍開、關
11 #define LCD_DISPLAY_ON 0x0C //顯示開
12 #define LCD_DISPLAY_OFF 0x08 //顯示關
13 #define LCD_CURSOR_ON 0x0A //光標顯示
14 #define LCD_CURSOR_OFF 0x08 //光標不顯示
15 #define LCD_CURSOR_BLINK_ON 0x09 //光標閃爍
16 #define LCD_CURSOR_BLINK_OFF 0x08 //光標不閃爍
17 //光標、畫面移動,不影響DDRAM
18 #define LCD_LEFT_MOVE 0x18 //LCD顯示左移一位
19 #define LCD_RIGHT_MOVE 0x1C //LCD顯示右移一位
20 #define LCD_CURSOR_LEFT_MOVE 0x10 //光標左移一位
21 #define LCD_CURSOR_RIGHT_MOVE 0x14 //光標右移一位
22 //工作方式設置
23 #define LCD_DISPLAY_DOUBLE_LINE 0x38 //兩行顯示
24 #define LCD_DISPLAY_SINGLE_LINE 0x30 //單行顯示
25 #define LCD_CLEAR_SCREEN 0X01 //清屏
26 /***********************LCD1602地址相關******************************/
27 #define LINE1_HEAD 0x80 // 第一行DDRAM起始地址
28 #define LINE2_HEAD 0xc0 // 第二行DDRAM起始地址
29 #define LINE1 0 //第一行
30 #define LINE2 1 //第二行
31 #define LINE_LENGTH 16 //每行的最大字符長度
32 /***********************LCD1602接線引腳定義**************************
33 **********************可根據實際電路改變*******************************/
34 #define LCDIO P2 //定義P2口與LCD1602的數據口相接
35 sbit LCD_RS=P1^4;
36 sbit LCD_RW=P1^3;
37 sbit LCD_EN=P1^2;
38 sbit LCD_BUSY=LCDIO^7;
39 /**********************另外相關的定義*********************************/
40 #define HIGH 1
41 #define LOW 0
42 #define TURE 1
43 #define FALSE 0
44 #define uchar unsigned char
45 #define uint unsigned int
46
47 /*************************以下是函數的申明部分*************************/
48 void LCD_init(void); //LCD1602初始化
49 void LCD_send_command(uchar command); //
50 void LCD_send_data(uchar dat);
51 void LCD_write_char(uchar x,uchar y,uchar dat);
52 void LCD_write_string(uchar x,uchar y,char *Data);
53 void delay_ms(uint n);
54 void LCD_check_busy(void);
55 /*********************結束***********************************************/
C51 COMPILER V7.50 DS1307 01/02/2009 14:29:38 PAGE 2
56 /***************************DS1307開始*****************************************************************/
57 #define Wait1us _nop_();
58 #define Wait2us {_nop_();_nop_();}
59 #define Wait4us {Wait2us;Wait2us;}
60 #define Wait8us {Wait4us;Wait4us;}
61 #define Wait10us {Wait8us;Wait2us;}
62 #define WRITEDS1307 0xD0
63 #define READDS1307 0xD1
64 #define WRITE2402 0xa0
65 #define READ2402 0xa1
66 sbit SDA=P1^4; //DS1307 Serial-Data Input pin 5
67 sbit SCL=P1^3; //DS1307 Serial-Clock Input pin 6
68 /************************************************************/
69 void I2C_start(void);//I2C start function
70 void I2C_stop(void);//I2C stop function
71 //void I2C_send_ack(void);//I2C send responsion function
72 void I2C_send_noack(void);
73 unsigned char I2C_write_byte(unsigned char IIC_data);//I2C bus write byte function
74 unsigned char I2C_read_byte(void);//I2C bus read byte function
75 /***********************************************************************/
76 void Write1307(unsigned char add,unsigned char dat);//write information to ds1307
77 unsigned char Read1307(unsigned char add);//read information from ds1307
78 void Read_RTC(void);//read RTC
79 void Set_RTC(void);//set RTC
80 /***********************************************************************/
81 unsigned char set_rtc_code[7];
82 code unsigned char rtc_address[7]={0x00,0x01,0x02,0x03,0x04,0x05,0x06};
83 code unsigned char *day[7]={"Mon","Tue","Wen","Thu","Fri","Sat","Sun"};
84 unsigned char read_rtc_code[7];
85 /***********************************************************************/
86 void Initial(void);//system initize function
87 void Display(void);//RTC display function
88 /***********************************************************************/
89 /***********************************************************************/
90
91 /***********************************************************************/
92 /*void Initial(void)
93 {
94 Set_RTC();
95 }*/
96 /***********************************************************************/
97 void I2C_start(void)
98 {
99 1 SDA=1;
100 1 SCL=1;
101 1 Wait8us;
102 1 SDA=0;
103 1 Wait8us;
104 1 SCL=0;
105 1
106 1 }
107 /***********************************************************************/
108 void I2C_stop(void)
109 {
110 1 SDA=0;
111 1 SCL=1;
112 1 Wait8us;
113 1 SDA=1;
114 1 Wait4us;
115 1 SCL=0;
116 1 }
117
C51 COMPILER V7.50 DS1307 01/02/2009 14:29:38 PAGE 3
118 void I2C_send_noack(void)
119 {
120 1 SDA=1;
121 1 SCL=1;
122 1 Wait4us;
123 1 SCL=0;
124 1 }
125 /***********************************************************************/
126 unsigned char I2C_write_byte(unsigned char IIC_data)
127 {
128 1 unsigned char i;
129 1 for(i=0;i<8;i++)
130 1 {
131 2 SCL=0;
132 2 if((IIC_data<<i) & 0x80)
133 2 SDA=1; //判斷發送位
134 2 else
135 2 SDA=0;
136 2 Wait2us;
137 2 SCL=1;
138 2 Wait4us;
139 2 SCL=0;
140 2 }
141 1 Wait4us;
142 1 SDA=1; //發送完8bit,釋放總線準備接收應答位
143 1 Wait2us;
144 1 SCL=1;
145 1 Wait4us; //sda上數據即是從應答位
146 1 if (SDA==1)
147 1 {
148 2 SCL=0; //不考慮從應答位 但要控制好時序
149 2 return 1;
150 2 }
151 1 else
152 1 {
153 2 SCL=0; //不考慮從應答位 但要控制好時序
154 2 return 0;
155 2 }
156 1 }
157 /***********************************************************************/
158 unsigned char I2C_read_byte(void)
159 {
160 1 unsigned char i,dat;
161 1 dat=0;
162 1 SDA=1;
163 1 for (i=0;i<8;i++)
164 1 {
165 2 dat=dat<<1;
166 2 SCL=1;
167 2 Wait2us;
168 2 if(SDA==1)
169 2 {
170 3 dat++;
171 3 }
172 2
173 2 SCL=0;
174 2 }
175 1 return (dat);
176 1 }
177 /***********************************************************************/
178 /******************************** DS1307 PART START ****************/
179 void Write1307(unsigned char add,unsigned char dat)
C51 COMPILER V7.50 DS1307 01/02/2009 14:29:38 PAGE 4
180 {
181 1 I2C_start();
182 1 I2C_write_byte(WRITEDS1307);
183 1 I2C_write_byte(add);
184 1 I2C_write_byte(dat);
185 1 I2C_stop();
186 1 }
187
188 /***********************************************************************/
189 unsigned char Read1307(unsigned char add)
190 {
191 1
192 1 unsigned char dat;
193 1 I2C_start();
194 1 I2C_write_byte(WRITEDS1307);
195 1 I2C_write_byte(add);
196 1 I2C_start();
197 1 I2C_write_byte(READDS1307);
198 1 dat=I2C_read_byte();
199 1 I2C_send_noack();
200 1 I2C_stop();
201 1 return (dat);
202 1 }
203 /****************************讀DS1307的寄存器*******************************************/
204 void Read_RTC(void)
205 {
206 1 unsigned char i,*p;
207 1 p=rtc_address;
208 1 for(i=0;i<7;i++)
209 1 {
210 2 read_rtc_code[i]=Read1307(*p);
211 2 p++;
212 2 }
213 1 }
214 /***************************DS1307的初始化********************************************/
215 void Set_RTC(void)
216 {
217 1 unsigned char i;
218 1 // p=rtc_address;
219 1 Write1307(0,0x81);
220 1
221 1 for(i=8;i>1;i--)
222 1 {
223 2 Write1307((i-2),set_rtc_code[i-2]);
224 2 }
225 1 }
226
227
228
229 void Write2402(unsigned char add,unsigned char dat)
230 {
231 1 I2C_start();
232 1 I2C_write_byte(WRITE2402);
233 1 I2C_write_byte(add);
234 1 I2C_write_byte(dat);
235 1 I2C_stop();
236 1 }
237
238 /***********************************************************************/
239 unsigned char Read2402(unsigned char add)
240 {
241 1
C51 COMPILER V7.50 DS1307 01/02/2009 14:29:38 PAGE 5
242 1 unsigned char dat;
243 1 I2C_start();
244 1 I2C_write_byte(WRITE2402);
245 1 I2C_write_byte(add);
246 1 I2C_start();
247 1 I2C_write_byte(READ2402);
248 1 dat=I2C_read_byte();
249 1 I2C_send_noack();
250 1 I2C_stop();
251 1 return (dat);
252 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 304 ----
CONSTANT SIZE = 56 ----
XDATA SIZE = 14 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -