📄 text1.lst
字号:
C51 COMPILER V7.20 TEXT1 08/23/2007 05:01:56 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include<intrins.h>
3 #include<ziku.h>
4 #include<string.h>
5 #include<math.h>
6 /************************/
7
8 #define uchar unsigned char
9 #define uint unsigned int
10
11 /********总线以及地址线的定义************/
12 #define disp_on_12864 0x3f
13 #define disp_off_12864 0x3e
14 #define col_12864 0x40
15 #define row_12864 0xb8
16 #define start_line_12864 0xc0
17
18 #define lcd_bus_12864 P0
19 uchar x,z;
20 uchar y;
21
22 sbit di_12864 =P2^0;
23 sbit rw_12864 =P2^1;
24 sbit enable_12864 =P2^2;
25 sbit cs1_12864=P2^6;
26 sbit cs2_12864 =P2^7;
27
28
29
30
31
32 /************函数声明******************/
33 void clear_sreen_12864 (); //清屏(即清除显存)
34
35 void delay_12864 (); //延时1ms
36
37 void delay(void); //延时
38
39 void init_lcd_12864 (); //LCD初始化
40
41 void write_command_12864 (unsigned char cmdcode); //写指令
42
43 void write_data_12864 (unsigned char dispdata); //写数据
44
45 void rddata(void) ; //读数据
46
47
48
49 /**********清除显屏(清除显示内存)***********/
50 void clear_screen_12864()
51 {
52 1 unsigned char i,j;
53 1 cs1_12864 =0;cs2_12864=1; /**清除左屏**/
54 1 for(i=0;i<8;i++)
55 1 {
C51 COMPILER V7.20 TEXT1 08/23/2007 05:01:56 PAGE 2
56 2 write_command_12864 (row_12864 +i);
57 2 write_command_12864 (col_12864 +0); //列地址0
58 2 for(j=0;j<64;j++)
59 2 write_data_12864 (0x00); //每做一次写操作,列地址加1
60 2 }
61 1 cs1_12864 =1;cs2_12864 =0; /**清除右屏**/
62 1 for(i=0;i<8;i++)
63 1 {
64 2 write_command_12864(row_12864 +i);
65 2 write_command_12864(col_12864+0); //列地址0
66 2 for(j=0;j<64;j++)
67 2 write_data_12864(0x00); //每做一次写操作,列地址加1
68 2 }
69 1 }
70
71 /***********延时1ms**************/
72 void delay_12864()
73 { unsigned int dy=500;
74 1 while(--dy);
75 1 }
76
77 /*************初始化LCD屏***************/
78 void init_lcd_12864()
79 {
80 1 clear_screen_12864();
81 1 cs1_12864=1;cs2_12864=0; //右屏
82 1 delay_12864();
83 1 write_command_12864(disp_off_12864);
84 1 write_command_12864(start_line_12864);
85 1 write_command_12864(disp_on_12864);
86 1 cs1_12864=0;cs2_12864=1; //左屏
87 1 delay_12864();
88 1 write_command_12864(disp_off_12864);
89 1 write_command_12864(start_line_12864);
90 1 write_command_12864(disp_on_12864);
91 1 }
92
93 /*******写指令到LCD*********/
94 void write_command_12864 (unsigned char cmdcode)
95 {
96 1 //lcd_busy();
97 1 di_12864 =0;
98 1 rw_12864 =0;
99 1 lcd_bus_12864 =cmdcode; //输入控制命令(display on/off,display startline,row,col)
100 1 enable_12864 =1;
101 1 _nop_();
102 1 enable_12864 =0;
103 1 }
104
105 /***********写显示的数据到LCD***********/
106 void write_data_12864 (unsigned char dispdata)
107 {
108 1 //lcd_busy();
109 1 di_12864 =1;
110 1 rw_12864 =0;
111 1 lcd_bus_12864 =dispdata;
112 1 enable_12864 =1;
113 1 _nop_();
114 1 enable_12864 =0;
115 1 }
116
117 /*****位置 X 表示行, Y表示列 , Z 表示要亮的点 *********/
C51 COMPILER V7.20 TEXT1 08/23/2007 05:01:56 PAGE 3
118 void write(x,y,uchar c)
119 {
120 1
121 1 z=c;
122 1 cs1_12864=0;
123 1 cs2_12864=1; //选择左屏幕
124 1 if (y>64)
125 1 {
126 2 y=y-64 ;
127 2 cs1_12864=1;
128 2 cs2_12864=0; //选择右屏幕
129 2 }
130 1 write_command_12864(row_12864+x-1); //8大行位置 X 1到 8
131 1 write_command_12864(col_12864+y-1); //128 列位置 y 1 到 128
132 1 write_data_12864(z);
133 1
134 1 }
135
136 uchar getkey()
137
138 {
139 1 unsigned char keycode=0xff,temp,i;
140 1 P1=0x0f;
141 1 temp=P1&0x0f;
142 1 if(temp!=0x0f) //判是否有键按下
143 1 {
144 2 // beep=0;
145 2 P1=0xef; //自第0行开始扫描输出,自列读入键值
146 2 for(i=0;i<4;i++)
147 2 {
148 3 temp=P1&0x0f;
149 3 if(temp==0x07) //判断第0列是否有键按下
150 3 {
151 4 keycode=i*4+0;
152 4 break;
153 4 }
154 3 else if(temp==0x0b)//判断第1列是否有键按下
155 3 {
156 4 keycode=i*4+1;
157 4 break;
158 4 }
159 3 else if(temp==0x0d)//判断第2列是否有键按下
160 3 {
161 4 keycode=i*4+2;
162 4 break;
163 4 }
164 3 else if(temp==0x0e)//判断第3列是否有键按下
165 3 {
166 4 keycode=i*4+3;
167 4 break;
168 4 }
169 3 P1=(P1<<1)|0x1;
170 3 }
171 2
172 2 while((P1&0x0f)!=0x0f) //等待释放
173 2 {
174 3 P2=0x0f;
175 3 }
176 2 // beep=1;
177 2
178 2 }
179 1 return keycode;
C51 COMPILER V7.20 TEXT1 08/23/2007 05:01:56 PAGE 4
180 1 }
181
182
183
184
185 void rewrite(uchar c)
186 {
187 1
188 1
189 1 write(x,y,c);
190 1 y++;
191 1 if (y==129) {y=1;x++;}
192 1 if (x==9) { x=1;y=1;}
193 1
194 1 }
195
196
197
198 /****** 显示 dl*16(dl是宽,高度为16)的字 l是宽 h是行 dl字长********/
199 void xianshi(uchar s[],uchar l, uchar h)
200 {
201 1 uchar i,j,k;
202 1
203 1
204 1 k=y;
205 1
206 1 for(j=0;j<=h-1;j++)
207 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -