📄 1302.lst
字号:
C51 COMPILER V7.20 1302 09/20/2011 08:31:26 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE 1302
OBJECT MODULE PLACED IN 1302.OBJ
COMPILER INVOKED BY: C:\keil\C51\BIN\C51.EXE 1302.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include<intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 sbit rs=P1^0;
6 sbit rw=P1^1;
7 sbit en=P1^2;
8 sbit clk=P1^7;
9 sbit dat=P1^4;
10 sbit cs=P1^3;
11 uchar code a[]=" 2010-11-30 1";
12 uchar code b[]=" 00:00:00 ";
13 uchar read_date[]={0x00,0x59,0x23,0x30,0x11,0x06,0x10};
14 //秒、分、小时、日、月、星期、年
15 code uchar write_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
16 code uchar read_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
17 void delay(uint z)
18 {
19 1 uint x,y;
20 1 for(x=z;x>0;x--)
21 1 for(y=110;y>0;y--);
22 1 }
23 void delayus(uint k)
24 {
25 1 for(;k>0;k--);
26 1 }
27 void check_1602()
28 {
29 1 P2=0xff;
30 1 rs=0;
31 1 rw=1;
32 1 en=1;
33 1 delayus(3);
34 1 while(P2&0x80);
35 1 en=0;
36 1
37 1 }
38 void write1602_command(uchar d,uchar command)//写指令子函数
39 {
40 1 if(d)
41 1 check_1602();
42 1 rs=0;
43 1 rw=0;
44 1 P2=command;
45 1 delayus(100);
46 1 en=1;
47 1 delay(4);
48 1 en=0;
49 1 }
50 void write1602_data(uchar date)//写数据子函数
51 {
52 1 rs=1;
53 1 rw=0;
54 1 P2=date;
55 1 delayus(100);
C51 COMPILER V7.20 1302 09/20/2011 08:31:26 PAGE 2
56 1 en=1;
57 1 delay(4);
58 1 en=0;
59 1 }
60 void init()
61 {
62 1 en=0;
63 1 rw=0;
64 1 write1602_command(1,0x38);
65 1 write1602_command(1,0x01);
66 1 write1602_command(1,0x0c);
67 1 write1602_command(1,0x06);
68 1 write1602_command(1,0x80);
69 1 }
70 void write_1302_byte(uchar temp)
71 {
72 1 uchar i;
73 1 for (i=0;i<8;i++) //循环8次 写入数据
74 1 {
75 2 clk=0;
76 2 dat=temp&0x01; //每次传输低字节
77 2 temp>>=1; //右移一位
78 2 clk=1;
79 2 }
80 1 }
81 void write_1302( uchar add,uchar date )
82 {
83 1 cs=0;
84 1 _nop_();
85 1 clk=0;
86 1 _nop_();
87 1 cs=1;
88 1 _nop_(); //启动
89 1 write_1302_byte(add); //发送地址
90 1 write_1302_byte(date); //发送数据
91 1 cs=0; //恢复
92 1 }
93 uchar Read_Ds1302 (uchar addr )
94 {
95 1 uchar i,temp=0x00;
96 1 cs=0;
97 1 _nop_();
98 1 clk=0;
99 1 _nop_();
100 1 cs=1;
101 1 _nop_();
102 1 write_1302_byte(addr);
103 1 for (i=0;i<8;i++) //循环8次 读取数据
104 1 {
105 2 clk=1;
106 2 _nop_();
107 2 if(dat)
108 2 temp|=0x80; //每次传输低字节
109 2 clk=0;
110 2 temp>>=1; //右移一位
111 2 }
112 1 cs=0;
113 1 _nop_();
114 1 cs=1;
115 1 dat=0;
116 1
117 1 return (temp); //返回
C51 COMPILER V7.20 1302 09/20/2011 08:31:26 PAGE 3
118 1 }
119 void Read_RTC(void) //读取 日历
120 {
121 1 unsigned char i,*p;
122 1 p=read_address; //地址传递
123 1 for(i=0;i<7;i++) //分7次读取 年月日时分秒星期
124 1 {
125 2 read_date[i]=Read_Ds1302(*p);
126 2 p++;
127 2 }
128 1 }
129 void Set_RTC(void) //设定 日历
130 {
131 1 unsigned char i,*p,tmp;
132 1 /*for(i=0;i<7;i++){
133 1 tmp=l_tmpdate[i]/10;
134 1 l_tmpdate[i]=l_tmpdate[i]%10;
135 1 l_tmpdate[i]=l_tmpdate[i]+tmp*16;
136 1 }*/
137 1 write_1302(0x8E,0X00);
138 1
139 1 p=write_address; //传地址
140 1 for(i=0;i<7;i++) //7次写入 年月日时分秒星期
141 1 {
142 2 write_1302(*p,read_date[i]);
143 2 p++;
144 2 }
145 1 write_1302(0x8E,0x80);
146 1 }
*** WARNING C280 IN LINE 131 OF 1302.C: 'tmp': unreferenced local variable
147 void display(uchar num)
148 {
149 1 write1602_data(num/16+0x30);
150 1 write1602_data(num%16+0x30);
151 1 }
152 void main()
153 { uchar i;
154 1 init();
155 1 write1602_command(1,0x80);
156 1 for(i=0;i<16;i++)
157 1 {
158 2 write1602_data(a[i]);
159 2 delay(1);
160 2 }
161 1 write1602_command(1,0x80+0x40);
162 1 for(i=0;i<16;i++)
163 1 {
164 2 write1602_data(b[i]);
165 2 delay(1);
166 2 }
167 1 //cs=0;
168 1 //Set_RTC();
169 1 while(1)
170 1 {
171 2 Read_RTC();
172 2 write1602_command(1,0x80+0x40+9);
173 2 display(read_date[0]);
174 2 write1602_command(1,0x80+0x40+6);
175 2 display(read_date[1]);
176 2 write1602_command(1,0x80+0x40+3);
177 2 display(read_date[2]);
178 2 write1602_command(1,0x80+10);
C51 COMPILER V7.20 1302 09/20/2011 08:31:26 PAGE 4
179 2 display(read_date[3]);
180 2 write1602_command(1,0x80+7);
181 2 display(read_date[4]);
182 2 write1602_command(1,0x80+15);
183 2 write1602_data(0x30+read_date[5]);
184 2 write1602_command(1,0x80+4);
185 2 display(read_date[6]);
186 2 }
187 1
188 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 490 ----
CONSTANT SIZE = 48 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 1
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -