test1.lst
来自「校园打铃系统」· LST 代码 · 共 538 行 · 第 1/2 页
LST
538 行
C51 COMPILER V7.06 TEST1 06/01/2007 16:49:13 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TEST1
OBJECT MODULE PLACED IN .\test1.obj
COMPILER INVOKED BY: D:\常用软件\keil\C51\BIN\C51.EXE ..\test\test1.c BROWSE DEBUG OBJECTEXTEND PRINT(.\test1.lst) OBJEC
-T(.\test1.obj)
stmt level source
1 #include<reg52.h>
2 #include<intrins.h>
3 #define uchar unsigned char
4
5
6 /**************************************************************/
7 /*MAX7219*********************************************************/
8 /******************************************************************/
9 sbit CLK=P1^0;
10 sbit DIN=P1^1;
11 sbit LOAD=P1^2;
12 /**************************************************************/
13 void send(unsigned char add,unsigned char dat);
14 void Initial_7219(void);
15 /**************************************************************/
16 /***********************************************************/
17 void set_minite();
18 void set_hour();
19 uchar add_hour(uchar hour);
20 uchar add_minite(uchar minite);
21 uchar minus_hour(uchar hour);
22 uchar minus_minite(uchar minite);
23 void delay1(uchar time);
24 void set_time();
25 sbit s1=P3^4;
26 sbit s2=P3^5;
27 sbit s3=P3^6;
28 sbit s4=P3^7;
29 #define keycode P3 & 0x0f0
30 /************************************************************/
31 /*****************************************************************/
32 void Initial_7219(void)
33 {
34 1 send(0x0c,0x01);//Shut down
35 1 send(0x0b,0x07);//Scan Limit
36 1 send(0x0a,0x0fa);//Intensity
37 1 send(0x09,0x0ff);//Decode Mode
38 1 }
39 /**************************************************************/
40 void send(unsigned char add,unsigned char dat)//Send 16Bytes
41 {
42 1 unsigned char Databuf,i,j;
43 1 LOAD=0;
44 1 i=0;
45 1 while(i<16)
46 1 {
47 2 if(i<8)
48 2 {
49 3 Databuf=add;
50 3 }
51 2 else
52 2 {
53 3 Databuf=dat;
54 3 }
C51 COMPILER V7.06 TEST1 06/01/2007 16:49:13 PAGE 2
55 2 for(j=8;j>=1;j--)
56 2 {
57 3 DIN=Databuf&0x80;
58 3 Databuf=Databuf<<1;
59 3 CLK=1;
60 3 CLK=0;
61 3 }
62 2 i=i+8;
63 2 }
64 1 LOAD=1;
65 1 }
66 /*************************************************************/
67 /***********************MAX7219*********************************/
68 /***************************************************************/
69 /***************************************************************/
70
71 //实时时钟芯片DS1302 C51源程序
72 /****************************************************************
73
74 公司名称:
75 模块名称:DS1302.c
76 功 能:实时时钟模块 时钟芯片型号:DS1302
77 说 明:
78 程序设计:zhaojunjie
79 设计时间:2002.03.02
80 版 本 号: 20020302
81 *********************************************************************/
82 sbit SCL = P3^0;// DS1302 Serial-Clock Input pin 7
83 sbit SDA = P3^1;// DS1302 Serial-Data Input pin 6
84 sbit RST = P3^2;// DS1302 Chip-Seclet Input pin 5
85 code uchar time_data[60]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,
86 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,
87 0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x30,
88 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,
89 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x50,
90 0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59};
91
92 #define DS1302_WP 0x8E
93 #define DS1302_RESET RST=0;SCL=0;RST=1
94 #define DS1302_WP_ENABLE Write_Ds1302(DS1302_WP,0X00)
95 #define DS1302_WP_DISENABLE Write_Ds1302(DS1302_WP,0x80)
96 unsigned char set_rtc_code[3]={0x50,0x00,0x00};
97 code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
98 code unsigned char read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
99 unsigned char read_rtc_code[3];
100
101
102 void Write_Ds1302_byte(unsigned char temp);
103 void Write_Ds1302( unsigned char address,unsigned char dat );
104 unsigned char Read_Ds1302 ( unsigned char address );
105 void Read_RTC(void);
106 void Set_RTC(void);
107
108 /****************************************************************************/
109 /****************************************************************************/
110 void Write_Ds1302_Byte(unsigned char temp)
111 {
112 1 unsigned char i;
113 1 for (i=0;i<8;i++)
114 1 {
115 2 SCL=0;
116 2 SDA=temp&0x01;
C51 COMPILER V7.06 TEST1 06/01/2007 16:49:13 PAGE 3
117 2 temp>>=1;
118 2 SCL=1;
119 2 }
120 1 }
121 /****************************************************************************/
122 void Write_Ds1302( unsigned char address,unsigned char dat )
123 {
124 1 DS1302_RESET;
125 1 Write_Ds1302_Byte(address);
126 1 Write_Ds1302_Byte(dat);
127 1 RST=0;
128 1 }
129 /****************************************************************************/
130 unsigned char Read_Ds1302 ( unsigned char address )
131 {
132 1 unsigned char i,temp=0x00,temp_temp;
133 1 DS1302_RESET;
134 1 Write_Ds1302_Byte(address);
135 1 for (i=0;i<8;i++)
136 1 {
137 2 if(SDA)
138 2 temp|=0x80;
139 2 SCL=0;
140 2 temp>>=1;
141 2 SCL=1;
142 2 }
143 1 RST=0;
144 1 temp_temp=temp/16;
145 1 temp=temp%16;
146 1 temp=temp+temp_temp*10;
147 1 return (temp);
148 1 }
149 /****************************************************************************/
150 /****************************************************************************/
151 void Read_RTC(void)
152 {
153 1 unsigned char i,*p;
154 1 p=read_rtc_address;
155 1 for(i=0;i<3;i++)
156 1 {
157 2 read_rtc_code[i]=Read_Ds1302(*p);
158 2 p++;
159 2 }
160 1 }
161 /***********************************************************************/
162 /***********************************************************************/
163 void Set_RTC(void)
164 {
165 1 unsigned char i,*p;
166 1 p=write_rtc_address;
167 1 for(i=0;i<3;i++)
168 1 {
169 2 Write_Ds1302(*p,set_rtc_code[i]);
170 2 p++;
171 2 }
172 1 }
173 /****************************************************************************/
174 /****************************************************************************/
175 /****************************************************************************/
176 /****************************************************************************/
177
178
C51 COMPILER V7.06 TEST1 06/01/2007 16:49:13 PAGE 4
179
180 /*****************************************************************/
181 /* 时间设置set_time******************************************************/
182 void set_minite()
183 {uchar hour,minite;
184 1 uchar hour_h,hour_l,minite_h,minite_l;
185 1
186 1 while(s4==1)
187 1 {send(0x08,0x0f);//5---8灭
188 2 send(0x07,0x0f);
189 2 send(0x06,0x0f);
190 2 send(0x05,0x0f);
191 2 Read_RTC();
192 2 hour=read_rtc_code[2];//读DS1302
193 2 minite=read_rtc_code[1];
194 2 hour_h=hour/10;
195 2 hour_l=hour%10;
196 2 send(0x01,hour_h);//显示小时
197 2 send(0x02,hour_l);
198 2 minite_h=minite/10;
199 2 minite_l=minite%10;
200 2 send(0x03,minite_h);//显示分钟
201 2 send(0x04,minite_l);
202 2
203 2 delay1(450);
204 2 send(0x03,0x0f);//显示分钟灭
205 2 send(0x04,0x0f);
206 2 delay1(450);
207 2
208 2 if(s3==0)//3键
209 2 {
210 3 set_hour();
211 3 break;
212 3 }
213 2 else
214 2 if(s1==0)
215 2 {
216 3 minite=add_minite(minite);//时间加一
217 3 set_rtc_code[1]=minite; //
218 3 Set_RTC();
219 3
220 3 }
221 2 else
222 2 if(s2==0)
223 2 {
224 3 minite=minus_minite(minite);//时间减一
225 3 set_rtc_code[1]=minite; //
226 3 Set_RTC();
227 3
228 3 }
229 2
230 2
231 2 }
232 1 }
233
234
235 void set_hour()
236 {uchar hour,minite;
237 1 uchar hour_h,hour_l,minite_h,minite_l;
238 1
239 1 while(s4==1)
240 1 {send(0x08,0x0f);//5---8灭
C51 COMPILER V7.06 TEST1 06/01/2007 16:49:13 PAGE 5
241 2 send(0x07,0x0f);
242 2 send(0x06,0x0f);
243 2 send(0x05,0x0f);
244 2 Read_RTC();
245 2 hour=read_rtc_code[2];//读DS1302
246 2 minite=read_rtc_code[1];
247 2 hour_h=hour/10;
248 2 hour_l=hour%10;
249 2 send(0x01,hour_h);//显示小时
250 2 send(0x02,hour_l);
251 2 minite_h=minite/10;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?