📄 lcd-12864display.lst
字号:
C51 COMPILER V8.02 LCD_12864DISPLAY 08/18/2007 09:39:18 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD_12864DISPLAY
OBJECT MODULE PLACED IN LCD-12864display.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE LCD-12864display.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************************************************
2 KXM12864J-3液晶显示器驱动程序 基于SAMSUNG KS0108控制器
3 ***********************************************************/
4 #include "absacc.h"
5 #include "intrins.h"
6 #include "reg52.h"
7
8 //自定义库
9 #include "ASCII816.h" //标准ASCII库
10 #include "HZTable.h" //汉字点阵库
11 #include "Menu.h" //菜单库
12
13
14 // LCD128*64 数据线
15 #define LCD12864DataPort P0
16 #define OSC_FREQ (11059200ul)
17 #define OSC_PER_INST (12)
18
19 #ifdef TRUE
#define FALSE 0
#define TRUE (!FALSE)
#endif
23
24
25 // LCD128*64 I/O 信号管脚
26 sbit di = P1^0; // 数据\指令 选择
27 sbit rw = P1^1; // 读\写 选择
28 sbit en = P1^4; // 读\写使能
29 sbit cs1 = P1^3; // 片选1,高有效(前64列)
30 sbit cs2 = P1^2; // 片选2,高有效(后64列)
31 sbit reset=P3^4; // 复位
32
33
34 //**函数声明列表**
35 void SetOnOff(unsigned char onoff);
36 void SelectScreen(unsigned char screen);
37 void ClearScreen(unsigned char screen);
38 void Show88(unsigned char lin,unsigned char column,unsigned int address);
39 void ShowChar(unsigned char lin,unsigned char column,unsigned char character);
40 void ShowString(unsigned char lin,unsigned char column, unsigned char *string);
41 void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode);
42 void ShowPicture(unsigned char startline,unsigned char startcolumn,unsigned char linechar,unsigned char co
-lumnchar,unsigned int address);
43 void ShowLine(unsigned char lin,unsigned int lineheadaddr);
44 void ShowPage(unsigned int pageheadaddr);
45 void ReverseShow88(unsigned char lin,unsigned char column);
46 void ReverseShowChar(unsigned char lin,unsigned char column);
47 ReverseShowHZ(unsigned char lin,unsigned char column);
48 ReverseShow(unsigned char lin);
49 void InitLCD();
50 void Reset();
51 //**函数声明结束**
52
53
54 void main(void)
C51 COMPILER V8.02 LCD_12864DISPLAY 08/18/2007 09:39:18 PAGE 2
55 {
56 1 int i,j,k;
57 1 InitLCD(); //液晶显示器初始化
58 1 Lcd12864delay();
*** WARNING C206 IN LINE 58 OF LCD-12864DISPLAY.C: 'Lcd12864delay': missing function-prototype
59 1 while(1)
60 1 {
61 2 ShowHZ(0,0,18);
62 2 Lcd12864delay();
63 2 ShowHZ(0,2,19);
64 2 Lcd12864delay();
65 2 ShowHZ(0,4,20);
66 2 Lcd12864delay();
67 2 ShowHZ(0,6,21);
68 2 Lcd12864delay();
69 2 ShowHZ(0,8,22);
70 2 Lcd12864delay();
71 2 ShowHZ(0,10,23);
72 2 Lcd12864delay();
73 2 ShowHZ(0,12,24);
74 2 Lcd12864delay();
75 2 ShowHZ(0,14,25);
76 2 Lcd12864delay();
77 2 /*ShowPicture(0,0,16,8,ShangBiao_YongTan[0]);
78 2 Lcd12864delay();
79 2 ShowChar(0,0,104);
80 2 Lcd12864delay();*/
81 2
82 2 }
83 1 }
*** WARNING C280 IN LINE 56 OF LCD-12864DISPLAY.C: 'i': unreferenced local variable
*** WARNING C280 IN LINE 56 OF LCD-12864DISPLAY.C: 'j': unreferenced local variable
*** WARNING C280 IN LINE 56 OF LCD-12864DISPLAY.C: 'k': unreferenced local variable
84 /*----------------------------------------------------------------------------------------------------*/
85 /* ****函数列表****
86
87 //开关显示
88 void SetOnOff(unsigned char onoff)
89
90 //选择屏幕
91 //screen: 0-全屏,1-左屏,2-右
92 void SelectScreen(unsigned char screen)
93
94 //清屏
95 //screen: 0-全屏,1-左屏,2-右
96 void ClearScreen(unsigned char screen)
97
98 //显示8*8点阵
99 //旋转90度:字模被竖着切分
100 //lin:行(0-7), column: 列(0-15)
101 //address : 字模区首地址
102 void Show88(unsigned char lin,unsigned char column,unsigned int address)
103
104 //显示8*16字符
105 //旋转90度:字模被竖着切分
106 //lin:行(0-3), column: 列(0-15)
107 //character:字符代码(标准ASCII码)
108 void ShowChar(unsigned char lin,unsigned char column,unsigned char character)
109
110 //显示8*16字符串
111 //!!!只能显示在一行上即: 串长+column <=15
112 //旋转90度:字模被竖着切分
C51 COMPILER V8.02 LCD_12864DISPLAY 08/18/2007 09:39:18 PAGE 3
113 //lin:行(0-3), column: 列(0-15)
114 //address : 字模区首地址
115 void ShowString(unsigned char lin,unsigned char column, unsigned char *string)
116
117 //显示一个汉字
118 //旋转90度:字模被竖着切分
119 //lin:行(0-3), column: 列(0-15)
120 //hzcode: 汉字代码(自定义的)
121 void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)
122
123 //显示图片
124 //旋转90度 :字模被竖着切分
125 //startline :开始行
126 //startcolumn:开始列
127 //linechar :图片行点除8(图片以8*8点阵为单位)
128 //columnchar :图片列点除8(图片以8*8点阵为单位)
129 //address : 字模区首地址
130 void ShowPicture(unsigned char startline,unsigned char startcolumn,unsigned char linechar,unsigned char co
-lumnchar,unsigned int address)
131 //!!问题大户
132 //显示一行汉字
133 //lin:行
134 //lineheadaddr: 此行汉字代码区首地址
135 void ShowLine(unsigned char lin,unsigned int lineheadaddr)
136
137 //显示一屏汉字
138 //pageheadaddr:此屏汉字代码地址区首地址
139 void ShowPage(unsigned int pageheadaddr)
140
141 //反显一个8*8字块
142 //lin:行(0-3), column: 列(0-7)
143 void ReverseShow88(unsigned char lin,unsigned char column)
144
145
146 //反显一个字符
147 //lin:行(0-4), column: 列(0-15)
148 void ReverseShowChar(unsigned char lin,unsigned char column)
149
150
151 //反显一个汉字
152 //lin:行(0-3), column: 列(0-7)
153 ReverseShowHZ(unsigned char lin,unsigned char column)
154
155 //反显一行汉字
156 //lin:行
157 ReverseShow(unsigned char lin)
158
159 //初始化LCD
160 void InitLCD()
161
162 ****函数列表结束**** */
163 /*----------------------------------------------------------------------------------------------------*/
164 /*--基本函数源程序------------------------------------------------------------------------------------*/
165 //延时
166 Lcd12864delay()
167 {
168 1 unsigned int i=500;
169 1 while(i--) {;}
170 1 }
171 /*----------------------------------------------------------------------------------------------------*/
172 //状态检查
173 void CheckState()
C51 COMPILER V8.02 LCD_12864DISPLAY 08/18/2007 09:39:18 PAGE 4
174 {
175 1 unsigned char dat;
176 1 di=0;
177 1 rw=1;
178 1 do{
179 2 LCD12864DataPort=0xff;
180 2 en=1;
181 2 dat=LCD12864DataPort;
182 2 en=0;
183 2 dat=0x90 & dat; //仅当第4,7位为0时才可操作
184 2 }while(!(dat==0x00));
185 1 }
186 /*----------------------------------------------------------------------------------------------------*/
187 //写显示数据
188 //dat:显示数据
189 void WriteByte(unsigned char dat)
190 {
191 1 CheckState();
192 1 di=1;
193 1 rw=0;
194 1 LCD12864DataPort=dat;
195 1 en=1;
196 1 //_nop_();
197 1 en=0;
198 1 }
199 /*-----------------------------------------------------------------------------------------------------*/
200 //向LCD发送命令
201 //command :命令
202 SendCommandToLCD(unsigned char command)
203 {
204 1 di=0;
205 1 CheckState();
206 1 rw=0;
207 1 LCD12864DataPort=command;
208 1 en=1;
209 1 //_nop_();
210 1 en=0;
211 1 }
212 /*----------------------------------------------------------------------------------------------------*/
213 //设定行地址(页)--X 0-7
214 void SetLine(unsigned char line)
215 {
216 1 line=line & 0x07; // 0<=line<=7
217 1 line=line|0xb8; //1011 1xxx
218 1 SendCommandToLCD(line);
219 1 }
220 //设定列地址--Y 0-63
221 void SetColumn(unsigned char column)
222 {
223 1 column=column &0x3f; // 0=<column<=63
224 1 column=column | 0x40; //01xx xxxx
225 1 SendCommandToLCD(column);
226 1 }
227 //设定显示开始行--XX
228 void SetStartLine(unsigned char startline) //0--63
229 {
230 1 startline=startline & 0x07;
231 1 startline=startline|0xc0; //1100 0000
232 1 SendCommandToLCD(startline);
233 1 }
234 //开关显示
235 void SetOnOff(unsigned char onoff)
C51 COMPILER V8.02 LCD_12864DISPLAY 08/18/2007 09:39:18 PAGE 5
236 {
237 1 onoff=0x3e | onoff; //0011 111x
238 1 SendCommandToLCD(onoff);
239 1 }
240 /*---------------------------------------------------------------------------------------------------*/
241 //选择屏幕
242 //screen: 0-全屏,1-左屏,2-右屏
243 void SelectScreen(unsigned char screen)
244 { //北京显示器:负有效 cs1: 0--右; cs2: 0--左
245 1 switch(screen)
246 1 { case 0: cs1=1;//全屏
247 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
248 2 cs2=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -