📄 lcddrev_ra8802.lst
字号:
C51 COMPILER V7.09 LCDDREV_RA8802 01/27/2009 12:19:11 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE LCDDREV_RA8802
OBJECT MODULE PLACED IN LcdDrev_Ra8802.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LcdDrev_Ra8802.C BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include <c8051f020.h> // SFR declarations
3 #include "absacc.H"
4 #include "math.h"
5 #include "DataTypeDef.H"
6 #include "LcdDrev_Ra8802.H"
7
8 #define LCD_BUS P7
9 #define LcdBus_InPut() {P74OUT &= ~0xC0; XBR2 &= ~0x80; P7 = 0xFF;}
10 #define LcdBus_OutPut() {P74OUT |= 0xC0; XBR2 |= 0x80;}
11
12 //sbit WR1 = P4^7; //写控制信号
13 #define LcdWR_On() P4 |= 0x80;
14 #define LcdWR_Off() P4 &= ~0x80;
15
16 //sbit RD1 = P4^6; //读控制信号
17 #define LcdRD_On() P4 |= 0x40;
18 #define LcdRD_Off() P4 &= ~0x40;
19
20 //sbit CD1 = P0^0; //通道信号, cd=1指令 cd=0 数据
21 #define LcdCD_On() P6 |= 0x01;
22 #define LcdCD_Off() P6 &= ~0x01;
23
24 //sbit Lcd_CS = P6^1;
25 #define LcdCS_On() P6 |= 0x02;
26 #define LcdCS_Off() P6 &= ~0x02;
27
28
29 #define GraphAddr 0x0000 //head of graph
30
31 //以8*8字符计算,显示屏横向、纵向可以显示的字符个数
32 //以240*128为例:
33 #define LineChar 32 //一行16个字符(8*8)
34 #define ColumnChar 16 //总共16列
35
36
37 static void delay(INT8U KK)
38 {
39 1 while(KK--) ;
40 1 }
41
42 /********************************************************************************
43 函数名: LcdReadSdate(void)
44 函数功能: IOPORT输出数据并检查LCD忙数据。
45 返回数据:checkbusy
46 /********************************************************************************/
47 INT8U LcdReadSdate(void)
48 {
49 1 INT8U checkbusy;
50 1 LcdBus_OutPut();
51 1 LCD_BUS = 0xFF;
52 1 LcdCD_On(); // C/D = 1, 指令操作
53 1 LcdRD_Off(); // 读状态操作
54 1 LcdBus_InPut(); // 配置P7口为输入口
55 1 checkbusy = LCD_BUS; //
C51 COMPILER V7.09 LCDDREV_RA8802 01/27/2009 12:19:11 PAGE 2
56 1 LcdRD_On(); // RD = 1
57 1 return ( checkbusy );
58 1 }
59 /********************************************************************************
60 函 数 名: Void RWcheck(void)
61 函数功能: 判断状态位STA1,STA0子程序(读写指令和读写数据的状态),
62 在写指令的读、写数据之前这两个标志位必须同时为1
63 /********************************************************************************/
64 void LcdRwCheck(void)
65 {
66 1 INT8U databusy;
67 1 do{ databusy=LcdReadSdate(); }
68 1 while( !(databusy&0x03) );
69 1 }
70 /********************************************************************************
71 函 数 名: Void AutoRcheck()
72 函数功能: 判断状态位STA2的子程序(数据自动读状态),该位在数据自动读操作过程中
73 取代STA0和STA1有效。在连续读过程中每读一次之前都要确认STA2=1
74 ********************************************************************************
75 void LcdAutoReadCheck(void)
76 {
77 INT8U databusy;
78 do{ databusy=LcdReadSdate(); }
79 while( !(databusy&0x04) );
80 }
81 /********************************************************************************
82 函数名: Void AutoWcheck()
83 函数功能: 判断状态位STA3子程序(数据自动写状态)
84 ********************************************************************************
85 void LcdAutoWriteCheck(void)
86 {
87 INT8U databusy;
88 do{ databusy=LcdReadSdate(); }
89 while( !(databusy&0x08) );
90 }
91
92
93 /*------输入/出函数,与T6963通讯------------------------------------------------*/
94
95
96
97 /********************************************************************************
98 函 数 名: Void WriteData(INT8U cmd)
99 Void WriteCmd2(INT8U dat1,INT8U cmd)
100 Void WriteCmd3(INT8U dat1,INT8U dat2,INT8U cmd)
101 Void WriteData(INT8U dat)
102 函数功能: 写指令和写数据子程序
103 ********************************************************************************/
104 void LcdWriteData(INT8U dat)
105 {
106 1 LcdRwCheck(); // 判断状态位
107 1 LcdCD_Off(); // C/D=0;数据写入入口
108 1 LcdBus_OutPut();
109 1 LCD_BUS=dat;
110 1 LcdWR_Off(); // WR1=0;
111 1 LcdWR_On(); // WR1=1;
112 1 }
113
114 /********************************************************************************
115 函 数 名: Void WriteData(INT8U cmd)
116 Void WriteCmd2(INT8U dat1,INT8U cmd)
117 Void WriteCmd3(INT8U dat1,INT8U dat2,INT8U cmd)
C51 COMPILER V7.09 LCDDREV_RA8802 01/27/2009 12:19:11 PAGE 3
118 Void WriteData(INT8U dat)
119 函数功能: 写指令和写数据子程序
120 ********************************************************************************/
121 void LcdWriteCmd1(INT8U cmd)
122 {
123 1 LcdRwCheck(); // 判断状态位
124 1 LcdCD_On(); // C/D=1;命令写入入口
125 1 LcdBus_OutPut();
126 1 LCD_BUS=cmd;
127 1 LcdWR_Off(); // WR1=0;
128 1 LcdWR_On(); // WR1=1;
129 1 }
130 /********************************************************************************
131 函 数 名: Void LcdWriteCmd2(INT8U dat1,INT8U cmd)
132 函数功能: 写指令和写数据子程序
133 ********************************************************************************/
134 void LcdWriteCmd2(INT8U dat,INT8U cmd)
135 {
136 1 LcdWriteData(dat);
137 1 LcdWriteCmd1(cmd);
138 1 }
139 /********************************************************************************
140 函 数 名: Void LcdWriteCmd3(INT8U dat1,INT8U dat2,INT8U cmd)
141 函数功能: 写指令和写数据子程序
142 写有 3 个参数命令
143 ********************************************************************************/
144 void LcdWriteCmd3(INT8U dat1,INT8U dat2,INT8U cmd)
145 {
146 1 LcdWriteData(dat1);
147 1 LcdWriteData(dat2);
148 1 LcdWriteCmd1(cmd);
149 1 }
150
151 /*
152 INT8U LcdReadData(void)
153 { INT8U checkbusy;
154 LcdRwCheck(); // 判断状态位
155 LcdCD_Off(); // C/D=0;
156 LCD_BUS = 0xFF; // LCD_BUS口置"1"
157 LcdRD_Off(); // /RD = 0, 读状态操作
158 LcdBus_InPut(); // 配置P7口为输入口
159 checkbusy = LCD_BUS; // 读取数据
160 LcdRD_On(); // RD = 1
161 return (checkbusy);
162 } // */
163
164
165
166
167
168
169
170 /********************************************************************************
171 函数名: Void ClearScreen(INT16U ram)
172 函数功能: 清除整个屏幕
173 ram : 需要清零的单元数
174 ********************************************************************************/
175 void ClearScreen(void)
176 {
177 1 INT16U i;
178 1 //================================================== 清显示RAM区: 0000h--2000H(8K)
179 1 LcdWriteCmd3(0x00,0x00,0x24); // 设置指针地址0000H
C51 COMPILER V7.09 LCDDREV_RA8802 01/27/2009 12:19:11 PAGE 4
180 1 LcdWriteCmd1(0xB0); // 设置自动写方式
181 1 for(i=0; i<0x2000; i++)
182 1 LcdWriteData(0x00); // data=0;
183 1 LcdWriteCmd1(0xB2); // 设置自动写结束指令
184 1 // LcdWriteCmd3(0x01,0x01,0x21);
185 1 }
186
187 /********************************************************************************
188 函数名: void LcdInit (void)
189 函数功能:LCD初始化设置
190 ********************************************************************************/
191 void LcdInit(void)
192 {
193 1 LcdCS_Off();
194 1 LcdWriteCmd3(0x00,0x00,0x40); //设置文本显示区域首地址
195 1 LcdWriteCmd3(0x20,0x00,0x41); //设置文本显示区域宽度
196 1 LcdWriteCmd3(0x00,0x08,0x42); //设置图形显示区域首地址:GraphAddr
197 1 LcdWriteCmd3(0x20,0x00,0x43); //设置图形显示区域宽度:LineChar
198 1 //即一行显示所占字节数
199 1 LcdWriteCmd1(0xA0); //设置光标形状 cursor size 8*8
200 1 LcdWriteCmd1(0x88); //设置显示方式:CGROM方式 文本\图形 逻辑“或”合成
201 1 LcdWriteCmd1(0x9C); //设置显示开关:图形、文本、光标、闪烁开启
202 1 ClearScreen();
203 1 delay(0);
204 1 }
205
206
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 209 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -