📄 d_lock.lst
字号:
C51 COMPILER V7.50 D_LOCK 11/05/2007 15:59:30 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE D_LOCK
OBJECT MODULE PLACED IN d_lock.OBJ
COMPILER INVOKED BY: E:\Program Files\UV2\C51\BIN\C51.EXE d_lock.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***************************************************************\
2 |* 12864LCD显示程序 proteus7.1仿真AMPIRE128*64 *|
3 |* Copyright (c) 2007山师.传播 */
4 /* All rights reserved. */
5 /*赵彦彬 *|
6 |* *|
7 |*
8 \***************************************************************/
9
10
11
12 #include"w_word.h"
13
14
15
16 /**********************************************\
17 |* 写命令子程序
18 使用变量:
19 入口参数:NULL
20 返回参数:NULL
21 调用函数:NULL
22 实现功能 :
23 \**********************************************/
24 void write_cmd(uchar cmd) //写命令子程序
25 { RW=0;
26 1 DI=0; //DI=0 写命令
27 1 E=1;
28 1 P1=cmd;
29 1 E=0; //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR
30 1 }
31
32 /**********************************************\
33 |* 写数据子程序 *|
34 使用变量:
35 入口参数:NULL
36 返回参数:NULL
37 调用函数:NULL
38 实现功能 : *|
39 \**********************************************/
40 void write_dat(uchar dat) //写数据子程序
41 { RW=0;
42 1 DI=1; //DI=1 写数据
43 1 E=1;
44 1 P1=dat;
45 1 E=0; //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR
46 1 }
47
48 /**********************************************\
49 |* 设置显示起始行 X地址和Y地址 *|
50 | 使用变量:
51 入口参数:st_line 起始行x_ad起始页y_ad起始列
52 返回参数:NULL
53 调用函数:NULL
54 实现功能 :
55 \**********************************************/
C51 COMPILER V7.50 D_LOCK 11/05/2007 15:59:30 PAGE 2
56
57 void set_dis(uchar st_line,uchar x_ad,uchar y_ad) //设置显示起始行 X地址和Y地址
58 {
59 1 //write_cmd(st_line+0xc0); //+0xc0是参照设置起始行的格式
60 1 write_cmd(x_ad+0xb8); //+0xb8是参照设置页地址的格式
61 1 if(y_ad<64) { CS1=0;CS2=1;write_cmd(y_ad+0x40);} //Y_add地址实际上只有0~63 采用CS1和CS2选左右半屏
62 1 else { CS1=1;CS2=0;write_cmd(y_ad);} //选第一片时,+64第二片为y_add-64+64
63 1 }
*** WARNING C280 IN LINE 57 OF D_LOCK.C: 'st_line': unreferenced local variable
64
65
66
67 /***********************************************\
68 |* 显示子程序 *|
69 使用变量:i,j,k
70 入口参数:st_line 起始行x_ad起始页y_ad起始列
71 buf数据指针count显示字数
72 返回参数:NULL
73 调用函数:set_dis(),write_dat()
74 write_cmd
75 实现功能 :
76 \***********************************************/
77 void write_word(uchar st_line,uchar x_a,uchar y_a,uchar *buf,uchar count) //写入汉字
78 { uint i,j,k=1;
79 1 set_dis(st_line, x_a,y_a);
80 1 for(j=0;j<count;j++) //显示的字数
81 1 { set_dis(st_line,x_a,y_a);
82 2 for(i=0;i<16;i++)
83 2 write_dat(*(buf+i+j*32)) ; //字的下半部分,x_add+1
84 2 set_dis(st_line,x_a+1,y_a);
85 2 for(i=16;i<32;i++)
86 2 write_dat(*(buf+i+j*32));
87 2 set_dis(st_line,x_a,y_a=y_a+16);
88 2
89 2 if(y_a==128) //一行的字数超过8 y_add>128时换行
90 2 { //为什么每次换行第一列子的上半部分出现错误?
91 3
92 3 x_a=2*k;
93 3
94 3 y_a=0;
95 3
96 3 set_dis(st_line,x_a,y_a);
97 3 set_dis(st_line,x_a,y_a);
98 3 k++;
99 3 }
100 2 }
101 1 write_cmd(0x3f);
102 1 CS1=CS2=1;
103 1 }
104 /****************************************/
105 /* 使用变量:j,k
106 入口参数:st_line ,x_a,y_a,(x_end终止行y_enda终止列
107 返回参数:NULL
108 调用函数:set_dis()
109 write_dat( )write_cmd()
110 实现功能:
111 /***************************************/
112 void clrdis(uchar st_line,uchar x_a,uchar y_a,uchar count) //写入汉字
113 { uint i,j,k=1;
114 1
115 1 set_dis(st_line, x_a,y_a);
116 1 set_dis(st_line, x_a,y_a);//////////////////111111111111111111
C51 COMPILER V7.50 D_LOCK 11/05/2007 15:59:30 PAGE 3
117 1 for(j=0;j<count;j++) //显示的字数
118 1 { //set_dis(st_line,x_ad,y_ad);//////////////1111111111111111111111111111
119 2 for(i=0;i<16;i++)
120 2 write_dat(0) ; //字的下半部分,x_add+1
121 2 set_dis(st_line,x_a+1,y_a);
122 2 for(i=16;i<32;i++)
123 2 write_dat(0);
124 2
125 2 set_dis(st_line,x_a,y_a=y_a+16);
126 2
127 2 if(y_a==128) //一行的字数超过8 y_add>128时换行
128 2 { //为什么每次换行第一列子的上半部分出现错误?
129 3
130 3 x_a=2*k;
131 3
132 3 y_a=0;
133 3
134 3 set_dis(st_line,x_a,y_a);
135 3 set_dis(st_line,x_a,y_a);
136 3 k++;
137 3 }
138 2 }
139 1
140 1
141 1
142 1 }
143
144
145 /****************************************/
146 /* 去抖动延时
147 使用变量:i
148 入口参数:NULL
149 返回参数:NULL
150 调用函数:NULL
151 实现功能:
152 /***************************************/
153 void delay(void)
154 {
155 1 uchar i;
156 1
157 1 for (i=300;i>0;i--); //0.5ms
158 1
159 1 }
160
161 /* 键扫描函数 */
162 uchar keyscan(void)
163 { uchar i=1;
164 1 uchar scancode,tmpcode;
165 1 while(P2!=0xf0)
166 1 {P2=0xff;
167 2 P2=0xf0;
168 2 }// 发全0行扫描码
169 1 while(i)
170 1 //?????????? 延时去抖动
171 1 {
172 2
173 2 if ((P2&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响
174 2 { TR1=1;
175 3 TR0=1;
176 3 i=0;
177 3 delay();
178 3 scancode = 0xfe;
C51 COMPILER V7.50 D_LOCK 11/05/2007 15:59:30 PAGE 4
179 3 while((scancode&0x10)!=0) // 逐行扫描
180 3 {
181 4 P2 = scancode; // 输出行扫描码
182 4 if ((P2&0xf0)!=0xf0) // 本行有键按下
183 4 {
184 5 tmpcode = (P2&0xf0)|0x0f;
185 5
186 5 /* 返回特征字节码,为1的位即对应于行和列 */
187 5 return((~scancode)+(~tmpcode));
188 5 scancode=0x00;
189 5 }
190 4 else scancode = (scancode<<1)|0x01; // 行扫描码左移一位
191 4 }
192 3 }
193 2
194 2 }
195 1
196 1 }
197
198 /****************************************/
199 /* 音频定时0
200 使用变量:music
201 入口参数:NULL
202 返回参数:NULL
203 调用函数:NULL
204 实现功能:
205 /***************************************/
206
207 void time0_int() interrupt 1
208 {
209 1
210 1 TH0=0XFD;
211 1 TL0=0X34;
212 1 music=~music;
213 1 }
214 /****************************************/
215 /* 音响时长定时1
216 使用变量:time_500ms
217 入口参数:NULL
218 返回参数:NULL
219 调用函数:NULL
220 实现功能:
221 /***************************************/
222 void time1_int() interrupt 3
223 {TH1=0X3C;
224 1 TL1=0XB0;
225 1 time_500ms++;
226 1 if(time_500ms==30)
227 1 { TR1=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -