📄 lcd_draw.lst
字号:
C51 COMPILER V7.50 LCD_DRAW 08/08/2008 00:58:18 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD_DRAW
OBJECT MODULE PLACED IN LCD_DRAW.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE LCD_DRAW.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************************************************************************
2 * 文件名: LCD_DRAW.c *
3 * Copyright (c) 2008 *********武汉理工大学信息工程学院电信系 *
4 * 创建人: 王康 *
5 * 日 期: 2008.8.6实现了液晶屏上任意显示汉字的功能 *
6 * 修改人: 王康 *
7 * 日 期: 2008.8.7完成了工程功能的扩充,即在液晶屏的任意位置打点,可以用来波形显示 *
8 * 描 述: 本文件主要完成了在液晶上任意位置打点的功能,包含了一些基本作图函数,可供其他模块调用 *
9 * 接口定义: 用的是熊涛那块12864接口板,接口按板上定义进行配置 *
10 * P1口接DB7 -- DB0 *
11 * DI -- P3.7, 数据/指令 选择 *
12 * RW -- P3.6, 读/写选择 *
13 * E -- P3.5, 使能信号 *
14 * CS2 -- P3.4, 片选1, 右半片 *
15 * CS1 -- P3.3, 片选2, 左半片 *
16 * RST -- P3.2, 复位 *
17 * 版 本: KEIL uV2 *
18 ****************************************************************************************************/
19
20
21 //头文件
22 #include "config.h"
23
24
25 /*****************************************************************************************************
26 * 函 数 名: PlotDot
27 * 功能描述: 本函数为打点子函数,可以在液晶屏上的任意位置进行打点
28 * 第0行第0列的第一个点可以看作是坐标原点,在打一个点的时候,要先读出要清除的那个点的位置
29 * 所在的字节数据,在打一个点的时候,保持该字节里其他的点不变
30 * 全局变量: 无
31 * 入口参数: x,可以看作是打点的横坐标
32 * y,可以看作是打点的纵坐标
33 * 出口参数: 无
34 * 调用模块: WriteData(),SetPos()
35 * 作 者: 王康
36 * 日 期: 2008.8.7
37 * 修 改 人: 王康
38 * 日 期:
39 * 版 本: KEIL uV2
40 ******************************************************************************************************/
41 void PlotDot(uchar x, uchar y)
42 {
43 1 uchar rdtmp; //用来存放读到的字节数据
44 1 SetPos(0, y / 8, x); //首先找到要打点的那个位置所在的字节
45 1 rdtmp = ReadData(); //读数据
46 1 rdtmp = ReadData(); //再次读数据,保证读进来数据的正确性
47 1 SetPos(0, y / 8, x); //找到要打的点所在的字节位置
48 1 WriteData(rdtmp | (0x01 << (y % 8))); //打点
49 1 }
50
51
52 /*****************************************************************************************************
53 * 函 数 名: ClrDot
54 * 功能描述: 本函数为清除点子函数,可以清除液晶屏上的任意位置原有的点
55 * 第0行第0列的第一个点可以看作是坐标原点.在清除一个点的时候,要先读出要清除的那个点的位置
C51 COMPILER V7.50 LCD_DRAW 08/08/2008 00:58:18 PAGE 2
56 * 所在的字节数据,只能清除一个点,而要保持其他的点不变
57 * 全局变量: 无
58 * 入口参数: x,可以看作是打点的横坐标
59 * y,可以看作是打点的纵坐标
60 * 出口参数: 无
61 * 调用模块: WriteData(),SetPos()
62 * 作 者: 王康
63 * 日 期: 2008.8.7
64 * 修 改 人: 王康
65 * 日 期:
66 * 版 本: KEIL uV2
67 ******************************************************************************************************/
68 void ClrDot(uchar x, uchar y)
69 {
70 1 uchar rdtmp; //用来存放读到的字节数据
71 1 SetPos(0, y / 8, x); //首先找到要清除的那个点的位置所在的字节
72 1 rdtmp = ReadData(); //读数据
73 1 rdtmp = ReadData(); //再次读数据,保证读进来数据的正确性
74 1 SetPos(0, y / 8, x); //找到要清除的点所在的字节位置
75 1 WriteData((~(0x01 << (y % 8))) & rdtmp); //清除要清除的点
76 1 }
77
78
79 /*****************************************************************************************************
80 * 函 数 名: DrawLine
81 * 功能描述: 本函数为画直线子函数,可以在液晶屏上的任意位置画直线
82 * 第0行第0列的第一个点可以看作是坐标原点.本函数输入两个点的坐标,可以借助"math.h"库中的
83 * 函数,利用两点式求直线方程,由于直线的斜率既可以为正又可以为负,因此将点的坐标定义为char型
84 * 全局变量: 无
85 * 入口参数: X1,Y1,可以看作是第一个点的横纵坐标
86 * X2,Y2,可以看作是第二个点的横纵坐标
87 * 出口参数: 无
88 * 调用模块: PlotDot()
89 * 作 者: 王康
90 * 日 期: 2008.8.7
91 * 修 改 人: 王康
92 * 日 期:
93 * 版 本: KEIL uV2
94 ******************************************************************************************************/
95 void DrawLine(char X1, char Y1, char X2, char Y2)
96 {
97 1 char X; //定义函数自变量
98 1 char Y; //定义函数因变量
99 1 float K; //定义直线的斜率
100 1 K = (Y2 - Y1) * 1.0 / (X2 - X1); //根据数学公式求出直线的斜率
101 1 for(X = X1; X < X2; X++)
102 1 {
103 2 Y = K * (X - X1) + Y1; //得出直线方程
104 2 PlotDot(X , Y);
105 2 }
106 1 }
107
108
109 /*****************************************************************************************************
110 * 函 数 名: Test1
111 * 功能描述: 本函数为测试子函数1
112 * 实现的功能是从上到下,从左到右,一个一个的打点,点打后不熄灭
113 * 全局变量: 无
114 * 入口参数: 无
115 * 出口参数: 无
116 * 调用模块: PlotDot()
117 * 作 者: 王康
C51 COMPILER V7.50 LCD_DRAW 08/08/2008 00:58:18 PAGE 3
118 * 日 期: 2008.8.7
119 * 修 改 人: 王康
120 * 日 期:
121 * 版 本: KEIL uV2
122 ******************************************************************************************************/
123 void Test1(void)
124 {
125 1 uchar i; //横坐标
126 1 uchar j; //纵坐标
127 1 uint k; //用于延时
128 1 for(i = 0; i < 128; i++)
129 1 {
130 2 for(j = 0; j < 64; j++)
131 2 {
132 3 PlotDot(i, j);
133 3 for(k = 0; k < 500; k++);
134 3 }
135 2 }
136 1 }
137
138
139 /*****************************************************************************************************
140 * 函 数 名: Test2
141 * 功能描述: 本函数为测试子函数2
142 * 实现的功能是从左到右,从上到下,一个一个的打点,点打后不熄灭
143 * 全局变量: 无
144 * 入口参数: 无
145 * 出口参数: 无
146 * 调用模块: PlotDot()
147 * 作 者: 王康
148 * 日 期: 2008.8.7
149 * 修 改 人: 王康
150 * 日 期:
151 * 版 本: KEIL uV2
152 ******************************************************************************************************/
153 void Test2(void)
154 {
155 1 uchar i;
156 1 uchar j;
157 1 uint k;
158 1 for(i = 0; i < 64; i++)
159 1 {
160 2 for(j = 0; j < 128; j++)
161 2 {
162 3 PlotDot(j,i);
163 3 for(k = 0; k < 500; k++);
164 3 }
165 2 }
166 1 }
167
168
169
170 /*****************************************************************************************************
171 * 函 数 名: Test3
172 * 功能描述: 本函数为测试子函数3
173 * 实现的功能是在液晶屏幕上打出一个正弦波
174 * 全局变量: 无
175 * 入口参数: 无
176 * 出口参数: 无
177 * 调用模块: PlotDot()
178 * 作 者: 王康
179 * 日 期: 2008.8.7
C51 COMPILER V7.50 LCD_DRAW 08/08/2008 00:58:18 PAGE 4
180 * 修 改 人: 王康
181 * 日 期:
182 * 版 本: KEIL uV2
183 ******************************************************************************************************/
184 void Test3(void)
185 {
186 1 uchar x;
187 1 uint k;
188 1 uchar y;
189 1 for(x = 0;x < 128; x++)
190 1 {
191 2 y = 30 - 20 * sin(x * 3.14 / 32);
192 2 PlotDot(x, y);
193 2 for(k = 0; k < 5000; k++);
194 2 }
195 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 491 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 21
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 + -