📄 csy.lst
字号:
C51 COMPILER V7.06 CSY 11/16/2007 16:56:48 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE CSY
OBJECT MODULE PLACED IN csy.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE csy.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //深圳瑞特RT12864带M系列(控制器ST7920A),单片机:89S52,晶振:12M,
2 //并行连接方式,P2.7-RS,P2.1-RW,P2.2-E
3 //设计:TIMEN HUANG
4 #include<reg1210.h>
5 #include <intrins.h>
6 #include<stdio.h>
7 #include<stdlib.h>
8 #include<math.h>
9 #include "rom1210.h" //读写flash用
10 #define PAGE_SIZE 0x80 //读写flash用
11 extern long bipolar(void);//A/D转换用
12 #define LSB 298.0232e-9 //A/D转换用
13 //#include<syslib.h>
14 extern void autobaud(void);
15 sbit RS=P2^7;//串口时为CS
16 sbit RW=P2^1; //串口为SID
17 sbit E=P2^2; //串口为时钟SCLK
18 //D0---D7=P1
19 sbit up=P2^3;
20 sbit down=P2^4;
21 sbit enter=P2^5;
22 sbit retu=P2^6;
23
24 sbit TMDAT=P2^0; //温度数据引脚
25
26 /*sbit start=P2^7;
27 sbit run=P2^6;
28 sbit display=P3^3;
29 sbit close=P3^1;
30 */
31
32 #define BF 0x80 //用于检测LCM状态字中的Busy标识
33 typedef unsigned int Uint;
34 typedef unsigned char Uchar;
35 //读写flash变量
36 char xdata *pFlashPage;
37 unsigned int xdata buffer[PAGE_SIZE];
38 //上为读写flash变量
39
40
41 //汉字,直接可以写入字形
42 //第一屏
43
44
45 float ph;
46 char sph[6];
47 int b;//行号
48 int s;//屏号
49
50
51 //xiao=modf(ph,*iptr1);
52 //zheng=floor(ph);
53 unsigned char code chinese1[] = {"pH 值"};
54 const Uchar lengthCF1=3;
55 unsigned char code chinese2[] = {"溶解氧"};
C51 COMPILER V7.06 CSY 11/16/2007 16:56:48 PAGE 2
56 const Uchar lengthCF2=3;
57 unsigned char code chinese3[] = {"氟离子"};
58 const Uchar lengthCF3=3;
59 unsigned char code chinese4[] = {"温度值"};
60 const Uchar lengthCF4=3;
61 //pH第二屏显示内容
62 unsigned char code chinese5[] = {"不校验"};
63 const Uchar lengthCF5=3;
64 unsigned char code chinese6[] = {"酸性校验"};
65 const Uchar lengthCF6=4;
66 unsigned char code chinese7[] = {"碱性校验"};
67 const Uchar lengthCF7=4;
68 unsigned char code chinese8[] = {"返回上级菜单"};
69 const Uchar lengthCF8=6;
70
71
72 //DO第二屏显示内容,氟离子第二屏内容和DO相同
73 //unsigned char code chinese5[] = {"不校验"};
74 //const Uchar lengthCF5=3;
75 unsigned char code chinese9[] = {"校验"};
76 const Uchar lengthCF9=2;
77 //unsigned char code chinese7[] = {"碱性校验"};
78 //const Uchar lengthCF7=4;
79 //unsigned char code chinese8[] = {"返回上级菜单"};
80 //const Uchar lengthCF8=6;
81
82
83 //T第二屏显示内容
84 //unsigned char code chinese5[] = {"不校验"};
85 //const Uchar lengthCF5=3;
86 unsigned char code chinese10[] = {"开始温度测量"};
87 const Uchar lengthCF10=6;
88 unsigned char code chinese11[] = {"℃"};
89 const Uchar lengthCF11=1;
90 //unsigned char code chinese7[] = {"碱性校验"};
91 //const Uchar lengthCF7=4;
92 //unsigned char code chinese8[] = {"返回上级菜单"};
93 //const Uchar lengthCF8=6;
94
95
96 const Uchar delay=250; //延时时间常数
97
98 const Uchar delay1=1; //延时时间常数
99 static void Wait1ms1(void)//延迟1 ms
100 {
101 1 Uchar cnt=0;
102 1 while (cnt<delay1) cnt++;
103 1 }
104
105 static void Wait1ms(void)//延迟1 ms
106 {
107 1 Uchar cnt=0;
108 1 while (cnt<delay) cnt++;
109 1 }
110 //延迟n ms
111 void WaitNms(int n)
112 {
113 1 Uchar i;
114 1 for(i=1;i<=n;i++)
115 1 Wait1ms();
116 1 Wait1ms();
117 1 Wait1ms();
C51 COMPILER V7.06 CSY 11/16/2007 16:56:48 PAGE 3
118 1 Wait1ms();
119 1 }
120
121
122
123 //**************************************************************************//
124 //以下是并口时才开的
125 //读忙标志,
126 void RDBF(void)
127 {
128 1
129 1 Uchar temp;
130 1 RS=0; // RS=0
131 1 RW=1; // RW=1
132 1 WaitNms(3);
133 1 while(1)
134 1 {
135 2 P1=0xFF; //数据线为输入
136 2
137 2 E=1;
138 2
139 2 WaitNms(3);
140 2 temp=P1;
141 2 // E=1;
142 2 // E=1;
143 2 Wait1ms1();
144 2 // WaitNms(3);
145 2
146 2 E=0; // E=0
147 2
148 2 //printf("调用完判忙函数\r\n");
149 2 if ((temp&0x80)==0) break;
150 2 // break;}
151 2 }
152 1 }
153 //写数据到指令寄存器
154
155 void WRCommand(Uchar comm)
156 {
157 1 //printf("调用WRcommd函数\r\n");
158 1 RDBF();
159 1 //printf("调用WRcommd函数\r\n");
160 1 RW=0;
161 1 E=1;
162 1 WaitNms(3);
163 1 P1=comm;
164 1 Wait1ms1();
165 1 E=0;
166 1 //printf("调用完WRcommd函数\r\n");
167 1 }
168 //写数据到数据寄存器
169 void WRData(Uchar TEMP)
170 {
171 1 RDBF();
172 1 RS=1;
173 1 RW=0;
174 1 E=1;
175 1 WaitNms(3);
176 1
177 1
178 1 P1=TEMP;
179 1 Wait1ms1();
C51 COMPILER V7.06 CSY 11/16/2007 16:56:48 PAGE 4
180 1
181 1
182 1 E=0;
183 1
184 1 }
185
186
187
188 //初始化LCD-8位接口
189 void LCDInit(void)
190 { // PSB=0; //串口
191 1 //PSB=1;//并口时选这个,上一行取消
192 1 //REST=1;
193 1 //REST=0;
194 1 // REST=1;
195 1
196 1 WRCommand(0x30); //基本指令集,8位并行
197 1
198 1 Wait1ms();
199 1 WRCommand(0x06); //启始点设定:光标右移
200 1 Wait1ms();
201 1
202 1 WRCommand(0x01); //清除显示DDRAM
203 1 Wait1ms();
204 1 WRCommand(0x0D); //显示状态开关:整体显示开,光标显示关,光标显示反白开
205 1
206 1 Wait1ms();
207 1 WRCommand(0x02); //地址归零
208 1
209 1 Wait1ms();
210 1 }
211
212 //显示数组字符串(显示半宽字型16*8点阵)
213 void ShowQQChar(Uchar addr,Uchar *english,Uchar count)
214 {
215 1 Uchar i;
216 1 WRCommand(addr); //设定DDRAM地址
217 1 for(i=0;i<count;)
218 1 {
219 2 WRData(english[i*2]);
220 2 Wait1ms();
221 2 WRData(english[i*2+1]);
222 2 Wait1ms();
223 2 i++;
224 2 }
225 1 }
226
227
228
229
230 //读flash存储器子程序
231 //page为页数取值范围0-7,byte_num为字节数,取值范围为0-127
232 int flash_read(int page,int byte_num)
233 {
234 1 unsigned int read_add;
235 1 read_add=0x400+0x80*page+byte_num; //实际地址
236 1
237 1 pFlashPage=(char xdata*)read_add;
238 1 buffer[0]=*pFlashPage;
239 1 if(buffer[0]>128)
240 1 buffer[0]+=256;
241 1 printf("buffer[0]=%d\n",buffer[0]);
C51 COMPILER V7.06 CSY 11/16/2007 16:56:48 PAGE 5
242 1 return buffer[0];
243 1 }
244 //写flash存储器子程序
245 //page为页数取值范围0-7,byte_num为字节数,取值范围为0-127,write_data为要写入的数据
246 void flash_write(int page,int byte_num,int write_data)
247 {
248 1 unsigned int m,lead_add;
249 1 lead_add=0x400+0x80*page; //页首地址
250 1
251 1 pFlashPage=(char xdata*)lead_add;
252 1 for(m=0;m<128;m++)
253 1 buffer[m]=*pFlashPage++;
254 1
255 1 page_erase(lead_add,0x0ff,DATA_FLASH);
256 1
257 1 buffer[byte_num]=write_data;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -