📄 lcd_part_12864j.lst
字号:
C51 COMPILER V8.15 LCD_PART_12864J 03/17/2009 18:11:02 PAGE 1
C51 COMPILER V8.15, COMPILATION OF MODULE LCD_PART_12864J
OBJECT MODULE PLACED IN LCD_Part_12864j.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE LCD_Part_12864j.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************************************************
2 Copyright 2009
3 All rights reserved.
4
5 文件名 : .c
6 模块名称:st7920 并行方式驱动128*64液晶驱动
7 功能概要:st7920显示驱动
8
9 取代版本:0.0.2
10 修改人 :lujian
11 完成日期:2009.3.16
12 升级说明:create
13 CPU: stc89c58 主频:11.0592M
14 液晶型号: 生产厂家: 驱动芯片:st7920
15 ******************************************************************************/
16
17 #include <AT89X52.H>
18 #include <string.h>
19
20 typedef unsigned char uchar; //无符号8位数
21 typedef signed char schar; //有符号8位数
22 typedef unsigned int uint; //无符号16位数
23 typedef signed int sint; //有符号16位数
24 typedef unsigned long ulong; //无符号32位数
25 typedef signed long slong; //有符号32位数
26 typedef float FP32; //单精度浮点数
27 typedef double FP64; //双精度浮点数
28
29 #define FALSE 0
30 #define TRUE 1
31
32 //初始化指令
33 #define FUN_MODE 0x30 //工作模式:8位基本指令集(ASCII工作方式)
34 #define DISPLAY_OFF 0x34 //显示关(工作模式:8位扩展指令集)
35 #define DISPLAY_ON 0x36 //显示开(工作模式:8位扩展指令集)
36
37 #define comm 0
38 #define dat 1
39
40
41 sbit E = P2^0; //时钟端(从高变低时数据输入)
42 sbit RW = P2^7; //数据读(H)/写(L)选择
43 sbit RS = P2^6; //数据(H)/状态(L)寄存器选择
44
45 /*------------------------------------------------
46 B Bit Registers
47 ------------------------------------------------*/
48 sbit B_0 = B^0;
49 sbit B_1 = B^1;
50 sbit B_2 = B^2;
51 sbit B_3 = B^3;
52 sbit B_4 = B^4;
53 sbit B_5 = B^5;
54 sbit B_6 = B^6;
55 sbit B_7 = B^7;
C51 COMPILER V8.15 LCD_PART_12864J 03/17/2009 18:11:02 PAGE 2
56
57 sbit ACC_7 = ACC^7;
58
59 bit lcd_point(uchar x,uchar y);
60 bit lcd_display(uchar Byte[], uchar x, uchar y, uchar xrange, uchar yrange);
61 void wr_lcd(bit dat_comm,unsigned char content);
62 void XYadr(unsigned char x,unsigned char y);
63 unsigned char rd_lcd(void);
64
65 /******************************************************************************************
66 * 函数名称 :lcd_line
67 * 功能描述 :画线函数
68 * 参数 : 参数名称: 输入/输出 类型 描述
69 * x1 input uchar 第一点行位置数据(0-127)
70 * y1 input uchar 第一点列位置数据(0-63)
71 * x2 input uchar 第二点位置数据(0-127)
72 * y2 input uchar 第二点位置数据(0-63)
73 * 返回值 :
74 * 作者 :lujian
75 * 创建日期 :2003-12-19
76 * 全局变量 :
77 * 全局静态变量:
78 * 局部静态变量:
79 *----------------------------------------修改历史------------------------------------------
80 * 当前版本 :0.0.2 修改人:lujian 修改日期:2009-3-16
81 * 修改说明 :
82 ******************************************************************************************/
83
84 bit lcd_line(uchar x1, uchar y1, uchar x2, uchar y2)
85 {
86 1 FP32 a = 0;
87 1 schar b = 0,c = 0,t = 0,e = 0,f = 0;
88 1
89 1 if( x1 < 0 || x1 > 127 ||
90 1 x2 < 0 || x2 > 127 ||
91 1 y1 < 0 || y1 > 63 ||
92 1 y2 < 0 || y2 > 63)
93 1 {
94 2 return FALSE;
95 2 }
96 1 else if(x1 == x2)
97 1 {
98 2 if(y1 > y2)
99 2 {
100 3 for(b = y1 - y2; b >= 0; b--)
101 3 lcd_point(x1, y2+b);
102 3 }
103 2 else
104 2 {
105 3 for(b = y2-y1; b >= 0; b--)
106 3 lcd_point(x1, y1+b);
107 3 }
108 2 }
109 1 else if(y1 == y2)
110 1 {
111 2 if(x1 > x2)
112 2 {
113 3 for(b = x1-x2; b >= 0; b--)
114 3 lcd_point(x2+b, y1);
115 3 }
116 2 else
117 2 {
C51 COMPILER V8.15 LCD_PART_12864J 03/17/2009 18:11:02 PAGE 3
118 3 for(b = x2-x1; b >= 0; b--)
119 3 lcd_point(x1+b, y1);
120 3 }
121 2 }
122 1 else
123 1 {
124 2 if(x1 < x2)
125 2 {
126 3 t = x1;
127 3 x1 = x2;
128 3 x2 = t;
129 3 t = y1;
130 3 y1 = y2;
131 3 y2 = t;
132 3 }
133 2 if(y1 > y2)
134 2 {
135 3 e = x1-x2;
136 3 f = y1-y2;
137 3 a = (float)e/(float)f;
138 3 for(b = f; b >= 0; b--)
139 3 {
140 4 c = b * a;
141 4 lcd_point(x2+c, y2+b);
142 4 }
143 3 }
144 2 else
145 2 {
146 3 e = y2-y1;
147 3 f = x1-x2;
148 3 a = (float)e/(float)f;
149 3 for(b = f; b >= 0; b--)
150 3 {
151 4 c = a * b;
152 4 lcd_point(b+x2, y2-c);
153 4 }
154 3 }
155 2 }
156 1 return TRUE;
157 1 }
158
159 /******************************************************************************************
160 * 函数名称 :lcd_Point
161 * 功能描述 :画点函数
162 * 参数 : 参数名称: 输入/输出 类型 描述
163 * x input uchar 第一点行位置数据(0-127)
164 * y input uchar 第一点列位置数据(0-63)
165 * 返回值 :正确:1; 错误:0,x或y值超范围
166 * 作者 :lujian
167 * 创建日期 :2003-12-19
168 * 全局变量 :
169 * 全局静态变量:
170 * 局部静态变量:
171 *----------------------------------------修改历史------------------------------------------
172 * 当前版本 :0.0.2 修改人:lujian 修改日期:2009-3-16
173 * 修改说明 :
174 ******************************************************************************************/
175
176 bit lcd_point(uchar x,uchar y)
177 {
178 1 uchar a, d1, d2;
179 1 uchar code Dot1[16] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,
C51 COMPILER V8.15 LCD_PART_12864J 03/17/2009 18:11:02 PAGE 4
180 1 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
181 1 uchar code Dot2[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
182 1 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
183 1
184 1 if(0 <= x && x <= 127)
185 1 {
186 2 a = x & 0x0f;
187 2 x = x >> 4;
188 2 }
189 1 else return FALSE;
190 1
191 1 if(y > 63)
192 1 {
193 2 return FALSE;
194 2 }
195 1
196 1 wr_lcd(comm,DISPLAY_OFF);
197 1 XYadr(x,y); //x(0-7),y(0-63)
198 1
199 1 rd_lcd();
200 1 d1 = rd_lcd();
201 1 d2 = rd_lcd();
202 1 d1 = d1 ^ Dot1[a];
203 1 d2 = d2 ^ Dot2[a];
204 1
205 1 XYadr(x,y);
206 1 wr_lcd(dat,d1);
207 1 wr_lcd(dat,d2);
208 1 wr_lcd (comm,DISPLAY_ON);
209 1 return TRUE;
210 1 }
211
212 /******************************************************************************************
213 * 函数名称 :lcd_display
214 * 功能描述 :图像填入函数支持图像最大分辨率255*255(x,y都为0时)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -