📄 lcdinit.lst
字号:
C51 COMPILER V8.05a LCDINIT 11/09/2008 23:18:20 PAGE 1
C51 COMPILER V8.05a, 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
2 #include "ExtDef.h"
3 #include "function.h"
4 #include "data.h"
5 #include "zimo.h"
6
7 uchar xdata PP _at_ 0x8001;
8 uchar g=0;
9 static uint CharHome = 0x0000;
10 //lcd_init(uchar txtstpd1, uchar txtstpd2, uchar txtwid, uchar grhstpd1, uchar grhstpd2, uchar g
-rhwid, uchar cur, uchar mod, uchar sw){
11 // write_cmd2(txtstpd1,txtstpd2,TXT_STP); /*文本区首地址*/
12 // lcd_init(0x00,0x00,0x14,0x50,0x01,0x14,0x00,MOD_OR,0x0f);
13 // from the above three sentence,we can see that txtstpd1=0x00,txtstpd2=0x00,so initial address CharHo
-me = 0x0000.
14 static uint GraphHome = 0x0150; // write_cmd2(grhstpd1,grhstpd2,GRH_STP); /*图形区首地址*/
15 // same as the CharHome, we can see that grhstpd1=0x50,grhstpd2=0x01,so initial address GraphHome
-= 0x0150.
16
17 #define HanZhi_Totals 20 //共有20个汉字
18
19 void delay(int c){
20 1 int i, j;
21 1 for(i = 0; i < c; i++)
22 1 for(j = 0; j < 1000; j++);
23 1 }
24
25 /*读状态*/
26 uchar read_state()
27 {
28 1 uchar temp;
29 1 cd = 1;
30 1 temp = PP;
31 1 return(temp);
32 1 }
33
34 /*STA0指令读写状态,STA1数据读写状态 判断函数*/
35 void lcd_enable(){
36 1 uchar i;
37 1 for(i = 10; i > 0; i--)
38 1 if((read_state() & 0x03) == 0x03)
39 1 break;
40 1 if(i==0)
41 1 error0=1;/*若i==0,说明错误*/
42 1 }
43
44 /*STA2数据自动读状态 判断函数*/
45 void atrd_enable(){
46 1 uchar i;
47 1 for(i = 10; i > 0; i--)
48 1 if((read_state() & 0x04) == 0x04)
49 1 break;
50 1 if(i==0)
51 1 error1=1;/*若i==0,说明错误*/
52 1 }
C51 COMPILER V8.05a LCDINIT 11/09/2008 23:18:20 PAGE 2
53
54 /*STA3数据自动写状态 判断函数*/
55 void atwr_enable(){
56 1 uchar i;
57 1 for(i = 10; i > 0; i--)
58 1 if((read_state() & 0x08) == 0x08)
59 1 break;
60 1 if(i==0)
61 1 error2=1;/*若i==0,说明错误*/
62 1 }
63
64 /*写无参数函数*/
65 void write_cmd0(uchar cmd){
66 1 lcd_enable();
67 1 cd=1;
68 1 PP=cmd;
69 1 }
70
71 /*写单参数函数*/
72 void write_cmd1(uchar data1, uchar cmd){
73 1 lcd_enable();
74 1 cd=0;
75 1 PP=data1;
76 1 lcd_enable();
77 1 cd=1;
78 1 PP=cmd;
79 1 }
80
81 /*写双参数函数*/
82 void write_cmd2(uchar data1, uchar data2, uchar cmd){
83 1 lcd_enable();
84 1 cd=0;
85 1 PP=data1;
86 1 lcd_enable();
87 1 cd=0;
88 1 PP=data2;
89 1 lcd_enable();
90 1 cd=1;
91 1 PP=cmd;
92 1 }
93
94 /*写数据函数*/
95 void write_data(uchar data0){
96 1 lcd_enable();
97 1 cd=1;
98 1 PP=data0;
99 1 }
100
101 /*读数据函数*/
102 uchar read_data(){
103 1 char temp;
104 1 lcd_enable();
105 1 cd = 0;
106 1 temp = PP;
107 1 return(temp); /*若返回0,可能错误*/
108 1 }
109
110 /*自动写开始*/
111 void auto_write(){
112 1 write_cmd0(AUT_WR);
113 1 }
114
C51 COMPILER V8.05a LCDINIT 11/09/2008 23:18:20 PAGE 3
115 /*自动读开始*/
116 void auto_read(){
117 1 write_cmd0(AUT_RD);
118 1 }
119
120 /*自动写结束*/
121 void atwr_stop(){
122 1 write_cmd0(AUT_WO);
123 1 }
124
125 /*自动读结束*/
126 void atrd_stop(){
127 1 write_cmd0(AUT_RO);
128 1 }
129
130 /*数据一次写函数*/
131 void write_one(uchar data1, char way){
132 1 write_cmd1(data1,way);
133 1 }
134
135 /*数据一次读函数*/
136 uchar read_one(char way){
137 1 uchar temp;
138 1 write_cmd0(way);
139 1 temp = read_data();
140 1 return(temp);
141 1 }
142
143
144 /*设置显示地址指针,以位为单位 */
145 void set_adr(uchar D1, uchar D2){
146 1 write_cmd2(D1,D2,ADR_POS);
147 1 }
148
149 /*设置光标指针 x,y从0开始*/
150 void set_cur(char x, char y){
151 1 write_cmd2(x,y,CUR_POS);
152 1 }
153
154 /*设置当前显示位置函数x,y 从CharHome开始表示单位为字符 */
155 void set_Char_xy(uchar x, uchar y){
156 1 int temp;
157 1 temp = y * LCD_CHAR + x + CharHome;
158 1 set_adr(temp&0xff,temp/0xff);
159 1 }
160
161 /*设置当前显示位置函数x,y 从GraphHome开始表示单位为图形 */
162 void Set_Graph_xy(uchar x, uchar y){
163 1 int temp;
164 1 temp = y * LCD_CHAR + x + GraphHome;
165 1 set_adr(temp&0xff,temp/0xff);
166 1 }
167
168 /*设置光标形状 , 形状代码从 0~7*/
169 void Set_Cursor_Type(uchar Type)
170 {
171 1 write_cmd0(CUR_SHP|Type);
172 1 }
173
174
175 /*当前位置清0 */
176 void Clr_Cur_Pos()
C51 COMPILER V8.05a LCDINIT 11/09/2008 23:18:20 PAGE 4
177 {
178 1 write_one(0x00,NOC_WR); // 光标不移动
179 1 }
180
181 /*液晶初始化函数(文本区首地址D1,文本区首地址D2, 文本区宽度, 图形区首地址D1, 图形区首地址D2, 图形区宽度,
- 光标形状, 显示方式, 显示开关)*/
182 void lcd_init(uchar txtstpd1, uchar txtstpd2, uchar txtwid, uchar grhstpd1, uchar grhstpd2, uchar grhwid,
-uchar cur, uchar mod, uchar sw){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -