?? main.lst
字號:
C51 COMPILER V6.12 MAIN 11/22/2005 20:50:10 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\main.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE .\main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg51.h>
2 #include<intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 sbit rs=P3^3;
6 sbit rw=P3^4;
7 sbit en=P3^5;
8 sbit bflag=P2^7;
9 sbit reset=P3^0;
10 sbit sclk=P3^1;
11 sbit io=P3^2;
12 uchar str1[]="date of today is:";
13 //uchar str2[]="i will kill you lj";
14 uchar init[]={0x00,0x00,0x21,0x21,0x10,0x01,0x04};//秒,分,時,日,月,星期,年
15 //
16 void delay()
17 {
18 1 uchar j;
19 1 for(j=250;j>0;j--);
20 1 }
21 //-------------------液晶模塊-----------------//
22 void en_toggle()
23 {
24 1 en=0;
25 1 //_nop_();
26 1 delay();
27 1 en=1;
28 1 delay();
29 1 // _nop_();
30 1 en=0;
31 1 } //注意必須加延時,否則會出問題的
32 void is_ready()
33 {
34 1 P2=0x00;//設置為輸入口
35 1 rs=0;
36 1 rw=1;
37 1 en=1;
38 1 while(bflag);
39 1 en=0;
40 1 }
41
42 void write_cmd(uchar cmd)
43 {
44 1 is_ready();
45 1 rs=0;
46 1 rw=0;
47 1 P2=cmd;
48 1 en_toggle();
49 1 }
50 void write_data(uchar indata)
51 {
52 1 is_ready();
53 1 rs=1;
54 1 rw=0;
55 1 P2=indata;
C51 COMPILER V6.12 MAIN 11/22/2005 20:50:10 PAGE 2
56 1 en_toggle();
57 1 _nop_();
58 1 }
59 void write_str(uchar addr,uchar *p)
60 {
61 1 uchar i;
62 1 write_cmd(addr);
63 1 while(p[i]!='\0')
64 1 {write_data(p[i]);
65 2 i++;
66 2 }
67 1 }
68 void write_position(uchar row,uchar col)
69 {uchar p;
70 1 if(row==1)
71 1 {p=0x80+col-1;
72 2 write_cmd(p);}
73 1 else
74 1 {p=0xc0+col-1;
75 2 write_cmd(p);
76 2 }
77 1 }
78 void init_lcd()
79 {
80 1 write_cmd(0x38);
81 1 write_cmd(0x0c);
82 1 write_cmd(0x06);
83 1 write_cmd(0x01);//清屏幕
84 1 delay();
85 1 }
86 //------------液晶模塊結束---------------------
87
88 //-----------ds1302模塊開始-------------------
89 //注意點:sclk的上升沿輸入數據,sclk的下跳沿輸出數據
90 //讀寫時都是從第0位開始
91 void write_byte(uchar inbyte)
92 {
93 1 uchar i;
94 1 for(i=8;i>0;i--)
95 1 {
96 2 sclk=0;
97 2 if(inbyte&0x01)
98 2 io=1;
99 2 else
100 2 io=0;
101 2 sclk=1;
102 2 _nop_();
103 2 inbyte=inbyte>>1;
104 2 }
105 1 }
106
107 uchar read_byte() //sclk的下跳沿讀數據
108 {
109 1 uchar i,temp=0;
110 1 io=1; //設置為輸入口
111 1 for(i=7;i>0;i--)
112 1 {
113 2 sclk=0;
114 2 if(io==1)
115 2 temp=temp|0x80;
116 2 else
117 2 temp=temp&0x7f;
C51 COMPILER V6.12 MAIN 11/22/2005 20:50:10 PAGE 3
118 2 sclk=1;
119 2 temp=temp>>1;
120 2 }
121 1 //sclk=0;
122 1 return (temp);
123 1 }
124 //----------往ds1302的某個地址寫入數據-------------
125 void write_ds1302(uchar cmd,uchar indata)
126 {
127 1 reset=1;
128 1 write_byte(cmd);
129 1 write_byte(indata);
130 1 reset=0;
131 1 sclk=0;
132 1 }
133 //----------讀ds1302某地址的的數據-----------------
134 uchar read_ds1302(uchar addr)
135 {
136 1 uchar backdata;
137 1 reset=1;
138 1 write_byte(addr);
139 1 backdata=read_byte();//先寫地址,然后讀數據
140 1 reset=0;
141 1 //sclk=0;
142 1 return (backdata);
143 1 }
144 //------------設置初始時間-------------------
145 void set_ds1302(uchar addr,uchar *p,uchar n)//寫入n個數據
146 {
147 1 write_ds1302(0x8e,0x00);//寫控制字,允許寫操作
148 1 for(;n>0;n--)
149 1 {
150 2 write_ds1302(addr,*p);
151 2 p++;
152 2 addr=addr+2;
153 2 }
154 1 write_ds1302(0x8e,0x80);//寫保護,不允許寫
155 1 }
156 //----------- 讀取當前時間-------------------
157 void read_nowtime(uchar addr,uchar *p,uchar n)
158 {
159 1 for(;n>0;n--)
160 1 {
161 2 *p=read_ds1302(addr);
162 2 p++;
163 2 addr=addr+2;
164 2 }
165 1 }
166 void init_ds1302()
167 {
168 1 reset=0;
169 1 sclk=0;
170 1 write_ds1302(0x80,0x00);//寫控制字,允許寫
171 1 write_ds1302(0x90,0x00);//禁止渦流充電
172 1 }
173 //-----------ds1302模塊結束-------------------
174 void main()
175 {
176 1 init_lcd(); //初始化LCD
177 1 write_str(0x80,str1); //液晶顯示提示信息
178 1 init_ds1302(); //初始化ds1302
179 1 set_ds1302(0x80,init,7);//設置初始時間,日期,年月
C51 COMPILER V6.12 MAIN 11/22/2005 20:50:10 PAGE 4
180 1
181 1 while(1)
182 1 {
183 2 read_nowtime(0x81,init,7); //讀出當前時間
184 2
185 2 write_position(2,1);
186 2 write_data('0'+((init[2]&0xf0)>>4));
187 2
188 2 write_position(2,2);
189 2 write_data('0'+(init[2]&0x0f)); //讀小時
190 2 P1=init[2];//while(1);
191 2 write_position(2,3);
192 2 write_data(':');
193 2
194 2 write_position(2,4);
195 2 write_data('0'+((init[1]&0xf0)>>4));
196 2
197 2 write_position(2,5);
198 2 write_data('0'+(init[1]&0x0f)); //讀分鐘
199 2
200 2 write_position(2,6);
201 2 write_data(':');
202 2
203 2 write_position(2,7);
204 2 write_data('0'+((init[0]&0xf0)>>4));
205 2
206 2 write_position(2,8);
207 2 write_data('0'+(init[0]&0x0f)); //讀秒
208 2 }
209 1
210 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 470 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 25 14
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 + -