📄 lcdinit.lst
字号:
C51 COMPILER V8.02 LCDINIT 03/14/2007 19:48:15 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCDINIT
OBJECT MODULE PLACED IN lcdinit.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcdinit.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "reg51.h"
2 #include "order.h"
3 #include "lcdinit.h"
4 char code int2charLCD[]={0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,
-0xe6,0xe7,0xe8,0xe9};
5 /*读状态*/
6
7 void display_LCD_number(char number,char i) //显示一个数字
8 {
9 1 unsigned char x;
10 1 unsigned char ch;
11 1 x=number;
12 1 ch=i;
13 1
14 1 ch++;
15 1
16 1 set_xy(ch,4);
17 1 write_one(int2charLCD[2*x],INC_WR);
18 1
19 1 set_xy(ch,5);
20 1 write_one(int2charLCD[2*x+1],INC_WR);
21 1
22 1 }
23
24
25
26
27
28 uchar read_state(){
29 1 uchar temp;
30 1 P2 = 0xff;
31 1 cd = 1;
32 1 rd = 0;
33 1 temp = P2;
34 1 rd = 1;
35 1 return(temp);
36 1 }
37
38 /*STA0指令读写状态,STA1数据读写状态 判断函数*/
39 void lcd_enable(){
40 1 uchar i;
41 1 for(i = 10; i > 0; i--)
42 1 if((read_state() & 0x03) == 0x03)
43 1 break;
44 1 if(i==0)error0=1;/*若i==0,说明错误*/
45 1 //else error0=0;
46 1 }
47
48 /*STA2数据自动读状态 判断函数*/
49 void atrd_enable(){
50 1 uchar i;
51 1 for(i = 10; i > 0; i--)
52 1 if((read_state() & 0x04) == 0x04)
53 1 break;
54 1 if(i==0)error1=1;/*若i==0,说明错误*/
C51 COMPILER V8.02 LCDINIT 03/14/2007 19:48:15 PAGE 2
55 1 //else error1=0;
56 1 }
57
58 /*STA3数据自动写状态 判断函数*/
59 void atwr_enable(){
60 1 uchar i;
61 1 for(i = 10; i > 0; i--)
62 1 if((read_state() & 0x08) == 0x08)
63 1 break;
64 1 if(i==0)error2=1;/*若i==0,说明错误*/
65 1 //else error2=0;
66 1 }
67 /*写无参数函数*/
68
69
70 void write_cmd0(uchar cmd){
71 1 lcd_enable();
72 1 cd=1;
73 1 P2=cmd;
74 1 wr=0;
75 1 wr=1;
76 1 }
77
78 /*写单参数函数*/
79 void write_cmd1(uchar data1, uchar cmd){
80 1 lcd_enable();
81 1 cd=0;
82 1 P2=data1;
83 1 wr=0;
84 1 wr=1;
85 1 lcd_enable();
86 1 cd=1;
87 1 P2=cmd;
88 1 wr=0;
89 1 wr=1;
90 1 }
91
92 /*写双参数函数*/
93 void write_cmd2(uchar data1, uchar data2, uchar cmd){
94 1 lcd_enable();
95 1 cd=0;
96 1 P2=data1;
97 1 wr=0;
98 1 wr=1;
99 1 lcd_enable();
100 1 cd=0;
101 1 P2=data2;
102 1 wr=0;
103 1 wr=1;
104 1 lcd_enable();
105 1 cd=1;
106 1 P2=cmd;
107 1 wr=0;
108 1 wr=1;
109 1 }
110
111 /*写数据函数*/
112 void write_data(uchar data0){
113 1 lcd_enable();
114 1 cd=1;
115 1 P2=data0;
116 1 wr=0;
C51 COMPILER V8.02 LCDINIT 03/14/2007 19:48:15 PAGE 3
117 1 wr=1;
118 1 }
119
120 /*读数据函数*/
121 uchar read_data(){
122 1 char temp;
123 1 lcd_enable();
124 1 cd = 0;
125 1 P2 = 0xff;
126 1 rd = 0;
127 1 temp = P2;
128 1 rd = 1;
129 1 return(temp); /*若返回0,可能错误*/
130 1 }
131
132 /*自动写开始*/
133 void auto_write(){
134 1 write_cmd0(AUT_WR);
135 1 }
136
137 /*自动读开始*/
138 void auto_read(){
139 1 write_cmd0(AUT_RD);
140 1 }
141
142 /*自动写结束*/
143 void atwr_stop(){
144 1 write_cmd0(AUT_WO);
145 1 }
146
147 /*自动读结束*/
148 void atrd_stop(){
149 1 write_cmd0(AUT_RO);
150 1 }
151
152 /*数据一次写函数*/
153 void write_one(uchar data1, char way){
154 1 atwr_enable();
155 1 auto_write();
156 1 write_cmd1(data1,way);
157 1 atwr_stop();
158 1 }
159
160 /*数据一次读函数*/
161 uchar read_one(char way){
162 1 uchar temp;
163 1 atrd_enable();
164 1 auto_read();
165 1 write_cmd0(way);
166 1 temp = read_data();
167 1 atrd_stop();
168 1 return(temp);
169 1 }
170
171 /*设置当前显示位置函数x,y从0开始表示单位为字符*/
172 void set_xy(uchar x, uchar y){
173 1 int temp;
174 1 temp = y * LCD_CHAR + x;
175 1 write_cmd2(temp&0xff,temp/0xff,ADR_POS);
176 1 }
177
178 void set_adr(uchar D1, uchar D2){
C51 COMPILER V8.02 LCDINIT 03/14/2007 19:48:15 PAGE 4
179 1 write_cmd2(D1,D2,ADR_POS);
180 1 }
181
182 /*设置光标指针 x,y从0开始*/
183 void set_cur(char x, char y){
184 1 write_cmd2(x,y,CUR_POS);
185 1 }
186
187 /*CGRAM偏置地址设置函数*/
188 void set_cgram(){
189 1 write_cmd2(0x01,0x00,CGR_POS);//0000,1100,0000,0000 0C00
190 1 }
191
192 /*液晶初始化函数(文本区首地址D1,文本区首地址D2, 文本区宽度, 图形区首地址D1, 图形区首地址D2, 图形区宽度,
- 光标形状, 显示方式, 显示开关)*/
193 void lcd_init(uchar txtstpd1, uchar txtstpd2, uchar txtwid, uchar grhstpd1, uchar grhstpd2, uchar grhwid,
-uchar cur, uchar mod, uchar sw){
194 1 write_cmd2(txtstpd1,txtstpd2,TXT_STP); /*文本区首地址*/
195 1 write_cmd2(txtwid,0x00,TXT_WID); /*文本区宽度*/
196 1 write_cmd2(grhstpd1,grhstpd2,GRH_STP); /*图形区首地址*/
197 1 write_cmd2(grhwid,0x00,GRH_WID); /*图形区宽度*/
198 1 write_cmd0(CUR_SHP | cur); /*光标形状*/
199 1 write_cmd0(mod); /*显示方式*/
200 1 write_cmd0(DIS_SW | sw); /*显示开关*/
201 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 383 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 11
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 + -