📄 demo.lst
字号:
C51 COMPILER V7.09 DEMO 08/10/2005 00:08:22 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE DEMO
OBJECT MODULE PLACED IN demo.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE demo.c OPTIMIZE(2,SPEED) BROWSE INTVECTOR(0X8000) DEFINE(monitor51) DEBUG O
-BJECTEXTEND
line level source
1 #include <reg51.H>
2 #include <absacc.h>
3 #define LCD_WR_COM XBYTE[0x4000]
4 #define LCD_RD_STA XBYTE[0x4001]
5 #define LCD_WR_DAT XBYTE[0x4002]
6 #define LCD_RD_DAT XBYTE[0x4003]
7
8 char code cgram[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,
9 0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,
10 0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00};
11 char code string1[]={0x44,0x50,0x2d,0x35,0x31,0x48};
12 char code string2[]={0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10};//16
-个空格
13 char code string3[]={0x5a,0x4c,0x47,0x32,0x30,0x30,0x33,0x00,0x37,0x01,0x31,0x32,0x02};
14
15
16 sbit CS=P1^0;
17 sbit CLK=P1^1;
18 sbit DIO=P1^2;
19 sbit AD_OK=P3^2;
20 char KeyCode;
21 char dispbuff[8];
22 char adconvert(char channel);
23 char ReadKB();
24 void sent(unsigned char sent_buf);
25 void init_lcd(char mode);
26 void test_LCD();
27 void write_cgram();
28 void Left_loop();
29 void right_loop();
30 void printf_lcd(char *p);
31 void printf_lcdxy(char x,char y,char *p);
32 void delay(unsigned char time);
33 void display();
34 char TICK;
35 char ADresult;
36 void Timer0() interrupt 1
37 {
38 1 TMOD=0x01;
39 1 TH0=0x3c;
40 1 if(TICK==5)
41 1 {
42 2 display();
43 2 TICK=0;
44 2 ADresult=adconvert(0);
45 2 }
46 1 TICK++;
47 1 }
48 void KeyBoard() interrupt 2
49 {
50 1 KeyCode=ReadKB();
51 1 }
52 main()
53 {
C51 COMPILER V7.09 DEMO 08/10/2005 00:08:22 PAGE 2
54 1 char i;
55 1 EX1=1;
56 1 EA=1;
57 1 CS=1;
58 1 IT1=1;
59 1 init_lcd(0);
60 1 write_cgram();
61 1 test_LCD();
62 1 Left_loop();
63 1 right_loop();
64 1 TMOD=0x01;
65 1 TH0=0x3c;
66 1 TL0=0xb0;
67 1 ET0=1;
68 1 TR0=1;
69 1 TICK=0;
70 1
71 1 for (i=0;i<8;i++)
72 1 {
73 2 dispbuff[i]=1+i;
74 2
75 2 }
76 1 while(1)
77 1 {
78 2 dispbuff[0]=KeyCode/16;
79 2 dispbuff[1]=KeyCode%16;
80 2 dispbuff[6]=(ADresult/16)&0x0f;
81 2 dispbuff[7]=(ADresult%16)&0x0f;
82 2
83 2 }
84 1
85 1 }
86 char ReadKB()
87 { char kb=0,i;
88 1 CS=1;
89 1 CLK=0;
90 1 delay (50);
91 1 sent(0x15);//发送读键盘指令
92 1 delay(10);
93 1 DIO=1;
94 1 CLK=1;
95 1 delay(50);
96 1 for(i=0;i<8;i++)
97 1 {CLK=0;
98 2 kb=kb*2+(char)DIO;//读1位数据
99 2 delay(10);
100 2 CLK=1;
101 2 delay(10);
102 2 }
103 1 CS=1;
104 1 return(kb);}
105 void sent(unsigned char sent_buf)
106 {
107 1 char i;
108 1 CLK=0; /*置SPI时钟线为低*/
109 1 CS=0; /*置SPI片选线为低*/
110 1 delay (50); /*延时50us*/
111 1
112 1 for(i=0;i<8;i++) /*发送8位数据*/
113 1 {
114 2 sent_buf=sent_buf<<1; /*从数据最高位开始,将要发发送的数据位移入进位位CY*/
115 2 DIO=CY; /*数据位送数据线*/
C51 COMPILER V7.09 DEMO 08/10/2005 00:08:22 PAGE 3
116 2 CLK=1; /* 置SPI时钟线为高*/
117 2 delay (10); /*延时10us*/
118 2 CLK=0; /* 置SPI时钟线为低,发送完1位数据*/
119 2 delay (10);/*延时10us*/
120 2 }
121 1 DIO=0;
122 1 }
123 void delay(unsigned char time)
124 {
125 1 unsigned char i;
126 1 for(i=0;i<time;i++);
127 1
128 1 }
129
130 char adconvert(char channel)
131 {
132 1 char result;
133 1 char xdata *adport;
134 1 adport=0x0000+channel; //AD转换通道选择
135 1 *adport=0; // 启动转换
136 1 while(AD_OK==1); //等待转换结束
137 1 result=*adport; // 读转换结果
138 1 return result;
139 1 }
140 void display()
141 {
142 1 char i;
143 1 for(i=0;i<8;i++)
144 1 {
145 2 CS=1;
146 2 sent(0xc8+i);
147 2 sent(dispbuff[i]);
148 2 CS=1;
149 2 }
150 1 }
151 void init_lcd(char mode)
152 {
153 1 unsigned char i;
154 1 i=mode;
155 1
156 1 LCD_WR_COM=0x38; //设置为8位数据总线,16*2,5*7点阵
157 1 delay(255);
158 1
159 1 LCD_WR_COM=0x01;//清屏幕
160 1 delay(255);
161 1
162 1 LCD_WR_COM=0x06;//光标移动,显示区不移动,读写操作后AC加1
163 1 delay(255);
164 1
165 1 LCD_WR_COM=0x0c;//开显示,关光标,不闪烁
166 1 delay(255);
167 1 }
168
169
170 void test_LCD()
171 {
172 1 char i;
173 1
174 1 delay(255);
175 1 LCD_WR_COM=0x84;//从第一行第5位开始
176 1 for(i=0;i<6;i++)
177 1 {
C51 COMPILER V7.09 DEMO 08/10/2005 00:08:22 PAGE 4
178 2 delay(255);
179 2 LCD_WR_DAT=string1[i];//DP-51H
180 2 }
181 1
182 1 delay(255);
183 1 LCD_WR_COM=0xc2;//第二行第3位开始显示
184 1 for(i=0;i<13;i++)
185 1 {
186 2 delay(255);
187 2 LCD_WR_DAT=string3[i];
188 2 }
189 1 }
190
191 void Left_loop()
192 {
193 1 unsigned char i,j;
194 1
195 1 delay(255);
196 1 LCD_WR_COM=0x07;
197 1 delay(255);
198 1 LCD_WR_COM=0x8f;
199 1 delay(255);
200 1 for(i=0;i<16;i++)
201 1 {
202 2 LCD_WR_DAT=string2[i];
203 2 for(j=0;j<200;j++)
204 2 delay(255);
205 2 }
206 1 }
207 void right_loop()
208 {
209 1 unsigned char i,j;
210 1
211 1 delay(255);
212 1 LCD_WR_COM=0x05;
213 1 delay(255);
214 1 LCD_WR_COM=0x80;
215 1 delay(255);
216 1 for(i=0;i<16;i++)
217 1 {
218 2 LCD_WR_DAT=string2[i];
219 2 for(j=0;j<200;j++)
220 2 delay(255);
221 2 }
222 1 }
223 void write_cgram()
224 {
225 1 char i;
226 1
227 1 LCD_WR_COM=0x40;
228 1
229 1 for(i=0;i<24;i++)
230 1 {
231 2 delay(255);
232 2 LCD_WR_DAT=cgram[i];
233 2 }
234 1 }
235
236
237
238
239
C51 COMPILER V7.09 DEMO 08/10/2005 00:08:22 PAGE 5
240
241
242
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 863 ----
CONSTANT SIZE = 59 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 20
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 + -