📄 text1.lst
字号:
C51 COMPILER V7.09 TEXT1 03/23/2009 12:57:58 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3 #include <stdio.h>
4 #include <absacc.h>
5
6 unsigned char dis_code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
7 unsigned char dot_dis_code[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
8 unsigned char lig_code[3]={0xf1,0xf2,0xf4};
9 unsigned char VOUT;
10
11 sbit KEY1=P2^4;
12 sbit KEY2=P2^5;
13 sbit KEY3=P2^6;
14 sbit KEY4=P2^7;
15 //sbit CS =P3^2;
16
17 void delay(unsigned int N)
18 {
19 1 unsigned int i;
20 1 for(i=0;i<N;i++);
21 1 }
22
23
24
25 //***********************
26 sbit SDA=P3^4;
27 sbit SCL=P3^5;
28 //************************
29
30 //************************
31
32 //************************
33
34
35 /****************************************************************************/
36 bit ack=0; //应答信号标志位。
37
38 //*********************************
39
40
41
42 //******************************
43 //发送开始信号
44 //I2C总线的起始信号的程序。
45 void I2C_START()
46 {
47 1 SCL=1;
48 1 SDA=1;
49 1 _nop_();
50 1 _nop_();
51 1 SDA=0;
52 1 _nop_();
53 1 _nop_();
54 1 SCL=0;
55 1 }
C51 COMPILER V7.09 TEXT1 03/23/2009 12:57:58 PAGE 2
56 //******************************
57
58
59 //******************************
60 //送八位数据
61 //主器件送从器件8位数据。
62 void I2C_SEND8BIT(unsigned char send_data)
63 {
64 1
65 1 unsigned char i,temp;
66 1 temp=send_data;
67 1 for(i=8;i>0;i--)
68 1 {
69 2
70 2 SDA=(temp&0x80);
71 2 SCL=1; _nop_(); SCL=0;
72 2 temp=temp<<1;
73 2 }
74 1
75 1 }
76 //******************************
77
78
79 //******************************
80 //接收八位数据
81 //主器件接收从器件指定地址的8位数据。
82
83 unsigned char I2C_RECEIVE8BIT()
84 {
85 1 unsigned char i;
86 1 ACC=0;
87 1 for(i=8;i>0;i--)
88 1 {
89 2 ACC=ACC<<1;
90 2 SCL=1; _nop_();
91 2 if(SDA==1) ACC=ACC|0x01;
92 2 SCL=0;
93 2 }
94 1
95 1 return(ACC);
96 1
97 1 }
98 //*********************************************
99
100
101 //******************************
102 //发送接收确认信号
103 void I2C_ACK()
104 {
105 1 SDA=1; SCL=1;
106 1 _nop_(); _nop_();
107 1 if(SDA==1)ack=1;
108 1 else ack=0;
109 1 SCL=0;
110 1 }
111 //*****************************
112
113
114 //*****************************
115 //发送结束信号
116 void I2C_STOP()
117 {
C51 COMPILER V7.09 TEXT1 03/23/2009 12:57:58 PAGE 3
118 1 SDA=0;
119 1 _nop_();_nop_();
120 1 SCL=1;
121 1 _nop_();_nop_();
122 1 SDA=1;
123 1 }
124 //******************************
125
126
127 //*******************************
128 /*------------------------------------------------------
129
130 写一个字节 Address地址 I2CDatata写入的数据
131
132 ------------------------------------------------------*/
133
134 void I2C_WRITE(unsigned char Address,unsigned char dat)
135 {
136 1 do{
137 2 I2C_START();
138 2 I2C_SEND8BIT(0xa0); //从器件地址位是000,并且对从器件进行写操作。
139 2 I2C_ACK();
140 2 }while(ack==1); //=1,表示无确认,再次发送。 C为1转移。
141 1
142 1 I2C_SEND8BIT(Address);
143 1 I2C_ACK();
144 1
145 1
146 1 I2C_SEND8BIT(dat);
147 1 I2C_ACK();
148 1
149 1
150 1 I2C_STOP();
151 1
152 1 }
153 //******************************************************
154
155
156 //*******************************************
157 /*------------------------------------------------------
158
159 读一个字节 Address地址 Data读出的数据
160
161 ------------------------------------------------------*/
162 unsigned char I2C_READ(unsigned char Address)
163 {
164 1 unsigned char I2CData;
165 1
166 1 do{
167 2 I2C_START();
168 2 I2C_SEND8BIT(0xa0); //从器件地址位是000,并且对从器件进行读操作。
169 2 I2C_ACK();
170 2 }while(ack==1); //=1,表示无确认,再次发送。 C为1转移。
171 1
172 1 I2C_SEND8BIT(Address);
173 1 I2C_ACK();
174 1 do{
175 2 I2C_START();
176 2 I2C_SEND8BIT(0xa1);
177 2 I2C_ACK();
178 2 }while(ack==1);
179 1
C51 COMPILER V7.09 TEXT1 03/23/2009 12:57:58 PAGE 4
180 1 I2CData=I2C_RECEIVE8BIT();
181 1 I2C_ACK();
182 1
183 1 I2C_STOP();
184 1 return I2CData;
185 1
186 1 }
187 //***********************************************
188
189
190
191
192 void display(void)
193 {
194 1 unsigned char value[3];
195 1 unsigned char i;
196 1 value[0]=VOUT/100;
197 1 value[1]=VOUT%100/10;
198 1 value[2]=VOUT%10;
199 1 for(i=0;i<3;i++)
200 1 {
201 2 if(i==0 && value[0]==0) i+=1;
202 2 if(i==1)P0=dot_dis_code[value[i]];
203 2 else P0=dis_code[value[i]];
204 2 P2=lig_code[i];
205 2 delay(60);
206 2 P2=0xf0;
207 2 }
208 1 }
209
210 void ADD0_1(void)
211 {
212 1 if(KEY1==0) if(VOUT<=149)VOUT+=1;
213 1 while(KEY1==0)display();
214 1
215 1 }
216 void ADD1(void)
217 {
218 1
219 1 if(KEY2==0) if(VOUT<=140) VOUT+=10;
220 1 while(KEY2==0)display();
221 1
222 1 }
223
224 void DEC0_1(void)
225 {
226 1
227 1 if(KEY3==0) if(VOUT>=1) VOUT-=1;
228 1 while(KEY3==0)display();
229 1
230 1
231 1 }
232
233 void DEC1(void)
234 {
235 1
236 1 if(KEY4==0) if(VOUT>=10) VOUT-=10;
237 1 while(KEY4==0)display();
238 1
239 1 }
240
241 void GetKey(void)
C51 COMPILER V7.09 TEXT1 03/23/2009 12:57:58 PAGE 5
242 {
243 1 if(KEY1==0)ADD0_1();
244 1 if(KEY2==0)ADD1();
245 1 if(KEY3==0)DEC0_1();
246 1 if(KEY4==0)DEC1();
247 1
248 1 // while ((P2&0xf0)^0xf0) display(); //等待按键释放
249 1
250 1 }
251
252
253
254 void main()
255 {
256 1
257 1 P2=0xf0;
258 1 VOUT=I2C_READ(0x01);
259 1 while(1)
260 1 {
261 2 P1=VOUT; WR=0; WR=1;
262 2 display();
263 2 GetKey();
264 2 I2C_WRITE(0x01,VOUT);
265 2 }
266 1
267 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 408 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 24 3
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -