📄 m12864.lst
字号:
C51 COMPILER V8.08 M12864 12/04/2000 09:48:14 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE M12864
OBJECT MODULE PLACED IN M12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE M12864.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 **长沙太阳人电子有限公司SMG12864模拟接口参考程序(KS0108)
3 **电话: 0731-4167806,4167808
4 **E-mail: www@sunman.cn
5 **Create by :谭超 E-mail: tanchao_1@126.com
6 **最后修改 : 2005年3月17日
7 **版本说明: 带显示矩形框、线、点子程序。
8 */
9
10 //[字符图象输出文件=hzk.c]
11 //[字体名称=宋体]
12 //[字体大小=16]
13 //[字节方向=垂直]
14 //[字位顺序=从低到高]
15
16 #include <reg51.h>
17 #include <math.h>
18 #include <intrins.h>
19 #include <hzk.c>
20
21 unsigned char data Lcd_CurrentX,Lcd_CurrentY,Lcd_Mask;
22 unsigned char code LeftMask[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80};
23 unsigned char code RightMask[]={0xff,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f};
24 unsigned char code Mask1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
25 unsigned char code Mask2[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
26
27 sbit RSPIN = P3^0;
28 sbit RWPIN = P3^3;
29 sbit EPIN = P3^4;
30 sbit CS1PIN = P3^1;
31 sbit CS2PIN = P3^2;
32
33 #define LCD_CMD_COL 0X40
34 #define LCD_CMD_PAGE 0XB8
35 #define LCD_CMD_ON 0X3F
36 #define LCD_CMD_OFF 0X3E
37 #define LCD_CMD_STARTLINE 0XC0
38 #define LCD_LEFT 0
39 #define LCD_TOP 0
40 #define LCD_RIGHT 127
41 #define LCD_BOTTOM 63
42
43 //延时子程序
44 void delay(unsigned int t)
45 { unsigned int i,j;
46 1 for(i=0;i<t;i++)
47 1 for(j=0;j<10;j++)
48 1 ;
49 1 }
50
51 //片1测忙
52 void lcdwaitidle1(void)
53 { P1=0xff;
54 1 RSPIN=0;
55 1 RWPIN=1;
C51 COMPILER V8.08 M12864 12/04/2000 09:48:14 PAGE 2
56 1 CS1PIN=1;
57 1 EPIN=1;
58 1 while((P1&0x80)==0x80);
59 1 EPIN=0;
60 1 CS1PIN=0;
61 1 }
62
63 //片2测忙
64 void lcdwaitidle2(void)
65 { P1=0xff;
66 1 RSPIN=0;
67 1 RWPIN=1;
68 1 CS2PIN=1;
69 1 EPIN=1;
70 1 while((P1&0x80)==0x80);
71 1 EPIN=0;
72 1 CS2PIN=0;
73 1 }
74
75 //写指令代码到片1
76 void lcdwc1(unsigned char cmdcode)
77 { lcdwaitidle1();
78 1 P1=cmdcode;
79 1 RSPIN=0;
80 1 RWPIN=0;
81 1 CS1PIN=1;
82 1 EPIN=1;
83 1 _nop_();
84 1 EPIN=0;
85 1 CS1PIN=0;
86 1 }
87
88 //写指令代码到片2
89 void lcdwc2(unsigned char cmdcode)
90 { lcdwaitidle2();
91 1 P1=cmdcode;
92 1 RSPIN=0;
93 1 RWPIN=0;
94 1 CS2PIN=1;
95 1 EPIN=1;
96 1 _nop_();
97 1 EPIN=0;
98 1 CS2PIN=0;
99 1 }
100
101 //写数据到片1
102 void lcdwd1(unsigned char dispdata)
103 { lcdwaitidle1();
104 1 P1=dispdata;
105 1 RSPIN=1;
106 1 RWPIN=0;
107 1 CS1PIN=1;
108 1 EPIN=1;
109 1 _nop_();
110 1 EPIN=0;
111 1 CS1PIN=0;
112 1 }
113
114 //写数据到片2
115 void lcdwd2(unsigned char dispdata)
116 { lcdwaitidle2();
117 1 P1=dispdata;
C51 COMPILER V8.08 M12864 12/04/2000 09:48:14 PAGE 3
118 1 RSPIN=1;
119 1 RWPIN=0;
120 1 CS2PIN=1;
121 1 EPIN=1;
122 1 _nop_();
123 1 EPIN=0;
124 1 CS2PIN=0;
125 1 }
126
127 //读片1数据
128 unsigned char lcdrd1(void)
129 { unsigned char i;
130 1 lcdwaitidle1();
131 1 P1=0xff;
132 1 RSPIN=1;
133 1 RWPIN=1;
134 1 CS1PIN=1;
135 1 EPIN=1;
136 1 _nop_();
137 1 i=P1;
138 1 EPIN=0;
139 1 CS1PIN=0;
140 1 return i;
141 1 }
142
143 //读片2数据
144 unsigned char lcdrd2(void)
145 { unsigned char i;
146 1 lcdwaitidle2();
147 1 P1=0xff;
148 1 RSPIN=1;
149 1 RWPIN=1;
150 1 CS2PIN=1;
151 1 EPIN=1;
152 1 _nop_();
153 1 i=P1;
154 1 EPIN=0;
155 1 CS2PIN=0;
156 1 return i;
157 1 }
158
159 //写指令代码
160 void lcdwc(unsigned char cmdcode)
161 { if((Lcd_CurrentX)<0x40)
162 1 lcdwc1(cmdcode);
163 1 else
164 1 lcdwc2(cmdcode);
165 1 }
166
167 //写数据
168 void lcdwd(unsigned char dispdata)
169 { if(Lcd_CurrentX<64)
170 1 lcdwd1(dispdata);
171 1 else
172 1 lcdwd2(dispdata);
173 1 }
174
175 //内部数据地址指针定位
176 void lcdpos(void)
177 { lcdwc(LCD_CMD_COL|(Lcd_CurrentX&0x3f)); //设置地址列指针
178 1 lcdwc(LCD_CMD_PAGE|((Lcd_CurrentY/8)&0x7)); //设置地址页指针
179 1 }
C51 COMPILER V8.08 M12864 12/04/2000 09:48:14 PAGE 4
180
181 //读数据
182 unsigned char lcdrd(void)
183 { unsigned char i;
184 1 if(Lcd_CurrentX<64)
185 1 { i=lcdrd1();
186 2 i=lcdrd1(); //读两次
187 2 }
188 1 else
189 1 { i=lcdrd2();
190 2 i=lcdrd2();
191 2 }
192 1 lcdpos();
193 1 return i;
194 1 }
195
196 //当前坐标移动到下一个点
197 void lcdcursornext(void)
198 { Lcd_CurrentX++;
199 1 if(Lcd_CurrentX>LCD_RIGHT)
200 1 { Lcd_CurrentX=LCD_LEFT;
201 2 Lcd_CurrentY+=8;
202 2 if(Lcd_CurrentY>LCD_BOTTOM)
203 2 Lcd_CurrentY=LCD_TOP;
204 2 }
205 1 }
206
207 void displaybyte(unsigned char dispdata)
208 { lcdpos(); //内部数据地址指针定位
209 1 lcdwd(dispdata); //写数据
210 1 lcdcursornext(); //当前坐标移动到下一个点
211 1 }
212
213 //整屏显示
214 void lcdfill(unsigned char FillData)
215 { Lcd_Mask=0xff;
216 1 for(Lcd_CurrentX=LCD_LEFT,Lcd_CurrentY=LCD_TOP;1;)
217 1 { displaybyte(FillData);
218 2 if((Lcd_CurrentX==LCD_LEFT)&&(Lcd_CurrentY==LCD_TOP))
219 2 break;
220 2 }
221 1 }
222
223 //初始化
224 void lcdreset()
225 { lcdwc1(LCD_CMD_ON); //开显示
226 1 lcdwc2(LCD_CMD_ON);
227 1 lcdwc1(LCD_CMD_STARTLINE); //设置显示初始行
228 1 lcdwc2(LCD_CMD_STARTLINE);
229 1 }
230
231 #include <display.c>
232 #include <point.c>
233
234
235 main()
236 { while(1)
237 1 { lcdreset(); //初始化
238 2 lcdfill(0xff); //整屏显示
239 2 delay(5000);
240 2 lcdfill(0); //清屏
241 2 delay(5000);
C51 COMPILER V8.08 M12864 12/04/2000 09:48:14 PAGE 5
242 2 put_str_xy(0,0,"长沙太阳人电子有限公司");
243 2 delay(5000);
244 2 }
245 1 }
246
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1796 ----
CONSTANT SIZE = 2223 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 27
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 + -