📄 lcd_plug_12864j.lst
字号:
C51 COMPILER V8.15 LCD_PLUG_12864J 03/17/2009 18:11:02 PAGE 1
C51 COMPILER V8.15, COMPILATION OF MODULE LCD_PLUG_12864J
OBJECT MODULE PLACED IN LCD_plug_12864j.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE LCD_plug_12864j.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*=====================================================================*\
2 | |
3 |名称:LCD功能模块集 |
4 | |
5 |工作模块:XYadr() 位置输入函数 |
6 | wcode() 工作状态输入函数 |
7 | wdata() 数据输入函数 |
8 | read() 数据读出函数 |
9 | LCDc() 清屏函数 |
10 | Display() 显示开/关控制函数 |
11 | startline() 开始行设置函数 |
12 | reset() 复位函数 |
13 | time() 延时函数 |
14 | |
15 |调用函数:_nop_ () 空操作函数 |
16 | |
17 \*=====================================================================*/
18
19 #include <AT89X52.H>
20
21 sbit E = P2^0; //时钟端(从高变低时数据输入)
22 sbit RW = P2^7; //数据读(H)/写(L)选择
23 sbit RS = P2^6; //数据(H)/状态(L)寄存器选择
24 sbit busy = P0^7; //lcd busy bit
25
26 #define LOW 0
27 #define HIGH 1
28 #define comm 0
29 #define dat 1
30
31 #define ystart 0x80
32 #define xustart 0x80
33 #define xdstart 0x88
34
35 //初始化指令
36 #define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H
37 #define AC_INIT 0x02 //将AC设置为00H。且游标移到原点位置
38 #define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
39 #define FUN_MODE 0x30 //工作模式:8位基本指令集
40 #define EXT_MODE 0x36 //工作模式:8位扩展指令集
41 #define DISPLAY_ON 0x0f //显示开,显示游标,且游标位置反白
42 #define DISPLAY_OFF 0x08 //显示关
43 #define CURSE_DIR 0x14 //游标向右移动:AC=AC+1
44 #define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH
45 #define SET_DD_AC 0x80
46
47 void wr_lcd(bit dat_comm,unsigned char content);
48 void chk_busy (void);
49 //void delay_us(unsigned char i);
50 //void delay_ms(unsigned char i);
51 void _nop_ (void);
52
53 void init_lcd (void)
54 {
55 1 wr_lcd(comm,0x30); /*30---基本指令动作*/
C51 COMPILER V8.15 LCD_PLUG_12864J 03/17/2009 18:11:02 PAGE 2
56 1 wr_lcd(comm,0x01); /*清屏,地址指针指向00H*/
57 1 wr_lcd(comm,0x0c); /*开显示,关游标*/
58 1 wr_lcd(comm,0x06); /*光标的移动方向*/
59 1 }
60
61 void wr_lcd(bit dat_comm,unsigned char content) //工作状态(1)/数据(0)输入函数
62 {
63 1 chk_busy ();
64 1 if(dat_comm)
65 1 {
66 2 RS = 1; //data
67 2 RW = 0; //write
68 2 }
69 1 else
70 1 {
71 2 RS = 0; //command
72 2 RW = 0; //write
73 2 }
74 1 P0=content; //output data or comm
75 1 E=0;
76 1 _nop_();
77 1 E=1;
78 1 _nop_();
79 1 E=0;
80 1 }
81
82 unsigned char rd_lcd(void) //数据读出函数
83 {
84 1 unsigned char a;
85 1 chk_busy ();
86 1 RS = 1;
87 1 RW = 1; //read
88 1 P1 = 0xFF;
89 1 E = 1;
90 1 a = P0;
91 1 E = 0;
92 1 RW = 0; //write
93 1 return(a);
94 1 }
95
96 void XYadr(unsigned char x,unsigned char y)
97 {
98 1 if(y > 31)
99 1 {
100 2 x = x + xdstart;
101 2 y = y - 32 + ystart;
102 2 }
103 1 else
104 1 {
105 2 x = x + xustart;
106 2 y = y + ystart;
107 2 }
108 1 wr_lcd(comm,y);
109 1 wr_lcd(comm,x);
110 1 }
111
112 //使用前先用 wr_lcd(comm,0x02);//对游标地址复位
113 void cursor_disp(bit open, unsigned char mode) //游标反显,显示开关移动控制函数
114 {
115 1 if(open)
116 1 {
117 2 switch (mode)
C51 COMPILER V8.15 LCD_PLUG_12864J 03/17/2009 18:11:02 PAGE 3
118 2 {
119 3 case 0:
120 3 wr_lcd(comm,0x0e); /*开游标,关反显,游标不移*/
121 3 break;
122 3 case 1:
123 3 wr_lcd(comm,0x0e); /*开游标,关反显,游标左移*/
124 3 wr_lcd(comm,0x10);
125 3 break;
126 3 case 2:
127 3 wr_lcd(comm,0x0e); /*开游标,关反显,游标右移*/
128 3 wr_lcd(comm,0x14);
129 3 break;
130 3 case 3:
131 3 wr_lcd(comm,0x0d); /*关游标,开反显,反显不移*/
132 3 break;
133 3 case 4:
134 3 wr_lcd(comm,0x0d); /*关游标,开反显,反显左移*/
135 3 wr_lcd(comm,0x10);
136 3 break;
137 3 case 5:
138 3 wr_lcd(comm,0x0d); /*关游标,开反显,反显右移*/
139 3 wr_lcd(comm,0x14);
140 3 break;
141 3 case 6:
142 3 wr_lcd(comm,0x0f); /*开游标,开反显,不移*/
143 3 break;
144 3 case 7:
145 3 wr_lcd(comm,0x0f); /*开游标,开反显,一起左移*/
146 3 wr_lcd(comm,0x10);
147 3 break;
148 3 case 8:
149 3 wr_lcd(comm,0x0f); /*开游标,开反显,一起右移*/
150 3 wr_lcd(comm,0x14);
151 3 break;
152 3 }
153 2 }
154 1 else
155 1 {
156 2 wr_lcd(comm,0x0c); /*关游标,关反显*/
157 2 }
158 1 }
159
160 void LCDc(unsigned char a) //清屏函数
161 {
162 1 unsigned char x,y;
163 1 wr_lcd(comm,0x30);
164 1 wr_lcd(comm,0x01); /*清屏,地址指针指向00H*/
165 1 wr_lcd(comm,0x34);
166 1 for(y=0;y<32;y++)
167 1 {
168 2 wr_lcd(comm,y + ystart);
169 2 wr_lcd(comm,xustart);
170 2 for(x=0;x<32;x++)
171 2 {
172 3 wr_lcd(dat,a);
173 3 }
174 2 }
175 1 wr_lcd(comm,0x30);
176 1 }
177
178 void chk_busy(void)
179 {
C51 COMPILER V8.15 LCD_PLUG_12864J 03/17/2009 18:11:02 PAGE 4
180 1 P0 = 0xff;
181 1 RS = 0;
182 1 RW = 1;
183 1 E = 1;
184 1 while(busy == 1);
185 1 E = 0;
186 1 }
187 /*
188 void delay_us(unsigned char i)
189 {
190 while(i!=0)i--;
191 }
192
193 void delay_ms(unsigned char ms)
194 {
195 unsigned char i,j;
196 for(i=0;i<ms;i++)
197 for(j=0;j<15;j++)
198 _nop_();
199 }*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 394 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -