📄 zhkcsj.lst
字号:
C51 COMPILER V7.06 ZHKCSJ 01/09/2008 10:38:45 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ZHKCSJ
OBJECT MODULE PLACED IN zhkcsj.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE zhkcsj.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include"at89x52.h"
2 #include<intrins.h>
3 #include<stdio.h>
4 #include<zi.h>
5
6 #define uchar unsigned char
7 #define uint unsigned int
8 #define disp_off 0x3e
9 #define disp_on 0x3f
10 #define disp_x 0xb8
11 #define disp_z 0xc0
12 #define disp_y 0x40
13 #define comm 0
14 #define dat 1
15 #define data_ora P0
16
17 sbit LED_CLK=P1^0; //LED时钟线
18 sbit LED_DAT=P1^1; //LED数据线
19
20 sbit di =P3^7; //Data or Instrument Select,H:写数据,L:写指令
21 sbit rw =P3^6; //Write or Read,H:read,L:write
22 sbit e =P1^2; //读写使能
23 sbit cs1=P1^4; //cs1=H,选择左半屏
24 sbit cs2=P1^3; //cs2=H,选择右半屏
25 sbit rst=P1^5; //Lcm reset,低有效
26
27 sbit data0=P2^0;
28 sbit data1=P2^1;
29 sbit data2=P2^2;
30 sbit data3=P2^3;
31 sbit mode0=P2^4;
32 sbit mode1=P2^5;
33 sbit start=P2^6;
34
35 void init_lcd(void);
36 void disps(void);
37 void disp_f(void);
38 void disp_m(void);
39 void disp_e(void);
40 void disp_pl(void);
41 void disp_ms(void);
42 void wr_lcd (uchar dat_comm,uchar content);
43 void lat_disp (uchar data1,uchar data2);
44 void chn_disp (uchar x,uchar y,uchar xl,uchar yl,uchar row_xl,uchar row_yl,uchar code *chn);
45
46 void led_display(uchar i);
47
48 const uchar code LED_FONT[11]={ //
49 0xFC, //0
50 0x60, //1
51 0xDA, //2
52 0xF2, //3
53 0x66, //4
54 0xB6, //5
55 0xBE, //6
C51 COMPILER V7.06 ZHKCSJ 01/09/2008 10:38:45 PAGE 2
56 0xE0, //7
57 0xFE, //8
58 0xF6, //9
59 0x00, //不显示
60 };
61
62 uchar set_freq;
63 uchar set_mode;
64 uint freq;
65 uchar mode;
66 uchar buchang;
67
68 void delayl (uint ms)
69 {
70 1 uint i,j;
71 1 for(i=0;i<ms;i++)
72 1 for(j=0;j<100;j++)
73 1 ;
74 1 }
75
76 set0()interrupt 0
77 {
78 1 uchar i;
79 1 delayl(10);
80 1 if(set_freq==1){
81 2 if((P2&0x0f)==0x00){led_display(0);freq=freq*10;}
82 2 if((P2&0x0f)==0x01){led_display(1);freq=freq*10+1;}
83 2 if((P2&0x0f)==0x02){led_display(2);freq=freq*10+2;}
84 2 if((P2&0x0f)==0x03){led_display(3);freq=freq*10+3;}
85 2 if((P2&0x0f)==0x04){led_display(4);freq=freq*10+4;}
86 2 if((P2&0x0f)==0x05){led_display(5);freq=freq*10+5;}
87 2 if((P2&0x0f)==0x06){led_display(6);freq=freq*10+6;}
88 2 if((P2&0x0f)==0x07){led_display(7);freq=freq*10+7;}
89 2 if((P2&0x0f)==0x08){led_display(8);freq=freq*10+8;}
90 2 if((P2&0x0f)==0x09){led_display(9);freq=freq*10+9;}
91 2
92 2 }
93 1 if(set_mode==1){
94 2 if((P2&0x0f)==0x00){led_display(0);mode=0;}
95 2 if((P2&0x0f)==0x01){led_display(1);mode=1;}
96 2 if((P2&0x0f)==0x02){led_display(2);mode=2;}
97 2 // mode=(P2&0x0f); ?????????????
98 2 }
99 1 if((P2&0x0f)==0x0a)
100 1 {
101 2 freq=0;
102 2 for(i=0;i<6;i++)led_display(0);
103 2 set_freq=1;set_mode=0;
104 2
105 2 }
106 1 if((P2&0x0f)==0x0b)
107 1 {
108 2 mode=0;
109 2 for(i=0;i<6;i++)led_display(0);
110 2 set_mode=1;set_freq=0;
111 2 }
112 1 if((P2&0x0f)==0x0c)
113 1 {
114 2
115 2 buchang=freq/8;
116 2 P0=freq/8;
117 2 if((mode&0x01)==0)mode0=0;
C51 COMPILER V7.06 ZHKCSJ 01/09/2008 10:38:45 PAGE 3
118 2 else {mode0=1;}
119 2 if((mode&0x02)==0)mode1=0;
120 2 else {mode1=1;}
121 2 start=1;
122 2 delayl(55);
123 2 start=0;
124 2 set_freq=0;
125 2 set_mode=0;
126 2
127 2 }
128 1
129 1
130 1
131 1 }
132 main() /*主程式*/
133 {
134 1
135 1 EA=1; /*CPU开中断*/
136 1 IT0=1; /*外部中断1下降沿触发方式*/
137 1 EX0=1; /*外部中断1的中断允许位置1*/
138 1 freq=8;
139 1 mode=0;
140 1 start=0;
141 1 led_display(0);
142 1 led_display(0);
143 1 led_display(0);
144 1 led_display(0);
145 1 led_display(0);
146 1 led_display(8);
147 1 init_lcd();
148 1 lat_disp(0x00,0x00);
149 1 disps();
150 1 P0=freq/8;
151 1 mode0=0;
152 1 mode1=0;
153 1 start=1;
154 1 delayl(5);
155 1 start=0;
156 1 while(1){
157 2 if(set_freq==1)disp_f();
158 2 if(set_mode==1)disp_m();
159 2 if((set_freq==0)&&(set_mode==0)){disp_e();disp_pl();disp_ms();}
160 2 delayl(4);
161 2 }
162 1 }
163 /*------------写数据或命令到LCD--------------*/
164 void wr_lcd (uchar dat_comm,uchar content)
165 {
166 1 //chk_busy ();
167 1 di=dat_comm;
168 1 rw=0;
169 1 data_ora=content;
170 1 e=1;
171 1 ;
172 1 e=0;
173 1 }
174 /*------------------初始化-----------------*/
175 void init_lcd (void)
176 {
177 1 rst=0;
178 1 delayl(5);
179 1 rst=1;
C51 COMPILER V7.06 ZHKCSJ 01/09/2008 10:38:45 PAGE 4
180 1 cs1=1;cs2=1;
181 1 wr_lcd (comm,disp_off);
182 1 wr_lcd (comm,disp_on);
183 1 }
184 /*---指定位置(x,y)显示row_xl行(每行row_yl个)汉字(大小8xl*yl)---*/
185 void chn_disp (uchar x,uchar y,uchar xl,uchar yl,uchar row_xl,uchar row_yl,uchar code *chn)
186 {
187 1 uchar i,j,k,l,a;
188 1 wr_lcd (comm,disp_on);
189 1 for(l=0;l<row_xl;l++)
190 1 {
191 2 for(k=0;k<row_yl;k++)
192 2 {
193 3 for(j=0;j<xl;j++)
194 3 {
195 4 wr_lcd (comm,disp_x+x+l*xl+j);
196 4 wr_lcd (comm,disp_z);
197 4 wr_lcd (comm,disp_y+y+k*yl);
198 4 a=l*xl*yl*row_yl+k*xl*yl+j*yl;
199 4 for(i=0;i<yl;i++)
200 4 wr_lcd (dat,chn[a+i]);
201 4 }
202 3 }
203 2 }
204 1 }
205
206 /*--------------写点阵------------------*/
207 void lat_disp (uchar data1,uchar data2)
208 {
209 1 uchar i,j;
210 1 cs1=1;cs2=1;
211 1 wr_lcd (comm,disp_on);
212 1 for(j=0;j<8;j++)
213 1 {
214 2 wr_lcd (comm,disp_x+j);
215 2 wr_lcd (comm,disp_z);
216 2 wr_lcd (comm,disp_y);
217 2 for(i=0;i<32;i++)
218 2 {
219 3 wr_lcd (dat,data1);
220 3 wr_lcd (dat,data2);
221 3 }
222 2 }
223 1 }
224 void disps()
225 {
226 1
227 1 lat_disp(0x00,0x00);
228 1 cs1=0;cs2=1;
229 1 chn_disp(0,2,2,8,1,3,kaishia);
230 1 chn_disp(0,31,2,16,1,2,kaishib);
231 1 }
232 void disp_f()
233 {
234 1
235 1 cs1=0;cs2=1;
236 1 chn_disp(2,0,2,16,1,4,szpl);
237 1 chn_disp(4,0,2,16,1,2,pl);
238 1 }
239 void disp_m()
240 {
241 1
C51 COMPILER V7.06 ZHKCSJ 01/09/2008 10:38:45 PAGE 5
242 1 cs1=0;cs2=1;
243 1 chn_disp(2,0,2,16,1,4,szms);
244 1 chn_disp(6,0,2,16,1,2,ms);
245 1 }
246 void disp_e()
247 {
248 1
249 1 cs1=0;cs2=1;
250 1 chn_disp(2,0,2,16,1,4,wcsz);
251 1 }
252 void disp_pl()
253 {
254 1 uchar i;
255 1 uchar j=0;
256 1 uint midpinlv;
257 1 cs1=1;cs2=0;
258 1 midpinlv=freq;
259 1 for(i=0;i<6;i++)
260 1 {
261 2 j=midpinlv%10;
262 2 midpinlv=midpinlv/10;
263 2 chn_disp(4,40-8*i,2,8,1,1,shuzi+j*16);
264 2 }
265 1 }
266 void disp_ms()
267 {
268 1
269 1 if(mode==0)chn_disp(6,0,2,16,1,3,sin);
270 1 if(mode==1)chn_disp(6,0,2,16,1,2,pulse);
271 1 if(mode==2)chn_disp(6,0,2,16,1,3,angle);
272 1 }
273 void led_display(uchar i)
274 {
275 1 uchar j,mask;
276 1 mask=0x01;
277 1 for(j=0;j<8;j++){
278 2 LED_CLK=0;
279 2 LED_DAT=( (LED_FONT[i]) & mask);
280 2 mask<<=1;
281 2 LED_CLK=1; //上升沿移位
282 2 }
283 1 }
284
285
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1396 ----
CONSTANT SIZE = 1051 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 15
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -