📄 bishe.lst
字号:
C51 COMPILER V7.50 BISHE 05/03/2006 18:34:17 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE BISHE
OBJECT MODULE PLACED IN bishe.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE bishe.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*涡流测厚仪*/
2 #include<AT89X51.H>
3 #include"lcd.h"
4 /*********************************************************************************
5 管脚定义
6 *********************************************************************************/
7 sbit CS=P0^4;//AD部分
8 sbit LOAD=P0^3;
9 sbit DINA=P0^2;
10 sbit SCLK=P0^1;
11 sbit DOUT=P0^0;
12 uchar bdata a;
13 uchar bdata b;
14 sbit a0=a^0;
15 sbit b0=b^0;
16 /*******************************************************************************
17 全局变量定义和数组定义
18 *******************************************************************************/
19
20
21 uchar code table1[]={"0123456789"};
22 uchar code table2[]={"calibration "};
23 uchar code table3[]={"please insert al"};
24 uchar code table4[]={"and press enter"};
25 uchar code table5[]={"please input num"};
26 uchar table6[20];
27 uchar table7[6];
28 int error;
29 int n;
30 uchar counter;
31 bit scan=0;
32 bit enabledis=0;
33
34 /*///////////////////////////////////////////////////////////////////////
35 函数名: 定时器中断服务函数
36 功能: 产生50ms的时钟延时
37 返回值: 无
38 注意: 无
39
40 //////////////////////////////////////////////////////////////////////*/
41
42 void timer0(void) interrupt 1 using 2
43 {TL0=(65535-50000)%256;
44 1 TH0=(65535-50000)/256;
45 1 scan=1;
46 1 counter++;
47 1 if(counter==20)
48 1 {counter=0;
49 2 enabledis=1;
50 2 }
51 1 }
52
53 void init(void)
54 {TMOD=0x01; //16位定时器
55 1 EA=1;
C51 COMPILER V7.50 BISHE 05/03/2006 18:34:17 PAGE 2
56 1 ET0=1;
57 1 TH0=(65535-50000)/256;
58 1 TL0=(65535-50000)%256;
59 1
60 1 }
61
62
63 /*///////////////////////////////////////////////////////////////////////
64 函数名: AD芯片接口函数
65 功能: 负责读取AD芯片的数据并返回转换后的值
66 返回值: 返回一个16位的数据
67 注意: 无
68
69 //////////////////////////////////////////////////////////////////////*/
70 uint ADC(void)
71 {uint c;
72 1 uchar ADS,n=0;
73 1 char i,j;
74 1 SCLK=0;
75 1 CS=0;
76 1 i=0;
77 1 while(i<16)
78 1 {
79 2 if(i<8)
80 2 ADS=0x00;
81 2 else
82 2 ADS=0x00;
83 2 for(j=8;j>=1;j--)
84 2 {
85 3 DINA=ADS&0x80;
86 3 ADS<<=1;
87 3 //CLK=0;
88 3 //_nop_();
89 3 SCLK=0;
90 3 SCLK=1;
91 3 }
92 2 i=i+8;
93 2 }
94 1 // CS=1;
95 1 SCLK=0;
96 1
97 1 //while(EOC==1);
98 1 // _nop_();
99 1 while(n<16)
100 1 {
101 2 if(n<8)
102 2 for(i=1;i<=8;i++)
103 2 { a<<=1;
104 3 SCLK=1;
105 3 a0=DOUT;
106 3 // SCLK=1;
107 3 SCLK=0;
108 3 // a<<=1;
109 3 }
110 2 else
111 2 for(i=1;i<=8;i++)
112 2 { b<<=1;
113 3 SCLK=1;
114 3 b0=DOUT;
115 3 //SCLK=1;
116 3 SCLK=0;
117 3 // b<<=1;
C51 COMPILER V7.50 BISHE 05/03/2006 18:34:17 PAGE 3
118 3 }
119 2 n=n+8;
120 2 }
121 1 CS=1;
122 1 c=a*256+b;
123 1 return(c);
124 1 }
125
126 /*///////////////////////////////////////////////////////////////////////
127 函数名: 数字选择函数
128 功能:
129 返回值: 无
130 注意: 返回具体键位地址
131
132 //////////////////////////////////////////////////////////////////////*/
133 select(uchar x)
134 {
135 1 n=n*10+x;}
136 /*///////////////////////////////////////////////////////////////////////
137 函数名: 键盘扫描函数
138 功能:
139 返回值: 无
140 注意: 返回具体键位地址
141
142 //////////////////////////////////////////////////////////////////////*/
143 uchar key(void) //键盘扫描
144 {uchar sccode,recode;
145 1 P1=0xf0;
146 1 if((P1&0xf0)!=0xf0)
147 1 {delay(10);
148 2 if((P1&0xf0)!=0xf0)
149 2 {delay(100);
150 3 if((P1&0xf0)==0xf0)
151 3 sccode=0xfe;
152 3 while((sccode&0x10)!=0)
153 3 {P1=sccode;
154 4 if((P1&0xf0)!=0xf0)
155 4 {recode=(P1&0xf0)|0x0f;
156 5 P1=0xf0;
157 5 return((~sccode)+(~recode));
158 5 }
159 4 else
160 4 sccode=(sccode<<1)|0x01;
161 4 }
162 3 }
163 2 }
164 1 P1=0xf0;
165 1 return(0);
166 1 }
167 /*///////////////////////////////////////////////////////////////////////
168 函数名: 键位对应函数
169 功能:
170 返回值: 无
171 注意: 无
172
173 //////////////////////////////////////////////////////////////////////*/
174 sweep()
175 {uchar i;
176 1 i=key();
177 1 //if(l==1)
178 1 {
179 2 switch(i)
C51 COMPILER V7.50 BISHE 05/03/2006 18:34:17 PAGE 4
180 2 {
181 3 case 0x11:select(1);break; //表值对应
182 3 case 0x21:select(2);break;
183 3 case 0x41:select(3);break;
184 3 //case 0x81:check(); break;
185 3 case 0x12:select(4);break;
186 3 case 0x22:select(5);break;
187 3 case 0x42:select(6);break;
188 3 //case 0x82:normal(); break;
189 3 case 0x14:select(7);break;
190 3 case 0x24:select(8);break;
191 3 case 0x44:select(9);break;
192 3 //case 0x84:set(); break;
193 3 //case 0x18:enter(); break;
194 3 case 0x28:select(0);break;
195 3 //case 0x48:warn(); break;
196 3 //case 0x88:broken(); break;
197 3 }
198 2
199 2 }}
200
201 asc_change(int f)
202 {
203 1 table7[5]=0x00;
204 1 table7[4]=f%10+0x30;
205 1 table7[3]='.';
206 1 table7[2]=f/10%10+0x30;
207 1 table7[1]=f/100%10+0x30;
208 1 table7[0]=f/1000+0x30;
209 1
210 1 }
211
212 /*///////////////////////////////////////////////////////////////////////
213 函数名: 主函数
214 功能:
215 返回值: 无
216 注意: 无
217
218 //////////////////////////////////////////////////////////////////////*/
219 main()
220 {int a,k=0;
221 1 init();
222 1 lcdinit();
223 1 lcd_dis(table3,0x80);
224 1 lcd_dis(table4,0xc0);
225 1 while(key()!=0x18);
226 1 a=ADC();
227 1 lcd_dis(table5,0x80);
228 1 while(key()!=0x18)
229 1 {sweep();}
230 1 error=a-n;
231 1 a=0;
232 1 TR0=1;//开定时器0
233 1 lcd_com(0x01); //清屏
234 1 while(1);
235 1 {if(scan==1)
236 2 {table6[k]=ADC();
237 3 a+=(table6[k]+error);
238 3 k++;
239 3 if(k==19)
240 3 k=0;
241 3 }
C51 COMPILER V7.50 BISHE 05/03/2006 18:34:17 PAGE 5
242 2 if(enabledis==1)
243 2 {a=a/20;
244 3 a=a*2500;
245 3 a=a>>15;
246 3 asc_change(a);
247 3 lcd_dis(table7,0xc0);
248 3 }
249 2
250 2 }
251 1
252 1 }
253
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 540 ----
CONSTANT SIZE = 74 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 33 5
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -