📄 alarm001.lst
字号:
C51 COMPILER V7.07 ALARM001 02/02/2009 01:27:16 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE ALARM001
OBJECT MODULE PLACED IN alarm001.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE alarm001.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 #define SET 5
6 #define MON 4
7 #define DAY 3
8 #define HOU 2
9 #define MIN 1
10 #define CHECK 6
11 #define PCF8583 0XA0
12 #define _Nop() _nop_() /*定义空指令*/
13 sbit SDA=P1^7; /*模拟I2C数据传送位*/
14 sbit SCL=P1^6; /*模拟I2C时钟控制位*/
15
16 /*状态标志*/
17 bit ack; /*应答标志位*/
18
19 uchar SEG7[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};/*0~9的数码管段码*/
20
21 uchar act[12]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x04,0x08,0x10,0x20};//12位数码管位码;
22
23 uchar MS,mon,day,hou,min,sec;
24 uchar ALM_mon,ALM_day,ALM_hou,ALM_min;
25 uchar key;
26 uchar discnt;
27 uint cnt,time_cnt;
28 uchar first;
29 sbit MSKEY=P0^5; /*功能键标志*/
30 sbit MONKEY=P0^4;//月按键
31 sbit DAYKEY=P0^3;//天按键
32 sbit HOUKEY=P0^2;//时按键
33 sbit MINKEY=P0^1;//分按键
34 sbit checkey=P0^0;
35 //sbit CHECKKEY=P3^0;//查询按键
36 sbit CLK=P1^0;
37 sbit DATA=P1^1;
38
39 void TIMERIni(void);
40 void menu(void);
41 void delay(uint k);
42 void keyboard(void);
43 void send164(uchar m);
44 void dis_time(uchar m);
45 void dis_adjtime(uchar m);
46 uchar IRcvByte(uchar sla,uchar suba);
47 bit ISendByte(uchar sla,uchar suba,uchar c);
48 void Ack_I2c(bit a);
49 uchar RcvByte(void);
50 void SendByte(uchar c);
51 void Stop_I2c(void);
52 void Start_I2c(void);
53 void dis_almtime(uchar m);
54
55
C51 COMPILER V7.07 ALARM001 02/02/2009 01:27:16 PAGE 2
56
57 uchar convert_BCD(uchar i)
58 {
59 1 uchar i1,i2;
60 1 i1=i%10;
61 1 i2=i/10;
62 1 i2=i2<<4;
63 1 i=i2+i1;
64 1 return i;
65 1 }
66
67 void menu(void)//扫描按键子函数
68 {
69 1 uchar i;
70 1 if(key==SET)
71 1 {MS++;
72 2 /*if(first==0)
73 2 {
74 2 ISendByte(PCF8583, 0X00,0x80);first=1;
75 2 }*/
76 2 if(MS==2)
77 2 {
78 3
79 3 MS=0;
80 3 /* i=convert_BCD(min);
81 3 ISendByte(PCF8583, 0X03,i);
82 3 i=convert_BCD(hou);
83 3 ISendByte(PCF8583, 0X04, i);
84 3 i=convert_BCD(day);
85 3 ISendByte(PCF8583, 0x05, i);
86 3 i=convert_BCD(mon);
87 3 ISendByte(PCF8583, 0x06, i);
88 3 ISendByte(PCF8583, 0X00,0x00);*/
89 3 }
90 2 }// 调整模式\
*** WARNING C329 IN LINE 90 OF alarm001.c: single-line comment contains line-continuation
91 1 if(key==CHECK)
92 1 {
93 2 if(MS!=2)
94 2 {MS=2;}
95 2 else
96 2 {MS=0;}
97 2 }
98 1 if(MS==1)
99 1 {
100 2 switch(key)
101 2 {
102 3 case (MIN):
103 3 { ISendByte(PCF8583, 0X00,0x00);
104 4 min++;if(min>=60) min=0;
105 4 i=convert_BCD(min);
106 4 ISendByte(PCF8583, 0X03,i);
107 4 }break;
108 3 case (HOU):
109 3 { ISendByte(PCF8583, 0X00,0x00);
110 4 hou++;if(hou>23) hou=0;
111 4 i=convert_BCD(hou);
112 4 ISendByte(PCF8583, 0X04, i);
113 4 } break;
114 3 case(DAY):
115 3 { ISendByte(PCF8583, 0X00,0x00);
116 4 day++;if(day>31) day=1;
C51 COMPILER V7.07 ALARM001 02/02/2009 01:27:16 PAGE 3
117 4 i=convert_BCD(day);
118 4 ISendByte(PCF8583, 0x05, i);
119 4 }break;
120 3 case(MON):
121 3 { ISendByte(PCF8583, 0X00,0x00);
122 4 mon++;if(mon>12) mon=1;
123 4 i=convert_BCD(mon);
124 4 ISendByte(PCF8583, 0x06, i);
125 4 }break;
126 3 default:break;
127 3 }
128 2 if(MS==2)
129 2 {
130 3 switch(key)
131 3 {
132 4 case (MIN):
133 4 {
134 5 ALM_min++;if(ALM_min>=60) ALM_min=0;
135 5 i=convert_BCD(ALM_min);
136 5 ISendByte(PCF8583, 0X0b,i);
137 5 }break;
138 4 case (HOU):
139 4 { // ISendByte(PCF8583, 0X0b,0x00);
140 5 ALM_hou++;if(ALM_hou>23)ALM_hou=0;
141 5 i=convert_BCD(ALM_hou);
142 5 ISendByte(PCF8583, 0X0c, i);
143 5 } break;
144 4 case(DAY):
145 4 { //ISendByte(PCF8583, 0X00,0x00);
146 5 ALM_day++;if(ALM_day>31) ALM_day=1;
147 5 i=convert_BCD(ALM_day);
148 5 ISendByte(PCF8583, 0x0d, i);
149 5 }break;
150 4 case(MON):
151 4 { //ISendByte(PCF8583, 0X00,0x00);
152 5 ALM_mon++;if(ALM_mon>12) ALM_mon=1;
153 5 i=convert_BCD(ALM_mon);
154 5 ISendByte(PCF8583, 0x0e, i);
155 5 }break;
156 4 default:break;
157 4 }
158 3 }
159 2 key=0;
160 2
161 2 }
162 1 }
163
164 void delay(uint k)
165 {
166 1 uint i,j;
167 1 for(i=0;i<k;i++)
168 1 {
169 2 for(j=0;j<1000;j++) ;
170 2 }
171 1 }
172
173 void keyboard(void)
174 {
175 1 P0=0X3F;
176 1 if((P0&0x02)==0)
177 1 { delay(5);
178 2 while((P0&0x02)==0);
C51 COMPILER V7.07 ALARM001 02/02/2009 01:27:16 PAGE 4
179 2 key=MIN;
180 2 }
181 1 else
182 1 if((P0&0x04)==0)
183 1 {
184 2 delay(5);
185 2 while((P0&0x04)==0);
186 2 key=HOU;
187 2 }
188 1 else
189 1 if((P0&0x08)==0)
190 1 {
191 2 delay(5);
192 2 while((P0&0x08)==0);
193 2 key=DAY;
194 2 }
195 1 else
196 1 if((P0&0x10)==0)
197 1 {
198 2 delay(5);
199 2 while((P0&0x10)==0);
200 2 key=MON;
201 2 }
202 1 else
203 1 if((P0&0x20)==0)
204 1 {
205 2 delay(5);
206 2 while((P0&0x20)==0);
207 2 key=SET;
208 2 }
209 1 else
210 1 if((P0&0X01)==0)
211 1 {
212 2 delay(5);
213 2 while((P0&0X01)==0);
214 2 key=CHECK;
215 2 }
216 1 }
217
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -