📄 shuzi.lst
字号:
C51 COMPILER V7.06 SHUZI 08/27/2007 17:43:14 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SHUZI
OBJECT MODULE PLACED IN shuzi.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE shuzi.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 //#include <AT89X51.H>
3 #include<intrins.h>
4 #include<absaCC.h>
5 #define uchar unsigned char
6 #define uint unsigned int
7 sbit st=P3^2;
8 sbit oe=P3^1;
9 sbit eoc=P3^3;
10 sbit LCD_RS = P2^0;
11 sbit LCD_RW = P2^1;
12 sbit LCD_EN = P2^2;
13 sbit S1=P2^3;
14 sbit S2=P2^4;
15 sbit S3=P2^5;
16 unsigned char data temp_data[2] = {0x00,0x00} ;
17 uchar code tab[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
18 uchar code td[]={0x00,0x10,0x20,0x30,0x40,0x050,0x60,0x70};
19 uchar code first[ ] = {" welcome "};
20 uchar data_temp,data_temp1,data_temp2;
21 unsigned int ad_0809,ad_data0,ad_data1,ad_data2,ad_data3,ad1_data1,ad1_data2,ad1_data3,temp1,temp2,temp_da
-ta1,temp_data2,temp_data3;
22 #define delayNOP();{_nop_();_nop_();_nop_();_nop_();};
23 uchar m,number;
24 uchar x[8];
25 void delaynms(uint x);
26 void display();
27 void delay();
28 void delayns();
29 void ad0809();
30 void LCD_init_DIS();
31 bit lcd_busy();
32 void lcd_pos(uchar pos);
33 void lcd_wdat(uchar dat);
34 void lcd_wcmd(uchar cmd);
35 void lcd_init();
36 unsigned char channel=0xbc;
37 /*延时*/
38 void delaynms(uint x)
39 {
40 1 uchar i;
41 1 while(x-->0)
42 1 {
43 2 for(i=0;i<125;i++)
44 2 {
45 3 ;
46 3 }
47 2 }
48 1 }
49 void delay(void)
50 {
51 1 unsigned char m,n;
52 1 for (m=0;m<10;m++)
53 1 for (n=0;n<248;n++);
54 1
C51 COMPILER V7.06 SHUZI 08/27/2007 17:43:14 PAGE 2
55 1 }
56 void delayns(void)
57 {unsigned char m,n,k;
58 1 for (m=0;m<10;m++)
59 1 for (n=0;n<20;n++)
60 1 for (k=0;k<248;k++);
61 1 }
62
63 /********************************************************/
64 /*
65 /*检查LCD忙状态
66 /*lcd_busy为1时,忙,等待。为0时,闲,可写指令与数据。
67 /*
68 /********************************************************/
69
70 bit lcd_busy()
71 {
72 1 bit result;
73 1 LCD_RS = 0;
74 1 LCD_RW = 1;
75 1 LCD_EN = 1;
76 1 delayNOP();
77 1 result = (bit)(P0&0x80);
78 1 LCD_EN = 0;
79 1 return(result);
80 1 }
81
82 /********************************************************/
83 /*
84 /*写指令数据到LCD
85 /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。
86 /*
87 /********************************************************/
88
89 void lcd_wcmd(uchar cmd)
90
91 {
92 1 while(lcd_busy());
93 1 LCD_RS = 0;
94 1 LCD_RW = 0;
95 1 LCD_EN = 0;
96 1 _nop_();
97 1 _nop_();
98 1 P0 = cmd;
99 1 delayNOP();
100 1 LCD_EN = 1;
101 1 delayNOP();
102 1 LCD_EN = 0;
103 1 }
104
105 /********************************************************/
106 /*
107 /*写显示数据到LCD
108 /*RS=H,RW=L,E=高脉冲,D0-D7=数据。
109 /*
110 /********************************************************/
111
112 void lcd_wdat(uchar dat)
113 {
114 1 while(lcd_busy());
115 1 LCD_RS = 1;
116 1 LCD_RW = 0;
C51 COMPILER V7.06 SHUZI 08/27/2007 17:43:14 PAGE 3
117 1 LCD_EN = 0;
118 1 P0 = dat;
119 1 delayNOP();
120 1 LCD_EN = 1;
121 1 delayNOP();
122 1 LCD_EN = 0;
123 1 }
124 /********************************************************/
125 /*
126 /* LCD初始化设定
127 /*
128
129 /********************************************************/
130
131 void lcd_init()
132 {
133 1 delaynms(30);
134 1 lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
135 1 delay();
136 1 lcd_wcmd(0x38);
137 1 delay();
138 1 lcd_wcmd(0x38);
139 1 delay();
140 1
141 1 lcd_wcmd(0x0c); //显示开,关光标
142 1 delay();
143 1 lcd_wcmd(0x06); //移动光标
144 1 delay();
145 1 lcd_wcmd(0x01); //清除LCD的显示内容
146 1 delay();
147 1 }
148 /********************************************************/
149 /*
150 /* LCD1602初始显示子程序
151 /*
152 /********************************************************/
153 void LCD_init_DIS()
154 {
155 1 delay(); //延时
156 1 lcd_init(); //初始化LCD
157 1
158 1 lcd_pos(0); //设置显示位置为第一行的第1个字符
159 1 m = 0;
160 1 while(first[m] != '\0')
161 1 { //显示字符
162 2 lcd_wdat(first[m]);
163 2 m++;
164 2 } ;
165 1
166 1 }
167
168 /*******************************************************/
169 /*
170 /* 设定显示位置
171 /*
172 /********************************************************/
173
174 void lcd_pos(uchar pos)
175 {
176 1 lcd_wcmd(pos | 0x80); //数据指针=80+地址变量
177 1 }
178 /********************************************************/
C51 COMPILER V7.06 SHUZI 08/27/2007 17:43:14 PAGE 4
179 /*
180 /* LCD1602数据转换子程序
181 /*
182 /********************************************************/
183 //void data_conv()
184 //{
185 //data_temp1=data_temp>>4; //高位
186 //
187 //{data_temp1=data_temp1+0x30;}
188
189 //data_temp2=data_temp%16; //低位
190 // data_temp2=data_temp2+0x30;
191 // }//
192
193
194 uchar data_conva(uchar convno)
195 {
196 1 uchar conv_temp1,conv_temp2;
197 1 conv_temp1=(convno&0x0f);
198 1 if(conv_temp1>0x09)
199 1 conv_temp1+=0x06;
200 1 conv_temp2=(convno&0xf0);
201 1 convno=conv_temp1+conv_temp2;
202 1 return(convno);
203 1
204 1 }
205
206
207
208 /*****************/
209 /****中断*****/
210 /***************************************/
211 void t0(void)// interrupt 1 using 0
212
213 {
214 1 while(lcd_busy());
215 1 TH0=(65536-4000)/256;
216 1 TL0=(65536-4000)%256;
217 1 //if(ad_0809>0xff||ad_0809<0x00)
218 1 //{
219 1 //lcd_wdat(fs[m]);
220 1 // m++;
221 1 // }
222 1 ad_data1=((ad_0809*2)/100)&0x0f;
223 1 ad_data2=(((ad_0809*2)%100)/10)&0x0f;
224 1 ad_data3=((((ad_0809*2))%100)%10)&0x0f;
225 1 // ad1_data1=(((ad_0809)/100)&0x0f);
226 1 //ad1_data2=((((ad_0809)%100))/10)&0x0f;
227 1 // ad1_data3=((((ad_0809)%100))%10)&0x0f;
228 1 //temp_data3=ad_data3+ad1_data3;
229 1 // temp_data3=ad_data3*(data1/data2);
230 1 //temp_data3=data_conva(temp_data3);
231 1
232 1 //temp_data2=ad_data2+ad1_data2;
233 1 // temp_data2=ad_data2*(data1/data2);
234 1
235 1 //temp_data2=data_conva(temp_data2);
236 1 //temp1=(temp_data2&0xf0)>>4;
237 1 //temp_data1=ad_data1+ad1_data1+temp1;
238 1 //temp_data1=(ad_data1+temp1)*(data1/data2);
239 1 //temp_data1=data_conva(temp_data1);
240 1 ad_data1=(ad_data1&0x0f)+0x30;
C51 COMPILER V7.06 SHUZI 08/27/2007 17:43:14 PAGE 5
241 1 ad_data2=(ad_data2&0x0f)+0x30;
242 1 ad_data3=(ad_data3&0x0f)+0x30;
243 1
244 1 lcd_pos(0x4b) ;
245 1 lcd_wdat(ad_data1) ;
246 1 lcd_pos(0x4c) ;
247 1 lcd_wdat('.') ;
248 1 lcd_pos(0x4d) ;
249 1 lcd_wdat(ad_data2);
250 1 lcd_pos(0x4e) ;
251 1 lcd_wdat(ad_data3) ;
252 1 lcd_pos(0x4f) ;
253 1 lcd_wdat('V') ;
254 1
255 1
256 1 }
257 /**************************************/
258 /*********数据移位*******************/
259 /************************************/
260 //uchar ltoh(uchar dat)
261 //{
262 // unsigned char i = 0 ;
263 // unsigned char dat = 0 ;
264 // unsigned char dat1 = 0 ;
265 // bit DQ ;
266 // for (i = 8 ; i > 0 ; i--)
267 // {
268 // DQ = 0 ;
269 // DQ = dat&0x01 ;
270 // dat1 <<= 1 ;
271 // if(DQ)
272 // dat1 |= 0x01 ;
273 // dat>>=1 ;
274 // }
275 // return (dat1);
276 //}
277
278
279 void main(void)
280 {
281 1
282 1
283 1 LCD_init_DIS();
284 1 TMOD=0x01;
285 1 TH0=(65536-4000)/256;
286 1 TL0=(65536-4000)%256;
287 1 TR0=1;
288 1 ET0=1;
289 1 EX0=1;
290 1 EA=1;
291 1 P3=channel;
292 1 S1=1;
293 1 S2=1;
294 1 S3=0;
295 1 while(1)
296 1 {
297 2 st=0;
298 2 st=1;
299 2 st=0;
300 2 while(eoc==0);
301 2 oe=1;
302 2 ad_0809=P1;
C51 COMPILER V7.06 SHUZI 08/27/2007 17:43:14 PAGE 6
303 2 //ad_0809=ltoh(ad_0809);
304 2 oe=0;
305 2
306 2 t0();
307 2
308 2 }
309 1 }
310 end;
311
312
313
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 476 ----
CONSTANT SIZE = 42 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 44 ----
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 + -