📄 12864-3.lst
字号:
C51 COMPILER V8.02 12864_3 09/03/2008 13:03:44 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 12864_3
OBJECT MODULE PLACED IN 12864-3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12864-3.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 //#include<intrinsics.h>
3 #define uint unsigned int
4 #define uchar unsigned char
5 /*#define s 8000000 //__delay_cycles(1*us)
6 #define ms 8000 //__delay_cycles(1*ms)
7 #define us 8 //__delay_cycles(1*us) */
8
9
10 /*12864 引脚定义-串行接口 */
11 /*#define CS=1 PORTC_Bit3=1 // asm("sbi 0x18,3") //CS设为高电平
12 #define CS=0 PORTC_Bit3=0 //asm("cbi 0x18,3") //CS设为低电平
13 #define SID=1 PORTC_Bit4=1 //asm("sbi 0x18,2") //SID设为高电平
14 #define SID=0 PORTC_Bit4=0 //asm("cbi 0x18,2") //SID设为低电平
15 #define SCLK=1 PORTC_Bit5=1 //asm("sbi 0x18,1") //SCLK设为高电平
16 #define SCLK=0 PORTC_Bit5=0 //asm("cbi 0x18,1") //SCLK设为低电平
17
18
19
20 /***********tlc5615*********************************/
21
22 /*#define DIN PORTD_Bit2
23 #define SCLK PORTD_Bit1
24 #define EN PORTD_Bit0 */
25
26
27 sbit CS=P3^0;//4
28 sbit SID=P3^1; //5
29 sbit SCLK=P3^3; //6管脚
30
31
32 void delay(uint z)
33 {
34 1 uint x,y;
35 1 for(x=0;x<z;x++)
36 1 for(y=0;y<121;y++);
37 1 }
38
39
40
41 //===================================================================
42 uchar mynew1[401]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//0-15对应显示屏上16列,16.17保存13.14数据
43 //uchar mynew2[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
44 uchar mynew3[5]={0,0,0,0,0};
45 //uchar mynew4[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
46 uchar number[11]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e } ;
47 uint ge_shu=0;
48 //计算实际电压
49 /*
50 uint value=0, voltage=0; //电压单位为(mV)
51
52 uchar key_scan_biao_zhi=0, key=0;
53
54 uchar mo_shi_xian_shi=0,mode=0;
55
C51 COMPILER V8.02 12864_3 09/03/2008 13:03:44 PAGE 2
56
57 uint dac=102; */
58
59
60 /*---------------------12864开始-----------------------------------------------*/
61 /********************************************************************
62 函数作用:负责串行输出8个bit位
63 ********************************************************************/
64 void Write_8bits(uint W_bits)
65 {
66 1 uint i,Temp_data;
67 1 for(i=0; i<8; i++)
68 1 {
69 2 Temp_data = W_bits;
70 2 Temp_data <<= i;
71 2 if((Temp_data&0x80)==0) //bit7 is zero
72 2 {
73 3 SID=0;
74 3 delay(1);
75 3 SCLK=1;
76 3 delay(1);
77 3 delay(1);
78 3 SCLK=0;
79 3 delay(1);
80 3 SID=0;
81 3 }
82 2 else //bit7 is one
83 2 {
84 3 SID=1;
85 3 delay(1);
86 3 SCLK=1;
87 3 delay(1);
88 3 delay(1);
89 3 SCLK=0;
90 3 delay(1);
91 3 SID=0;
92 3 }
93 2 }
94 1 }
95 /*******************************************************************
96 函数作用:写一个字节的数据到12864液晶,包括指令和数据
97 说 明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
98 (一般RW都设为0,即只向液晶写数据,不读数据)
99 RS="1",写入的是数据;RS=0,写入的是指令;
100 一般模式:RW=0,RS=1;写数据
101 RW="0",RS=0;写指令
102 ********************************************************************/
103 void W_1byte(uchar RW, uchar RS, uchar W_data)
104 {
105 1 uint H_data,L_data,S_ID = 0xf8; //11111RWRS0
106 1 if(RW == 0)
107 1 {
108 2 S_ID &=~ 0x04;
109 2 }
110 1 else //if(RW==1)
111 1 {
112 2 S_ID |= 0X04;
113 2 }
114 1 if(RS == 0)
115 1 {
116 2 S_ID &=~ 0x02;
117 2 }
C51 COMPILER V8.02 12864_3 09/03/2008 13:03:44 PAGE 3
118 1 else //if(RS==1)
119 1 {
120 2 S_ID |= 0X02;
121 2 }
122 1 H_data = W_data;
123 1 H_data &= 0xf0; //屏蔽低4位的数据
124 1 L_data = W_data; //xxxx0000格式
125 1 L_data &= 0x0f; //屏蔽高4位的数据
126 1 L_data <<= 4; //xxxx0000格式
127 1 CS=1;
128 1 Write_8bits(S_ID); //发送S_ID
129 1 Write_8bits(H_data); //发送H_data
130 1 Write_8bits(L_data); //发送L_data
131 1 CS=0;
132 1 }
133
134 /******************************************************************/
135 void LCD_Init(void)
136 {
137 1 uchar cmd;
138 1 cmd=0x30; //功能设置 8位数据,基本指令
139 1 W_1byte(0,0,cmd);
140 1 delay(2);
141 1 cmd=0x30; //功能设置 8位数据,基本指令
142 1 W_1byte(0,0,cmd);
143 1 delay(2);
144 1 cmd=0x0C; //显示状态 ON,游标OFF,反白OFF
145 1 W_1byte(0,0,cmd); //写指令
146 1 delay(2);
147 1 cmd=0x01; //清除显示
148 1 W_1byte(0,0,cmd); //写指令
149 1 delay(2);
150 1 /*cmd=0x02; //地址归位
151 1 W_1byte(0,0,cmd); //写指令
152 1 delay(2);
153 1 /*cmd=0x80; //设置DDRAM地址
154 1 W_1byte(0,0,cmd); //写指令
155 1 delay(2); //延时 */
156 1 }
157 /*----------------------------------12864结束--------------------------------------*/
158
159 /*void da5615(uint Data)
160 {
161 unsigned char i;
162
163 EN=1 ;
164 EN=0;
165 //SCLK=0 ;
166 for (i=0;i<12;i++)
167 {SCLK=0;
168 if(Data&0x8000)
169 DIN=1;
170 else
171 DIN=0;
172 Data<<=1;
173 delay(1);
174 SCLK=1;
175
176 }
177 EN=0;
178 EN=1;
179 } */
C51 COMPILER V8.02 12864_3 09/03/2008 13:03:44 PAGE 4
180
181
182 /*--------------------------------------键盘开始--------------------------------------*/
183 /*
184 //adc转换初始化
185 void adc_init(void)
186 {
187 ADCSRB |=0x00;//连续转换模式
188 ADMUX = 0x42; //参考电压为VACC ADC2通道输入 转换结果右对齐
189 ADCSRA |= 0xe6;// 启动ADC 先转化一次 64分频
190
191 }
192
193 void adc_calc(void)
194 {
195 value=ADCL; //首先读低位
196 value|=(uint)ADCH << 8; //然后读高位
197 voltage=(value*5.0/1024)*1000;
198
199 mynew3[0]= voltage/1000;
200 mynew3[1]=( voltage/100)%10;
201 mynew3[2]=( voltage/10)%10;
202 mynew3[3]= voltage%10;
203 }
204
205
206 void key_value(void)
207 {
208
209 key_scan_biao_zhi=1;
210 __delay_cycles(4*ms);
211 __delay_cycles(4*ms);
212 __delay_cycles(4*ms);
213 __delay_cycles(4*ms);
214 adc_calc();
215
216
217 if(voltage>950&&voltage<1150) { key=0x01;}//1
218 if(voltage>1150&&voltage<1350){ key=0x02;}//2
219 if(voltage>2350&&voltage<2550){ key=0x03;}//3
220 if(voltage>750&&voltage<950) { key=0x04;}//4
221 if(voltage>1350&&voltage<1550){ key=0x05;}//5
222 if(voltage>2200&&voltage<2350){ key=0x06;}//6
223 if(voltage>550&&voltage<750) { key=0x07;}//7
224 if(voltage>1550&&voltage<1680){ key=0x08;}//8
225 if(voltage>2050&&voltage<2200){ key=0x09;}//9
226 if(voltage>350&&voltage<550) { key=0x0a;}//0
227 if(voltage>1680&&voltage<1850){ key=0x0b;}//点
228 if(voltage>1850&&voltage<2050){ key=0x0c;}//确定
229 if(voltage>2550&&voltage<2750){ key=0x0d;}//存储
230 if(voltage>2750&&voltage<2950){ key=0x0e;}//读出
231 if(voltage>2950&&voltage<3120){ key=0x0f;}//-
232 if(voltage>3120&&voltage<3300){ key=0x010;}//+
233 }
234 void key_scan(void)
235 {
236
237 switch(key)
238 { case 0x01: { dac += 5; dac<<=6; da5615(dac); dac >>=6; break; }
239 case 0x02: { dac -= 5; dac<<=6; da5615(dac); dac >>=6; break; }
240 case 0x03: { break; }
241 case 0x04: { break; }
C51 COMPILER V8.02 12864_3 09/03/2008 13:03:44 PAGE 5
242 case 0x05: { break; }
243 case 0x06: { break; }
244 case 0x07: { break; }
245 case 0x08: { break; }
246 case 0x09: { break; }
247 case 0x0a: { break; }
248 case 0x0b: { break; }
249 case 0x0c: { break; }
250 case 0x0d: { break; }
251 case 0x0e: { break; }
252 case 0x0f: { break; }
253 case 0x10: { break; }
254 }
255
256 key_scan_biao_zhi=0;
257 key=0;
258
259 }
260
261 void key_working(void)
262 {
263 adc_calc();
264 if(voltage<4500) key_value();
265 if(voltage>4500&&key_scan_biao_zhi==1) key_scan();
266
267 } */
268 /*----------------------------------键盘结素----------------------------------------*/
269
270
271
272
273
274
275
276
277 /*---------倒计时显示---------*/
278
279 lcdmode0(void)
280 { uchar j=0;
281 1 //显示设置界面
282 1 W_1byte(0,0,0x80);
283 1
284 1 for(j=0;j<16;j++)
285 1 {
286 2 W_1byte(0,1,number[mynew1[j]]);
287 2 }
288 1
289 1
290 1 W_1byte(0,0,0x88);
291 1 for(j=0;j<4;j++)
292 1 {
293 2 W_1byte(0,1,number[mynew3[j]]);
294 2 }
295 1
296 1
297 1 }
298
299 /*------主函数---------*/
300 void main()
301 {
302 1 CS=0;
303 1 SCLK=0;
C51 COMPILER V8.02 12864_3 09/03/2008 13:03:44 PAGE 6
304 1 SID=0;
305 1 LCD_Init();
306 1
307 1 while(1){
308 2 W_1byte(0,0,0x80);
309 2 delay(5);
310 2
311 2 W_1byte(0,1,0x31);
312 2 delay(5);
313 2
314 2 // lcdmode0();
315 2 } }
*** ERROR C249 IN LINE 315 OF 12864-3.C: 'DATA': SEGMENT TOO LARGE
C51 COMPILATION COMPLETE. 0 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -