📄 200926.lst
字号:
C51 COMPILER V7.07 200926 02/06/2009 15:01:06 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE 200926
OBJECT MODULE PLACED IN 200926.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 200926.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.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
13 #define Busy 0x80 //常量定义
14
15 //==============================================
16 sbit SDA=P1^7; /*模拟I2C数据传送位*/
17 sbit SCL=P1^6; /*模拟I2C时钟控制位*/
18
19 /*状态标志*/
20 bit ack; /*应答标志位*/
21
22 uchar SEG7[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};/*0~9的数码管段码*/
23
24 uchar act[12]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x04,0x08,0x10,0x20};//12位数码管位码;
25 uchar read_temp,tens,decile,units,tmp,tmprt;
26 bit flag_init;
27
28 uchar MS,mon,day,hou,min,sec;
29 uchar key;
30 uchar discnt,tempb20,tempb21;
31 uint cnt,time_cnt;
32 uchar first;
33 uchar temp1,temp2,temp;
34 uchar btemp,btemp1,btemp2;
35 sbit MSKEY=P0^5; /*功能键标志*/
36 sbit MONKEY=P0^4;//月按键
37 sbit DAYKEY=P0^3;//天按键
38 sbit HOUKEY=P0^2;//时按键
39 sbit MINKEY=P0^1;//分按键
40 sbit DQ=P3^5; //温度测试端
41 sbit TEST=P3^4;
42
43 //sbit CHECKKEY=P3^0;//查询按键
44 sbit CLK=P1^0;
45 sbit DATA=P1^1;
46
47 void TIMERIni(void);
48 void menu(void);
49 void delay(uint k);
50 void keyboard(void);
51 void send164(uchar m);
52 void dis_time(uchar m);
53 void dis_adjtime(uchar m);
54 uchar IRcvByte(uchar sla,uchar suba);
55 bit ISendByte(uchar sla,uchar suba,uchar c);
C51 COMPILER V7.07 200926 02/06/2009 15:01:06 PAGE 2
56 void Ack_I2c(bit a);
57 uchar RcvByte(void);
58 void SendByte(uchar c);
59 void Stop_I2c(void);
60 void Start_I2c(void);
61
62 void gettempTS(void);
63 void initTS(void);
64 uchar readBTS(void);
65 void writeBTS(uchar byte);
66 void resetTS(void);
67 bit readTS(void);
68 void write1TS(void);
69 void write0TS(void);
70 void delay15us(void);
71 void delay60us(void);
72 void BDelay_uS(unsigned int tt);
73
74 uchar convert_BCD(uchar i)
75 {
76 1 uchar i1,i2;
77 1 i1=i%10;
78 1 i2=i/10;
79 1 i2=i2<<4;
80 1 i=i2+i1;
81 1 return i;
82 1 }
83
84 void menu(void)//扫描按键子函数
85 {
86 1 uchar i;
87 1 if(key==SET)
88 1 {MS++;
89 2
90 2 if(MS==2)
91 2 {
92 3
93 3 MS=0; first=0;
94 3
95 3 }
96 2 }// 调整模式
97 1 if(MS==1)
98 1 {
99 2 switch(key)
100 2 {
101 3 case (MIN):
102 3 { ISendByte(PCF8583, 0X00,0x00);
103 4 min++;if(min>=60) min=0;
104 4 i=convert_BCD(min);
105 4 ISendByte(PCF8583, 0X03,i);
106 4 }break;
107 3 case (HOU):
108 3 { ISendByte(PCF8583, 0X00,0x00);
109 4 hou++;if(hou>23) hou=0;
110 4 i=convert_BCD(hou);
111 4 ISendByte(PCF8583, 0X04, i);
112 4 } break;
113 3 case(DAY):
114 3 { ISendByte(PCF8583, 0X00,0x00);
115 4 day++;if(day>31) day=1;
116 4 i=convert_BCD(day);
117 4 ISendByte(PCF8583, 0x05, i);
C51 COMPILER V7.07 200926 02/06/2009 15:01:06 PAGE 3
118 4 }break;
119 3 case(MON):
120 3 { ISendByte(PCF8583, 0X00,0x00);
121 4 mon++;if(mon>12) mon=1;
122 4 i=convert_BCD(mon);
123 4 ISendByte(PCF8583, 0x06, i);
124 4 }break;
125 3 default:break;
126 3 }
127 2 }
128 1 key=0;
129 1
130 1 }
131
132 void delay(uint k)
133 {
134 1 uint i,j;
135 1 for(i=0;i<k;i++)
136 1 {
137 2 for(j=0;j<1000;j++) ;
138 2 }
139 1 }
140
141 void keyboard(void)
142 {
143 1 P0=0X3F;
144 1 if((P0&0x02)==0)
145 1 { delay(5);
146 2 while((P0&0x02)==0);
147 2 key=MIN;
148 2 }
149 1 else
150 1 if((P0&0x04)==0)
151 1 {
152 2 delay(5);
153 2 while((P0&0x04)==0);
154 2 key=HOU;
155 2 }
156 1 else
157 1 if((P0&0x08)==0)
158 1 {
159 2 delay(5);
160 2 while((P0&0x08)==0);
161 2 key=DAY;
162 2 }
163 1 else
164 1 if((P0&0x10)==0)
165 1 {
166 2 delay(5);
167 2 while((P0&0x10)==0);
168 2 key=MON;
169 2 }
170 1 else
171 1 if((P0&0x20)==0)
172 1 {
173 2 delay(5);
174 2 while((P0&0x20)==0);
175 2 key=SET;
176 2 }
177 1 }
178
179
C51 COMPILER V7.07 200926 02/06/2009 15:01:06 PAGE 4
180
181
182 void time0(void) interrupt 1
183 {
184 1 TH0=0xf8;TL0=0x30;
185 1 if(discnt>11)discnt=0;// 显示为12位数码管
186 1 if(cnt>400)cnt=0;// 调整时的闪烁周期
187 1 switch(MS)
188 1 {
189 2 case 0:{dis_time(discnt);}break;// 显示走时
190 2 case 1:{dis_adjtime(discnt);}break;// 显示调时
191 2 default: break;
192 2 }
193 1 discnt++;cnt++;
194 1
195 1 }
196
197 void time1(void) interrupt 3 //50ms
198 {
199 1 TH1=0X3C;TL1=0XAF;
200 1 time_cnt++;
201 1 if(time_cnt>=20) // 1秒钟计时时间到,读PCF8583的各寄存器的值
202 1 {
203 2 time_cnt=0;
204 2 read_temp=1;
205 2
206 2 }
207 1 }
208 ///////////////////////*18b20*////////////////////////
209 void BDelay_uS(unsigned int tt) //延时时间为(tt*9+16)us.晶振为12MHz
210 {
211 1 while(tt--)
212 1 ;
213 1 }
214
215 void delay15us(void)
216 {
217 1 _Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();
218 1 }
219 void Delay1mS(unsigned int tt) //延时时间为tt ms.晶振为12MHz
220 {
221 1 unsigned char i;
222 1 while(tt--)
223 1 for(i=113;i>0;i--)
224 1 ;
225 1 }
226
227 void DS18B20_init(void)
228 { uint i;
229 1 start: DQ=1;
230 1 _Nop();
231 1 DQ=0;
232 1 for(i=0;i<8;i++){delay15us();delay15us();delay15us();delay15us();delay15us();}
233 1
234 1 DQ=1;
235 1 delay15us();delay15us(); //Delay_uS(4);
236 1 while(DQ)
237 1 {
238 2 i++;
239 2 if(i>2000)
240 2 {goto start;
241 3 }
C51 COMPILER V7.07 200926 02/06/2009 15:01:06 PAGE 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -