📄 112211.lst
字号:
C51 COMPILER V7.07 112211 01/31/2009 01:08:39 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE 112211
OBJECT MODULE PLACED IN .\112211.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D:\My Documents\My QQ Files\112211.c BROWSE DEBUG OBJECTEXTEND PRINT(.\1122
-11.lst) OBJECT(.\112211.obj)
stmt level source
1 #include <reg51.h>//加载头文件
2 #include <intrins.H>//装载
3 #define uchar unsigned char//变量类型的宏定义
4 #define uint unsigned int//变量类型的宏定义
5 #define SET 5
6 #define MON 4
7 #define DAY 3
8 #define HOU 2
9 #define MIN 1
10 #define PCF8583 0XA0
11 //#define _Nop() _nop_() /*定义空指令*/
12 #define TRUE 1
13 #define FALSE 0
14 sbit SDA=P1^7; /*模拟I2C数据传送位*/
15 sbit SCL=P1^6; /*模拟I2C时钟控制位*/
16
17 /*状态标志*/
18 bit ack; /*应答标志位*/
19
20 uchar SEG7[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};/*0~9的数码管段码*/
21
22 uchar act[12]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x04,0x08,0x10,0x20};//12位数码管位码;
23
24 uchar MS,mon,day,hou,min,sec;
25 uchar key;
26 uchar discnt;
27 uint cnt,time_cnt;
28 sbit MSKEY=P0^5; /*功能键标志*/
29 sbit MONKEY=P0^4;//月按键
30 sbit DAYKEY=P0^3;//天按键
31 sbit HOUKEY=P0^2;//时按键
32 sbit MINKEY=P0^1;//分按键
33 //sbit CHECKKEY=P3^0;//查询按键
34 sbit CLK=P1^0;
35 sbit DATA=P1^1;
36
37 void TIMERIni(void);
38 void menu(void);
39 void delay(uint k);
40 void keyboard(void);
41 void send164(uchar m);
42 void dis_time(uchar m);
43 void dis_adjtime(uchar m);
44 void PCF8583_ReadDat(uchar addrInter,uchar num,uchar *buff);
45 void IIC_Stop(void);
46
47
48
49 uchar convert_BCD(uchar i)
50 {
51 1 uchar i1,i2;
52 1 i1=i%10;
53 1 i2=i/10;
54 1 i2=i2<<4;
C51 COMPILER V7.07 112211 01/31/2009 01:08:39 PAGE 2
55 1 i=i2+i1;
56 1 return i;
57 1 }
58
59 void menu(void)//扫描按键子函数
60 {
61 1 uchar i;
62 1 if(key==SET)
63 1 {MS++;
64 2 if(MS==2)
65 2 {MS=0;
66 3 /*i=convert_BCD(min);
67 3 ISendByte(PCF8583, 0X03,i);
68 3 i=convert_BCD(hou);
69 3 ISendByte(PCF8583, 0X04, i);
70 3 i=convert_BCD(day);
71 3 ISendByte(PCF8583, 0x05, i);
72 3 i=convert_BCD(mon);
73 3 ISendByte(PCF8583, 0x06, i);*/
74 3 }
75 2 }// 调整模式
76 1 if(MS==1)
77 1 {
78 2 switch(key)
79 2 {
80 3 case (MIN):{min++;if(min>=60)min=0;;}break;
81 3 case (HOU):{hou++;if(hou>23)hou=0;;} break;
82 3 case(DAY):{day++;if(day>31)day=1;;}break;
83 3 case(MON):{mon++;if(mon>12)mon=1;;}break;
84 3 default:break;
85 3 }
86 2 }
87 1 key=0;
88 1
89 1 }
*** WARNING C280 IN LINE 61 OF D:\MY DOCUMENTS\MY QQ FILES\112211.C: 'i': unreferenced local variable
90
91 void delay(uint k)
92 {
93 1 uint i,j;
94 1 for(i=0;i<k;i++)
95 1 {
96 2 for(j=0;j<1000;j++) ;
97 2 }
98 1 }
99
100 void keyboard(void)
101 {
102 1 P0=0X3F;
103 1 if((P0&0x02)==0)
104 1 { delay(5);
105 2 while((P0&0x02)==0);
106 2 key=MIN;
107 2 }
108 1 else
109 1 if((P0&0x04)==0)
110 1 {
111 2 delay(5);
112 2 while((P0&0x04)==0);
113 2 key=HOU;
114 2 }
115 1 else
C51 COMPILER V7.07 112211 01/31/2009 01:08:39 PAGE 3
116 1 if((P0&0x08)==0)
117 1 {
118 2 delay(5);
119 2 while((P0&0x08)==0);
120 2 key=DAY;
121 2 }
122 1 else
123 1 if((P0&0x10)==0)
124 1 {
125 2 delay(5);
126 2 while((P0&0x10)==0);
127 2 key=MON;
128 2 }
129 1 else
130 1 if((P0&0x20)==0)
131 1 {
132 2 delay(5);
133 2 while((P0&0x20)==0);
134 2 key=SET;
135 2 }
136 1 }
137
138
139
140
141 void time0(void) interrupt 1
142 {
143 1 TH0=0xF4;TL0=0x48;
144 1 if(discnt>11)discnt=0;// 显示为12位数码管
145 1 if(cnt>200)cnt=0;// 调整时的闪烁周期
146 1 switch(MS)
147 1 {
148 2 case 0:{dis_time(discnt);}break;// 显示走时
149 2 case 1:{dis_adjtime(discnt);}break;// 显示调时
150 2 default: break;
151 2 }
152 1 discnt++;cnt++;
153 1
154 1 }
155
156 void time1(void) interrupt 3 //50ms
157 {uchar temp1,temp2,temp,temp3[5];
158 1 TH1=0X3C;TL1=0XAF;
159 1 time_cnt++;
160 1 if(time_cnt>=20) // 1秒钟计时时间到,读PCF8583的各寄存器的值
161 1 {
162 2 time_cnt=0;
163 2 PCF8583_ReadDat(0x02, 5, temp3);
164 2 temp=temp3[0];
165 2 temp1=(temp/16)&0x0f;temp2=temp&0x0f;
166 2 sec=temp1*10+temp2;
167 2 temp=temp3[1];
168 2 temp1=temp>>4;temp2=temp&0x0f;
169 2 min=temp1*10+temp2;
170 2 temp=temp3[2];
171 2 temp1=(temp>>4)&0x03;temp2=temp&0x0f;
172 2 hou=temp1*10+temp2;
173 2 temp=temp3[3];
174 2 temp1=(temp>>4)&0x03;temp2=temp&0x0f;
175 2 day=temp1*10+temp2;
176 2 temp=temp3[4];
177 2 temp1=(temp>>4)&0x01;temp2=temp&0x0f;
C51 COMPILER V7.07 112211 01/31/2009 01:08:39 PAGE 4
178 2 mon=temp1*10+temp2;
179 2 }
180 1 }
181
182
183
184 void send164(uchar m)
185 {uchar k,i,b;
186 1 k=SEG7[m];
187 1 i=8;
188 1 CLK=0;
189 1 while (i--)
190 1 {b=k>>i;
191 2 if((b&0x01)==0x01)DATA=1;//判断b的最低位的值是多少
192 2 else DATA=0;
193 2 CLK=1; _nop_();
194 2 CLK=0;
195 2 }
196 1
197 1 }
198 //P2 KOU //P1kou
199 void dis_time(uchar m)
200 {
201 1 P1&=0XC3;/// 等价于 P1=P1&0xc3;;准备送段码 ,位码口全部清零
202 1 P2=0X00;////准备送段码,位码口全部清零
203 1 {switch(m)
204 2 {case 0:{send164(mon/10);P2|=act[m];P1&=0XC3;}break;
205 3 case 1:{send164(mon%10);P2|=act[m];P1&=0XC3;}break;
206 3 case 2:{send164(day/10);P2|=act[m];P1&=0XC3;}break;
207 3 case 3:{send164(day%10);P2|=act[m];P1&=0XC3;}break;
208 3 case 4:{send164(hou/10);P2|=act[m];P1&=0XC3;}break;
209 3 case 5:{send164(hou%10);P2|=act[m];P1&=0XC3;}break;
210 3 case 6:{send164(min/10);P2|=act[m];P1&=0XC3;}break;
211 3 case 7:{send164(min%10);P2|=act[m];P1&=0XC3;}break;
212 3 case 8:{send164(sec/10);P1|=act[m];P2=0X00;}break;
213 3 case 9:{send164(sec%10);P1|=act[m];P2=0X00;}break;
214 3 case 10:{send164(0);P1|=act[m];P2=0X00;}break;
215 3 case 11:{send164(0);P1|=act[m];P2=0X00;}break;
216 3 default:break;}
217 2 }
218 1
219 1 }
220
221
222 void dis_adjtime(uchar m)
223 {
224 1 if(cnt>100)
225 1 {
226 2 P1&=0XC3;
227 2 P2=0X00;
228 2 switch(m)
229 2 {case 0:{send164(mon/10);P2|=act[m];P1&=0XC3;}break;
230 3 case 1:{send164(mon%10);P2|=act[m];P1&=0XC3;}break;
231 3 case 2:{send164(day/10);P2|=act[m];P1&=0XC3;}break;
232 3 case 3:{send164(day%10);P2|=act[m];P1&=0XC3;}break;
233 3 case 4:{send164(hou/10);P2|=act[m];P1&=0XC3;}break;
234 3 case 5:{send164(hou%10);P2|=act[m];P1&=0XC3;}break;
235 3 case 6:{send164(min/10);P2|=act[m];P1&=0XC3;}break;
236 3 case 7:{send164(min%10);P2|=act[m];P1&=0XC3;}break;
237 3 case 8:{send164(0);P1&=act[m];P2=0X00;}break;
238 3 case 9:{send164(0);P1&=act[m];P2=0X00;}break;
239 3 case 10:{send164(0);P1&=act[m];P2=0X00;}break;
C51 COMPILER V7.07 112211 01/31/2009 01:08:39 PAGE 5
240 3 case 11:{send164(0);P1&=act[m];P2=0X00;}break;
241 3 default:break;
242 3 }
243 2 }
244 1 else
245 1 {
246 2 P1&=0XC3;
247 2 P2=0X00;
248 2 }
249 1 }
250
251
252 void TIMERIni(void)
253 {
254 1 TMOD=0X11;
255 1 TH0=0xF4;TL0=0x48;TH1=0X3C;TL1=0XAF;
256 1 EA=1;
257 1 ET0=1;
258 1 ET1=1;
259 1 TR1=1;TR0=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -