📄 shizhong.lst
字号:
C51 COMPILER V7.06 SHIZHONG 08/07/2007 19:54:58 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SHIZHONG
OBJECT MODULE PLACED IN shizhong.OBJ
COMPILER INVOKED BY: E:\单片机\kcai\安装后\C51\BIN\C51.EXE shizhong.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg52.h> //1脚电源,4脚地,8脚备用电源,2 3脚晶震,5脚复位,6脚i/0口,7脚时钟//
2 #define uchar unsigned char
3 #define uint unsigned int
4 void wrbyte(uchar byte);//写入1字节//
5 uchar readbyte(void);//读1字节//
6 void w1302(uchar addr,uchar da);//写1字节地址和写1字节数据//
7 uchar r1302(uchar addr);//读去1302某地址的数据//
8 void get1302(uchar curtime[]);//读取1302当前的时间//
9 void set1302(uchar *p);//写入1302设置时间//
10 void dis_scan(uchar buff[]);//数码管的扫描//
11 void ini_ds1302(void);//初始化1302//
12 void delay(uint k);//延时//
13 void scan_key(void);//键盘扫描//
14 void shanshuo(uchar mov_temp);//数码管闪烁//
15 uchar code seg7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
16 uchar timebuf[7]={0x03,0x38,0x10,0x03,0x04,0x02,0x07};//默认时间//
17 uchar led[16];//led 要显示的数字缓冲器//
18 sbit T_IO=P3^7;
19 sbit T_CLK=P3^6;
20 sbit T_RST=P3^5;
21 sbit ACC0=ACC^0;
22 sbit ACC7=ACC^7;
23 sbit P30=P3^0;//调时和调整//
24 sbit P31=P3^1;//led移动的闪烁//
25 sbit P32=P3^2;//加//
26 sbit P33=P3^3;//减//
27 uchar mov,cout;//移动的位置//led闪烁的计数//
28 bit K1,K2,K3,K4;//按键的标志位//
29
30 void main()
31 {
32 1 P3=0xff;
33 1 ini_ds1302();//初始化1302//
34 1 get1302(timebuf);//读取现在的时间//
35 1 while(1)
36 1 {
37 2 scan_key();//键盘扫描//
38 2 if(K1==0){dis_scan(timebuf);mov=6;get1302(timebuf);}
39 2 else shanshuo(mov);
40 2 }
41 1 }
42
43
44 void scan_key(void)//键盘扫描//
45 {
46 1 if(P30==0){delay(5);
47 2 if(P30==0){K1=!K1;//k1=0时正常//k1=1调时//
48 3 if(K1==0){w1302(0x8e,0x00);//wp=0允许写操作//
49 4 set1302(timebuf);//写入1302设置的时间//
50 4 w1302(0x8e,0x80);//WP=1,写保护//禁止写操作//
51 4 }
52 3 }
53 2 while(P30==0);//等待暗键K1的释放//
54 2 }
55 1 if(K1==1)
C51 COMPILER V7.06 SHIZHONG 08/07/2007 19:54:58 PAGE 2
56 1 {if(P31==0&&K2==0){delay(5);if(P31==0)K2=1;}
57 2 if(P32==0&&K3==0){delay(5);if(P32==0)K3=1;}
58 2 if(P33==0&&K4==0){delay(5);if(P33==0)K4=1;}
59 2 }
60 1
61 1 if(K2==1&&P31==1){K2=0;if(mov==0)mov=7;mov--;}//led闪烁的移动//
62 1 if(K3==1&&P32==1){K3=0;//调时加//
63 2 if((timebuf[mov]&0x0f)==9)timebuf[mov]+=6;
64 2 timebuf[mov]++;
65 2 if(timebuf[5]>0x07)timebuf[5]=0;//星期//
66 2 if(timebuf[4]>0x12)timebuf[4]=0;//月//
67 2 if(timebuf[3]>0x31)timebuf[3]=0;//日//
68 2 if(timebuf[2]>0x23)timebuf[2]=0;//时//
69 2 if(timebuf[1]>0x59)timebuf[1]=0;//分//
70 2 if(timebuf[0]>0x59)timebuf[0]=0;//秒//
71 2 }
72 1
73 1 if(K4==1&P33==1){K4=0;//调时减//
74 2 if((timebuf[mov]&0x0f==0))timebuf[mov]-=6;
75 2 timebuf[mov]--;
76 2 if(timebuf[5]==0)timebuf[5]=0x7+1;//星期//
77 2 if(timebuf[4]==0)timebuf[4]=0x12+1;//月//
78 2 if(timebuf[3]==0)timebuf[3]=0x31+1;//日//
79 2 if(timebuf[2]==0)timebuf[2]=0x12+1;//时//
80 2 if(timebuf[1]==0)timebuf[1]=0x59+1;//分//
81 2 if(timebuf[0]==0)timebuf[0]=0x59+1;//秒//
82 2 }
83 1 }
84
85
86 void shanshuo(uchar mov_temp)//数码管闪烁//
87 {
88 1 uchar i;
89 1 for(i=0;i<7;i++)
90 1 {
91 2 led[i*2]=timebuf[i]&0x0f;//取低四位/
92 2 led[i*2+1]=(timebuf[i]&0xf0)>>4;//高四位//
93 2 }
94 1 P2=0xff;
95 1 cout++;
96 1 if(cout<10){led[2*mov_temp]=10;led[2*mov_temp+1]=10;}//闪烁
97 1 if(cout>20)cout=0;//闪烁频率
98 1 for(i=0;i<14;i++)//14位扫描//
99 1 {
100 2 P1=seg7[led[i]];
101 2 P2++;
102 2 delay(1);
103 2 P1=0xff;
104 2 }
105 1 }
106
107 void dis_scan(uchar buff[])//数码管扫描//
108 {
109 1 uchar i;
110 1 for(i=0;i<7;i++)
111 1 {
112 2 led[i*2]=buff[i]&0x0f;
113 2 led[i*2+1]=(buff[i]&0xf0)>>4;
114 2 }
115 1 P2=0xff;
116 1 for(i=0;i<14;i++)
117 1 {
C51 COMPILER V7.06 SHIZHONG 08/07/2007 19:54:58 PAGE 3
118 2 P1=seg7[led[i]];
119 2 P2++;
120 2 delay(1);
121 2 P1=0xff;
122 2 }
123 1 }
124
125 void delay(uint k)
126 {
127 1 uint i,j;
128 1 for(i=0;i<k;i++)
129 1 {
130 2 for(j=0;j<121;j++);
131 2 }
132 1 }
133
134
135 void wrbyte(uchar byte)//写入1字节//
136 {
137 1 uchar i;
138 1 ACC=byte;
139 1 for(i=8;i>0;i--)
140 1 {
141 2 T_IO=ACC0;
142 2 T_CLK=1;
143 2 T_CLK=0;
144 2 ACC=ACC>>1;
145 2 }
146 1 }
147
148
149 uchar readbyte(void)//读1字节//
150 {
151 1 uchar i;
152 1 for(i=8;i>0;i--) {
153 2 ACC=ACC>>1;
154 2 ACC7=T_IO;
155 2 T_CLK=1;
156 2 T_CLK=0;
157 2 }
158 1 return(ACC);
159 1 }
160
161 void w1302(uchar addr,uchar da)//写1字节地址和写1字节数据//
162 {
163 1 T_RST=0;
164 1 T_CLK=0;
165 1 T_RST=1;
166 1 wrbyte(addr);
167 1 wrbyte(da);
168 1 T_CLK=1;
169 1 T_RST=0;
170 1 }
171
172
173 uchar r1302(uchar addr)//读取1302某地址的数据//
174 {
175 1 uchar da;
176 1 T_RST=0;
177 1 T_CLK=0;
178 1 T_RST=1;
179 1 wrbyte(addr);//地址//
C51 COMPILER V7.06 SHIZHONG 08/07/2007 19:54:58 PAGE 4
180 1 da=readbyte();//读1 BYTE 数据//
181 1 T_CLK=1;
182 1 T_RST=0;
183 1 return(da);
184 1 }
185
186
187 void set1302(uchar *p)//写入1302设置的时间
188 {
189 1 uchar i;
190 1 uchar addr=0x80;//设置时间的地址
191 1 w1302(0x8e,0x00);//WP=0,允许写操作
192 1 for(i=0;i<7;i++)
193 1 {
194 2 w1302(addr,*p);
195 2 P2++;
196 2 addr+=2;
197 2 }
198 1 w1302(0x8e,0x80);//WP=1,写保护//禁止写操作/
199 1 }
200
201
202 void get1302(uchar curtime[])//读取1302当前时间
203 {
204 1 uchar i;
205 1 uchar addr=0x81;
206 1 for(i=0;i<7;i++)
207 1 {
208 2 curtime[i]=r1302(addr);
209 2 addr+=2;
210 2 }
211 1 }
212
213 void ini_ds1302(void)
214 {
215 1 w1302(0x8e,0x00);
216 1 w1302(0x90,0x00);
217 1 T_CLK=0;
218 1 T_RST=0;
219 1 }
220
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 722 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 25 9
IDATA SIZE = ---- ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -