📄 st7529.lst
字号:
C51 COMPILER V8.08 ST7529 04/15/2008 16:12:18 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE ST7529
OBJECT MODULE PLACED IN ST7529.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ST7529.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*--------------------------------------------
2 主题:ST7529液晶屏驱动程序
3 编写人:龙寿华
4 程序功能:本程序为ST7529驱动程序
5 LCM驱动IC型号为:ST7529 点阵数为193*91,工作于16BIT模式。左下角为坐标原点,COL的第一条为固定
6 ICON显示。
7 MCU型号为:STC89LEXX
8 晶振频率为11.0592MHz
9 ;连线图:
10 ST7529工作于16bits 8080工作方式。
11 ;*LCM---MCU* *LCM---MCU* *LCM----MCU* *LCM----MCU* LCM----MCU* LCM---MCU*
12 ;*DB0---P1.0* *DB4---P1.4* ;*DB8---P2.0* *DB12--P2.4* *AO-----P3.3* RESET-P3.5
13 ;*DB1---P1.1* *DB5---P1.5* ;*DB9---P2.1* *DB13--P2.5* *RD-----P3.7*
14 ;*DB2---P1.2* *DB6---P1.6* ;*DB10--P2.2* *DB14--P2.6* *WR-----P3.6*
15 ;*DB3---P1.3* *DB7---P1.7* ;*DB11--P2.3* *DB15--P2.7* CS1----P3.4*
16 -------------------------------------------------*/
17 /*#pragma src /*生成ASM文件开关,必要时打开 */
18 #include <reg52.h>
19 #include <stdarg.h>
20 #include<INTRINS.H>
21
22 /***********液晶显示器接口引脚定义***************/
23 sbit LCM_RES = P3^5; //LCD复位引脚
24 sbit CE_LCM=P3^4; //LCM的CE控制端口
25 sbit Alcm = P3^3; //LCD命令和数据控制口,为1时是读写数据;为0时写入命令
26 sfr Data1= 0x90; //数据口低8位为P1
27 sfr Data2= 0xA0; //数据口高8位为P2
28
29 /***********LCM常用操作命令和参数定义***************/
30 #define EXT_IN 0x30 //EXT=0 进入到常规命令输入
31 #define EXT_OUT 0x31 //EXT=1
32 //LCM EXT=0时常用操作命令和参数定
33 #define DISPON 0xAf //显示on
34 #define DISPOFF 0xAe //显示off
35 #define DISNOR 0xA6 //常规显示
36 #define DISINV 0xA7 //反显
37 #define COMSCN 0xBB // COM扫描方式设定 1条指令。
38 #define DISCTRL 0xCA //显示控制指令 3条副加指令
39 #define SLPIN 0x95 //进入到睡眠模式
40 #define SLPOUT 0x94 //退出睡眠模式
41 #define LASET 0x75 //行地址设定 2字节地址
42 #define CASET 0x15 //列地址设定 2字节地址
43 #define DATSDR 0xBC //数据扫描位置设定 3字节
44 #define RAMWR 0x5C //写入数据到RAM中
45 #define RAMRD 0x5D //从RAM中读取数据
46 #define PTLIN 0xA8 //进入到区域显示指令 2字节
47 #define PTLOUT 0xA9 //退出区域显示状态
48 #define RMWIN 0xE0 //进入到读修改写模式指令
49 #define RMWOUT 0xEE //退出读修改写模式指令
50 #define ASCSET 0xAA //区域滚动设定 4字节
51 #define SCSTART 0xAB //滚动初始设定 1字节
52 #define OSCON 0xD1 //打开内部晶振指令
53 #define OSCOFF 0xD2 //关闭内部晶振指令
54 #define PWRCTRL 0x20 //电源控制指令 1字节
55 #define VOLCTRL 0x81 //EC控制指令 2字节
C51 COMPILER V8.08 ST7529 04/15/2008 16:12:18 PAGE 2
56 #define VOLUP 0xD6 //EC加1指令
57 #define VOLDOWN 0xD7 //EC减1指令
58 #define EPSRRD1 0x7C //读寄存器1
59 #define EPSRRD2 0x7D //读寄存器2
60 #define DISNOP 0x25 //空闲指令 相当于没有操作
61 #define EPINT 0x07 //初始化代码指令 1字节
62 //LCM EXT=1时常用操作命令和参数定
63 #define Gray_1set 0x20 //框架1灰度PWM设定 16字节
64 #define Gray_2set 0x21 //框架2灰度PWM设定 16字节
65 #define ANASET 0x32 //Analog电路设定 3字节
66 #define SWINT 0x34 //软件初始化
67 #define EPCTIN 0xCD //控制EEPROM指令 1字节
68 #define EPCTOUT 0xCC //退出EEPROM控制
69 #define EPMWR 0xFC //写入数据到EEPROM
70 #define EPMRD 0xFD //从EEPROM读出数据
71
72
73 #define freq 6000000 //系统时钟,6MHz
74 #define us1000H ((65536 - (freq/1200)*1000/10000) / 256) //延时1ms的定时H数值
75 #define us1000L ((65536 - (freq/1200)*1000/10000) % 256) //延时1ms的定时L数值
76
77 #define START_LINE 32 //LCD的起始行
78 #define END_LINE 122 //LCD的结束行 LINE 32~122 MAX=159
79 #define START_COL 20 //LCD的起始列
80 #define END_COL 84 //LCD的结束列 COLUMN 20~84 MAX=84
81 #define MAX_ROW 91 //最大的ROW数
82 #define MAX_COL 194 //最大的COL数
83 #define MAX_COL_BLOCK 65 //最大的COL的块数,一个块含有3个像素点。
84 /****************全局变量定义*******************/
85 unsigned char col,row; /*列x,行(页)y,输出数据 */
86 bit Reverse; /*反显控制标志位,=1时反显 */
87
88 bit TimeMark; /*定时响应标志位*/
89 unsigned char T_TH;
90 unsigned char T_TL;
91
92 unsigned char code two_boy[];
93 unsigned char code zimo[];
94
95 /****************************************************************************/
96 // Timer0初始化
97 /****************************************************************************/
98 void InitTimer0(void)
99 {
100 1 TR0 = 0;
101 1 TimeMark=0;
102 1 TMOD = (TMOD&0xf0)|0x01; //模式1,十六位定时器
103 1 TH0 = T_TH;
104 1 TL0 = T_TL;
105 1 ET0 = 1;
106 1 TR0 = 1;
107 1 EA = 1;
108 1 }
109 /****************************************************************************/
110 // Timer0 中断程序 定时
111 /****************************************************************************/
112 void timer0 (void) interrupt 1
113 {
114 1 TR0 = 0;
115 1 TH0 = T_TH;
116 1 TL0 = T_TL; //reload
117 1 TR0 = 1;
C51 COMPILER V8.08 ST7529 04/15/2008 16:12:18 PAGE 3
118 1 TimeMark=1;
119 1 }
120 /****************************************************************************/
121 // Ms延时程序
122 /****************************************************************************/
123 void Delay(unsigned int ms)
124 {
125 1 unsigned int i;
126 1 T_TH=us1000H;
127 1 T_TL=us1000L;
128 1 InitTimer0(); //定 时1ms
129 1 TimeMark=0;
130 1 for (i=0;i<ms;i++)
131 1 {
132 2 while(!TimeMark);
133 2 TimeMark=0;
134 2 }
135 1 TR0=0; //关定时器0
136 1 ET0 = 0;
137 1 }
138
139
140
141 /****************************************/
142 //LCD复位程序
143 /****************************************/
144 void LCD_Reset(void )
145 {
146 1 LCM_RES=1;
147 1 Delay(10);
148 1 LCM_RES=0;
149 1 Delay(10);
150 1 LCM_RES=1;
151 1 }
152 /****************************************/
153 //LCD读数据接初始化函数
154 /****************************************/
155 void LCD_initRead(void)
156 {
157 1 Data1=0xFF;
158 1 Data2=0xFF;
159 1 LCM_RES=1;
160 1 Alcm = 1; //读数据操作
161 1 WR=1;
162 1 RD=1;
163 1 CE_LCM =0;
164 1 }
165 /****************************************/
166 //LCD读数据
167 /****************************************/
168 void LCD_dummyRead(void)
169 {
170 1 RD=0;
171 1 RD=1;
172 1 }
173 /****************************************/
174 //LCD读数据
175 //首次调用此函数前,需调LCD_dummyRead()函数一次
176 /****************************************/
177 unsigned int LCD_DataRead(void)
178 {
179 1 unsigned int Dat_m=0;
C51 COMPILER V8.08 ST7529 04/15/2008 16:12:18 PAGE 4
180 1 RD=0;
181 1 Dat_m=(Data1|(Data2<<8));
182 1 RD=1;
183 1 return Dat_m;
184 1 }
185 /****************************************/
186 //LCM忙判断函数
187 /****************************************/
188 void wtcom(void)
189 {
190 1 }
191 /****************************************/
192 //LCD写数据接初始化函数
193 /****************************************/
194 void LCD_initWR(void)
195 {
196 1 // wtcom(); //等待LCM操作允许,这里暂不用它
197 1 Alcm = 1; //写数据操作
198 1 RD = 1; //读数据端置1
199 1 CE_LCM = 0; //选中LCM
200 1 }
201 /****************************************/
202 //写入数据函数
203 /****************************************/
204 void Wrcom(unsigned int X)
205 {
206 1 Data1=(unsigned char)X; //输出数据
207 1 Data2=(unsigned char)(X>>8); //输出数据
208 1 WR = 0; //写数据端置0
209 1 // NOP();
210 1 WR = 1; //写入数据
211 1 }
212 /****************************************/
213 //对LCM写入数据
214 /****************************************/
215 void Wrdata(unsigned int X)
216 {
217 1 // wtcom(); //等待LCM操作允许,这里暂不用它
218 1 if(Reverse)
219 1 {X=~X;} //取反,以反显
220 1 Alcm = 1; //写数据操作
221 1 RD = 1; //读数据端置1
222 1 CE_LCM = 0; //选中LCM
223 1 Wrcom(X); //调用写数据共享程序
224 1 }
225 /****************************************/
226 //对LCM写入命令
227 /****************************************/
228 void Wrcmd(unsigned int X)
229 {
230 1 // wtcom(); //等待LCM操作允许,这里暂不用它
231 1 Alcm = 0; //写命令操作
232 1 RD = 1; //读数据端置1
233 1 CE_LCM = 0; //选中LCM
234 1 Wrcom(X); //调用写数据共享程序
235 1 }
236 /********************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -