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