?? 51.lst
字號:
C51 COMPILER V7.04 51 10/09/2008 16:47:44 PAGE 1
C51 COMPILER V7.04, COMPILATION OF MODULE 51
OBJECT MODULE PLACED IN 51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 51.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h> /*頭文件的包含*/
2 #include "IIC.h"
3 #include "display.h"
4 #include "define.h"
5
6
7 #define PCF8583 0xa0 /*10100000--A0 write*/
8 #define PCF8583_Ctr 0x00/*control register*/
9
10
11 #define Sen 0x02
12 #define Min 0x03
13 #define Hour 0x04
14
15 char sen,min,hour; /*需要用到-1,不用uchar*/
16 uchar flag; /*進入設置時鐘標志*/
17 uchar wflag; /*故障標志 0-正常*/
18 uchar id; /*故障發生點 1-8*/
19 uchar point; /*記錄EEPROM的當前頁的目前的地址*/
20 uchar recvflag; /*接收到串口信息標志*/
21 uchar EEP;
22
23
24 /*s1為進入和退出設置鍵,s2為+鍵,s3為-鍵,s4為循環鍵*/
25 sbit s1=P3^2;
26 sbit s2=P3^3;
27 sbit s3=P3^4;
28 sbit s4=P3^5;
29
30 sbit s5=P1^0;
31 sbit s6=P1^1;
32 sbit s7=P1^2;
33 sbit s8=P1^3;
34 sbit s9=P1^4;
35 sbit s10=P1^5;
36 sbit s11=P1^5;
37 sbit s12=P1^6;
38 /*
39 對時間進行設置
40 */
41
42 void keyscan()
43 {
44 1
45 1 uchar roll=0; /*roll=0表示設置秒;roll=1表示設置分;roll=2表示設置時*/
46 1 //rd=0;
47 1
48 1 if(s1==0)
49 1 {
50 2 delay_ms(5); /*消抖*/
51 2 if(s1==0) /*確定鍵已經按下*/
52 2 {
53 3 flag=!flag; /* 1 標志進入時間設置狀態*/
54 3 while(!s1); /*等待按鍵松開*/
55 3 if(1==flag)
C51 COMPILER V7.04 51 10/09/2008 16:47:44 PAGE 2
56 3 {
57 4 roll=0;
58 4 light(roll); /*顯示在秒設置處*/
59 4 }
60 3 else if(0==flag) /*退出時間設置狀態*/
61 3 {
62 4 ISendByte(PCF8583,Sen,sen);
63 4 ISendByte(PCF8583,Min,min);
64 4 ISendByte(PCF8583,Hour,hour); /*寫入新的時間到8583*/
65 4 light(4); /*全熄滅*/
66 4 }
67 3 }
68 2 }
69 1
70 1 if(flag==1) /*在設置狀態下*/
71 1 {
72 2 if(s4==0) /*進入選擇設置位,選擇要設置的單位*/
73 2 {
74 3 delay_ms(5); /*消抖*/
75 3 if(s4==0) /*確定鍵已經按下*/
76 3 {
77 4 while(!s4); /*等待按鍵松開*/
78 4 roll++;
79 4 if(roll==3) roll=0; /*循環*/
80 4 light(roll);
81 4
82 4 }
83 3 }
84 2 if(s2==0) /*進入+狀態*/
85 2 {
86 3 delay_ms(5); /*消抖*/
87 3 if(s2==0) /*確定鍵已經按下*/
88 3 {
89 4 while(!s2); /*等待按鍵松開*/
90 4 if(roll==0) /*設置秒*/
91 4 {
92 5 sen++;
93 5 if(sen==60) sen=0;
94 5 }
95 4 if(roll==1) /*設置分*/
96 4 {
97 5 min++;
98 5 if(min==60) min=0;
99 5 }
100 4 if(roll==2) /*設置時*/
101 4 {
102 5 hour++;
103 5 if(hour==24) hour=0;
104 5 }
105 4
106 4 }
107 3 }
108 2 if(s3==0) /*進入-狀態*/
109 2 {
110 3 delay_ms(5); /*消抖*/
111 3 if(s3==0) /*確定鍵已經按下*/
112 3 {
113 4 while(!s3); /*等待按鍵松開*/
114 4 if(roll==0) /*設置秒*/
115 4 {
116 5 sen--;
117 5 if(sen==-1) sen=59;
C51 COMPILER V7.04 51 10/09/2008 16:47:44 PAGE 3
118 5 }
119 4 if(roll==1) /*設置分*/
120 4 {
121 5 min--;
122 5 if(min==-1) min=59;
123 5 }
124 4 if(roll==2) /*設置時*/
125 4 {
126 5 hour--;
127 5 if(hour==-1) hour=23;
128 5 }
129 4
130 4 }
131 3 }
132 2 }
133 1
134 1
135 1
136 1
137 1 }
138
139 /*
140 將發生故障的時間、故障點、修復的時間寫入EEPROM,記錄100個故障
141 鍵按下代表發生故障,記錄發生故障的時間; 寫入順序 id->sen->min->hour
142 鍵松開代表修復故障,記錄修復故障的時間。
143 */
144 void save()
145 {
146 1 /*為了避免代碼重復,這里只給了S5發生故障的代碼,s6,s7,s8,s9,s10,s11,s12類似*/
147 1 /*10101 A1 A0 0 確定頁地址
148 1 00000 0 0 0 - 0頁 0
149 1 00000 0 1 0 - 1頁 2
150 1 00000 1 0 0 - 2頁 4
151 1 00000 1 1 0 - 3頁 6
152 1 */
153 1 EEP=0xa8; /*10101000--A8 write A2,A1是頁*/
154 1
155 1 if(s5==0) /*故障*/
156 1 {
157 2 delay_ms(5); /*消抖*/
158 2 if(s5==0) /*確定鍵已經按下 開始寫入故障的時間*/
159 2 {
160 3 wflag=1; //故障標志置位
161 3 id=1;
162 3 ISendByte(EEP,point,id);
163 3 point++;
164 3 if(0xFF==point-1)
165 3 {
166 4 point=0x00; /*頁內指針復位*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -