📄 yue1112212.lst
字号:
C51 COMPILER V7.50 YUE1112212 01/22/2004 15:11:07 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE YUE1112212
OBJECT MODULE PLACED IN E:\SCY\液晶\YY\YUE1112212.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\SCY\液晶\YY\YUE1112212.C DB SB OE OT(0)
line level source
1 //#include <reg51.h>
2 #include <at89x55.h>
3 #include <stdio.h>
4 #include <absacc.h>
5 #include <intrins.h> //此文件中有_nop_()空操作函数
6 #define uchar unsigned char
7 #define uint unsigned int
8 uchar biao1,biao2,biao3;//biao3高斯与磁通的转换,biao1是AD采样,biao2是量程转换
9 uchar biao4=0;//biao4单位转换标志
10 uchar biao5;//biao输入上、下限的标志位
11 uchar srjs1, srjs2;
12 uchar xueren=0;//计确定键的次数
13 uchar m,n;//定义输入上、下限的范围位置
14 unsigned long out; //存放1674测量值变量
15
16 unsigned char code num[]={"0123456789 :.-"};
17 unsigned char code idea1[]={"Gauss Meter"};
18 unsigned char code idea2[]={"Magnaflux Meter"};
19 unsigned char code idea3[]={" 磁信号检测仪 "};
20 unsigned char code idea4[]={"指导老师:张 胜"};
21 unsigned char code idea5[]={"设计者: 郑魏悦"};
22 unsigned char code idea6[]={"学 号:03440126"};
23 unsigned char code shape[]={"Shape"};
24 unsigned char code poles[]={"poles"};
25 unsigned char code work[]={"work"};
26 unsigned char code range[]={"range "};
27
28 uchar sz1[8] ; //AD转换数据暂存
29 uchar sz2[8]; //上限输入数据暂存
30 uchar sz3[8]; //下限输入数据暂存
31 sbit P20=P2^0;
32 sbit P21=P2^1;
33 sbit P22=P2^2;
34 /*************************************HD_7279引脚定义************************/
35
36 sbit hd_7279cs=P1^3;
37 sbit hd_7279clk=P1^4;
38 sbit hd_7279data=P1^5;
39 sbit hd_7279key=P3^3;
40 //sbit hd_7279key=P1^6; // key 连接于P1.3
41 /*************************************AD1674引脚定义************************/
42 sbit AD1674RC=P2^5;
43 sbit AD1674A0=P2^6;
44 sbit AD1674TST=P3^2;
45 sbit AD1674CS=P2^7;
46 /*************************************LCD液晶脚定义***************************/
47 sbit lcdCS = P1^5; //片选 高电平有效 单片LCD使用时可固定高电平
48 sbit lcdSID = P1^6; //数据
49 sbit lcdSCLK = P1^7; //时钟
50 //sbit lcdPSB = P2^3;
51 //sbit lcdRST = P2^4;
52
53 /*********************************函数定义******************************/
54 //7279
55 void hd7279send_byte(uchar out_byte);
C51 COMPILER V7.50 YUE1112212 01/22/2004 15:11:07 PAGE 2
56 void keyin(void);
57 void ajcl(js);
58 void axszj(uchar js);
59 void long_delay(void);
60 void short_delay(void);
61 //12864
62 void Write_char(bit start, unsigned char ddata);
63 void Send_byte(unsigned char bbyte);
64 void Delaynms(unsigned int di);
65 void Lcd_init(void);
66 void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s);
67 void LCD_set_xy( unsigned char x, unsigned char y );
68 //AD1674
69 void qd1674(void);
70 //
71 void makerang(void) ;
72 void disp(void);
73 void panluan(void);
74
75
76
77 /*************************写路一字节************************************/
78 void hd7279send_byte(uchar out_byte)
79 { uchar j;
80 1 hd_7279cs=0;
81 1 long_delay(); /*50uS引时*/
82 1 for(j=8;j>0;j--)
83 1 { if(out_byte & 0x80)
84 2 {hd_7279data=1;}
85 2 else
86 2 {hd_7279data=0;}
87 2 hd_7279clk=1;
88 2 short_delay();
89 2 hd_7279clk=0;
90 2 short_delay();
91 2 out_byte=out_byte<<1;
92 2 }
93 1 hd_7279data=0;
94 1 }
95 /**************************读一字节**********************************/
96 uchar hd7279receive_byte(void)
97 { uchar j,in_byte;
98 1 hd_7279data=1;
99 1 long_delay(); /*50uS引时*/
100 1 for(j=8;j>0;j--)
101 1 { hd_7279clk=1;
102 2 short_delay();
103 2 in_byte=in_byte<<1;
104 2 if(hd_7279data)
105 2 {in_byte=in_byte|0x01;}
106 2 hd_7279clk=0;
107 2 short_delay();
108 2 }
109 1 hd_7279data=0;
110 1 return (in_byte);
111 1 }
112
113 //***长延时***
114 void long_delay(void)
115 {
116 1 unsigned char i;
117 1 for (i=0;i<0x30;i++);
C51 COMPILER V7.50 YUE1112212 01/22/2004 15:11:07 PAGE 3
118 1 }
119
120 //***短延时***
121 void short_delay(void)
122 {
123 1 unsigned char i;
124 1 for (i=0;i<8;i++);
125 1 }
126 /******************************************************************************/
127 void Delaynms(unsigned int di) //延时
128 {
129 1 unsigned int da,db;
130 1 for(da=0;da<di;da++)
131 1 for(db=0;db<10;db++);
132 1 }
133 /*********************************AD1674转换****************************************/
134 void qd1674(void)
135 {
136 1 unsigned char out1,out2;
137 1
138 1 AD1674CS=0;
139 1 AD1674RC=0;
140 1 AD1674A0=1;
141 1
142 1 /*测忙*/
143 1 loop:
144 1 if(AD1674TST)goto loop;
145 1
146 1 /*读高8位*/
147 1
148 1 AD1674RC=1;
149 1 AD1674A0=0;
150 1 out1=P0;
151 1 out=out1&0x0f ;
152 1 out<<=8;
153 1 out+=out1;
154 1
155 1
156 1 /*读低4位*/
157 1
158 1 AD1674RC=1;
159 1 AD1674A0=1;
160 1 out2=P0;
161 1 out2=out2&0x0f;
162 1 out+=out2;
163 1 AD1674CS=1;
164 1 }
165 /******************************初始化LCD************************************************/
166 void Lcd_init(void)
167 {
168 1 Delaynms(10); //启动等待,等LCM讲入工作状态
169 1 lcdCS=1;
170 1 //Write_char(0,0x82) ;
171 1 Write_char(0,0x30) ; //8 位介面,基本指令集
172 1 Write_char(0,0x0c); //显示打开,光标关,反白关
173 1 Write_char(0,0x01); //清屏,将DDRAM的地址计数器归零
174 1 /*******************************************************/
175 1 LCD_Write_string(1,0,idea3);
176 1 LCD_Write_string(2,0,idea4);
177 1 LCD_Write_string(3,0,idea5);
178 1 LCD_Write_string(4,0,idea6);
179 1 }
C51 COMPILER V7.50 YUE1112212 01/22/2004 15:11:07 PAGE 4
180
181 /*******************************写指令或数据***********************************/
182
183 void Write_char(bit start, unsigned char ddata) //
184 {
185 1 unsigned char start_data,Hdata,Ldata;
186 1 if(start==0)
187 1 start_data=0xf8; //写指令
188 1 else
189 1 start_data=0xfa; //写数据
190 1
191 1 Hdata=ddata&0xf0; //取高四位
192 1 Ldata=(ddata<<4)&0xf0; //取低四位
193 1 Send_byte(start_data); //发送起始信号
194 1 Delaynms(5); //延时是必须的
195 1 Send_byte(Hdata); //发送高四位
196 1 Delaynms(1); //延时是必须的
197 1 Send_byte(Ldata); //发送低四位
198 1 Delaynms(1); //延时是必须的
199 1 }
200
201 /******************************************************************************/
202 void Send_byte(unsigned char bbyte) //发送一个字节
203 {
204 1 unsigned char i;
205 1 for(i=0;i<8;i++)
206 1 {
207 2
208 2 lcdSCLK=0; lcdSID=bbyte&0x80; //取出最高位
209 2 lcdSCLK=1;
210 2 bbyte<<=1; //左移
211 2 }
212 1 }
213
214
215 /******************************************************************************/
216 void Clr_Scr(void)//清屏函数
217 {
218 1 Write_char(0,0x01);
219 1
220 1 }
221 /******************************************************************************/
222 void LCD_set_xy( unsigned char x, unsigned char y )
223 { //设置LCD显示的起始位置,X为行,Y为列
224 1 unsigned char address;
225 1 switch(x)
226 1 {
227 2 case 0: address = 0x80 + y; break;
228 2 case 1: address = 0x80 + y; break;
229 2 case 2: address = 0x90 + y; break;
230 2 case 3: address = 0x88 + y; break;
231 2 case 4: address = 0x98 + y; break;
232 2 default:address = 0x80 + y; break;
233 2 }
234 1 Write_char(0, address);
235 1 }
236 /******************************************************************************/
237 void LCD_Write_number(unsigned char s)// 数字显示函数
238 {
239 1 Write_char(1,num[s]);
240 1 Delaynms(1);
241 1 }
C51 COMPILER V7.50 YUE1112212 01/22/2004 15:11:07 PAGE 5
242
243
244 /******************************************************************************/
245 void Delay(int num)//延时函数
246 {
247 1 while(num--) ;
248 1 }
249
250 /******************************************************************************/
251 void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
252 { // 中英文字符串显示函数
253 1 LCD_set_xy( X, Y );
254 1 while (*s)
255 1 {
256 2 Write_char( 1, *s );
257 2 s ++;
258 2 Delaynms(1);
259 2 }
260 1 }
261
262 /****************************************************************************/
263 void Lcd_Mark1(void)//在预定的位置上写入汉字
264 {
265 1 Clr_Scr();//清屏
266 1 LCD_Write_string(1,0,idea1);//标题-高斯计-
267 1 LCD_Write_string(2,0,"B: ");
268 1 LCD_Write_string(3,0,range);//
269 1 LCD_Write_string(3,4,work);//
270 1 LCD_Write_string(3,6," off") ;
271 1
272 1 }
273 void Lcd_Mark2(void)//在预定的位置上写入汉字
274 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -