📄 1602lcd-2.lst
字号:
C51 COMPILER V7.10 1602LCD_2 03/26/2006 15:26:39 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE 1602LCD_2
OBJECT MODULE PLACED IN 1602lcd-2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1602lcd-2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <REG51.H>
2 #include <INTRINS.H> //为调用nop空指令需要
3
4
5 #define DS_NOP() _nop_();_nop_();_nop_();_nop_()
6 #define REF_Voltage 5.25 //ADC0809基准电压
7 #define PLUS_CH0 1 //各个通道增益
8 #define PLUS_CH1 1
9 #define PLUS_CH2 1
10 #define PLUS_CH3 5
11 #define PLUS_CH4 1
12 #define PLUS_CH5 1
13 #define PLUS_CH6 1
14 #define PLUS_CH7 1
15
16
17
18 /**************ADC0809引脚定义**********/
19 sbit ST = P2^5;
20 sbit OE = P2^4;
21 sbit EOC = P2^3;
22 sbit ADC0809_C = P2^2;
23 sbit ADC0809_B = P2^1;
24 sbit ADC0809_A = P2^0;
25
26 /**************LCD引脚定义*************/
27 sbit LCM_RW = P3^6; //定义LCD引脚
28 sbit LCM_RS = P3^7;
29 sbit LCM_E = P3^5;
30 #define LCM_Data P1
31 #define Busy 0x80 //用于检测LCM状态字中的Busy标识
32
33 /************函数声明*******************/
34 void LCMInit(void);
35 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
36 void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
37 void DisplayNumberFloat(unsigned char X, unsigned char Y,float Number,unsigned char point_number);
38 void Delay5Ms(void);
39 void Delay400Ms(void);
40 void Decode(unsigned char ScanCode);
41 void WriteDataLCM(unsigned char WDLCM);
42 void WriteCommandLCM(unsigned char WCLCM,BuysC);
43
44 unsigned char ReadDataLCM(void);
45 unsigned char ReadStatusLCM(void);
46 unsigned char code cdle_net[] = {" welcome... "};
47 unsigned char code email[] = {"VoltageTestDemo!"};
48 unsigned char code Cls[] = {" "};
49
50 float VoltageSurvey(unsigned char AD_ChannelNumber);
51
52 void main(void)
53 {
54 1 float CHa_voltage; //显示在第一行上的测量电压
55 1 float CHb_voltage; //显示在第二行上的测量电压
C51 COMPILER V7.10 1602LCD_2 03/26/2006 15:26:39 PAGE 2
56 1
57 1 Delay400Ms(); //启动等待,等LCM讲入工作状态
58 1 LCMInit(); //LCM初始化
59 1 Delay400Ms();
60 1 DisplayListChar(0, 0, cdle_net);
61 1 DisplayListChar(0, 1, email);
62 1 Delay400Ms();
63 1 Delay400Ms();
64 1 Delay400Ms();
65 1 Delay400Ms();
66 1 WriteCommandLCM(0x01,1); //显示清屏,光标归位,地址归位
67 1
68 1 DisplayListChar(15, 0, "V"); //显示单位
69 1 DisplayListChar(15, 1, "V");
70 1 WriteCommandLCM(0x0c,1); //关光标,关闪烁
71 1
72 1 while(1)
73 1 {
74 2 CHa_voltage = VoltageSurvey(0); //测量通道0电压
75 2 DisplayListChar(0, 0, "CH0:");
76 2 DisplayNumberFloat(7,0,CHa_voltage,2); //在LCD中部显示通道0电压
77 2 Delay5Ms();
78 2 CHb_voltage = VoltageSurvey(1); //测量通道1电压
79 2 DisplayListChar(0, 1, "CH1:");
80 2 DisplayNumberFloat(7,1,CHb_voltage,2); //在LCD中部显示通道1电压
81 2 Delay5Ms();
82 2 Delay400Ms(); //延时1.6s,即停留显示1.6s
83 2 Delay400Ms();
84 2 Delay400Ms();
85 2 Delay400Ms();
86 2
87 2 CHa_voltage = VoltageSurvey(2);
88 2 DisplayListChar(0, 0, "CH2:");
89 2 DisplayNumberFloat(7,0,CHa_voltage,2);
90 2 Delay5Ms();
91 2 CHb_voltage = VoltageSurvey(3);
92 2 DisplayListChar(0, 1, "CH3:");
93 2 DisplayNumberFloat(7,1,CHb_voltage,2);
94 2 Delay5Ms();
95 2 Delay400Ms();
96 2 Delay400Ms();
97 2 Delay400Ms();
98 2 Delay400Ms();
99 2
100 2 CHa_voltage = VoltageSurvey(4);
101 2 DisplayListChar(0, 0, "CH4:");
102 2 DisplayNumberFloat(7,0,CHa_voltage,2);
103 2 Delay5Ms();
104 2 CHb_voltage = VoltageSurvey(5);
105 2 DisplayListChar(0, 1, "CH5:");
106 2 DisplayNumberFloat(7,1,CHb_voltage,2);
107 2 Delay5Ms();
108 2 Delay400Ms();
109 2 Delay400Ms();
110 2 Delay400Ms();
111 2 Delay400Ms();
112 2
113 2
114 2 CHa_voltage = VoltageSurvey(6);
115 2 DisplayListChar(0, 0, "CH6:");
116 2 DisplayNumberFloat(7,0,CHa_voltage,2);
117 2 Delay5Ms();
C51 COMPILER V7.10 1602LCD_2 03/26/2006 15:26:39 PAGE 3
118 2 CHb_voltage = VoltageSurvey(7);
119 2 DisplayListChar(0, 1, "CH7:");
120 2 DisplayNumberFloat(7,1,CHb_voltage,2);
121 2 Delay5Ms();
122 2 Delay400Ms();
123 2 Delay400Ms();
124 2 Delay400Ms();
125 2 Delay400Ms();
126 2
127 2
128 2
129 2 }
130 1 }
131 /*
132 //########################################################################################################
-###############################
133 //########################################################################################################
-###############################
134 ADC0809驱动部分
135 */
136
137
138 /*****************************************************
139 ADC0809转换函数
140 输入: 通道号(0-7)
141 返回: 测量到的模拟电压所对应的数字量
142 *****************************************************/
143 unsigned char ADC0809test(unsigned char ch0)
144 {
145 1 unsigned char ADCdata; //AD转换后得到的数字量
146 1
147 1 ST = 0;
148 1 EOC = 1;
149 1 OE = 0;
150 1
151 1 switch(ch0)
152 1 {
153 2 case 0:
154 2 {
155 3 ADC0809_A = 0;
156 3 ADC0809_B = 0;
157 3 ADC0809_C = 0;
158 3 break;
159 3 }
160 2 case 1:
161 2 {
162 3 ADC0809_A = 1;
163 3 ADC0809_B = 0;
164 3 ADC0809_C = 0;
165 3 break;
166 3 }
167 2 case 2:
168 2 {
169 3 ADC0809_A = 0;
170 3 ADC0809_B = 1;
171 3 ADC0809_C = 0;
172 3 break;
173 3 }
174 2 case 3:
175 2 {
176 3 ADC0809_A = 1;
177 3 ADC0809_B = 1;
C51 COMPILER V7.10 1602LCD_2 03/26/2006 15:26:39 PAGE 4
178 3 ADC0809_C = 0;
179 3 break;
180 3 }
181 2 case 4:
182 2 {
183 3 ADC0809_A = 0;
184 3 ADC0809_B = 0;
185 3 ADC0809_C = 1;
186 3 break;
187 3 }
188 2 case 5:
189 2 {
190 3 ADC0809_A = 1;
191 3 ADC0809_B = 0;
192 3 ADC0809_C = 1;
193 3 break;
194 3 }
195 2
196 2 case 6:
197 2 {
198 3 ADC0809_A = 0;
199 3 ADC0809_B = 1;
200 3 ADC0809_C = 1;
201 3 break;
202 3 }
203 2 case 7:
204 2 {
205 3 ADC0809_A = 1;
206 3 ADC0809_B = 1;
207 3 ADC0809_C = 1;
208 3 break;
209 3 }
210 2 default:break;
211 2 }
212 1 ST = 1;
213 1 ST = 0;
214 1 DS_NOP();
215 1
216 1 while(EOC == 0)
217 1 {
218 2 ;
219 2 }
220 1 if(EOC == 1)
221 1 {
222 2 OE = 1;
223 2 ADCdata = P0;
224 2 return (ADCdata);
225 2 }
226 1 }
227
228 /*******************************************************
229 电压测量并装换成实际的电压值
230 入口参数: AD_ChannelNumber 输入通道号:在0-7之间选择
231 出口参数: 转换后的电压值,实际的值
232 ********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -