📄 draw_12864.c
字号:
/****************************************************************************************************
* 文件名: DRAW_12864.c *
* Copyright (c) 2008 *********武汉理工大学信息工程学院电信系 *
* 创建人: 王康 *
* 日 期: 2008.8.6实现了液晶屏上任意显示汉字的功能 *
* 修改人: 王康 *
* 日 期: 2008.8.7完成了工程功能的扩充,即在液晶屏的任意位置打点,可以用来波形显示 *
* 描 述: 本文件主要完成了在液晶上任意位置打点的功能,包含了一些基本作图函数,可供其他模块调用 *
* 接口定义: *
* 版 本: IAR V4.11 *
****************************************************************************************************/
//头文件
#include "config.h"
/*****************************************************************************************************
* 函 数 名: PlotDot
* 功能描述: 本函数为打点子函数,可以在液晶屏上的任意位置进行打点
* 第0行第0列的第一个点可以看作是坐标原点,在打一个点的时候,要先读出要清除的那个点的位置
* 所在的字节数据,在打一个点的时候,保持该字节里其他的点不变
* 全局变量: 无
* 入口参数: x,可以看作是打点的横坐标
* y,可以看作是打点的纵坐标
* 出口参数: 无
* 调用模块: WriteData(),SetPos()
* 作 者: 王康
* 日 期: 2008.8.7
* 修 改 人: 王康
* 日 期:
* 版 本: IAR V4.11
******************************************************************************************************/
void PlotDot(uchar x, uchar y)
{
uchar rdtmp; //用来存放读到的字节数据
SetPos(0, y / 8, x); //首先找到要打点的那个位置所在的字节
rdtmp = ReadData(); //读数据
rdtmp = ReadData(); //再次读数据,保证读进来数据的正确性
SetPos(0, y / 8, x); //找到要打的点所在的字节位置
WriteData(rdtmp | (0x01 << (y % 8))); //打点
}
/*****************************************************************************************************
* 函 数 名: ClrDot
* 功能描述: 本函数为清除点子函数,可以清除液晶屏上的任意位置原有的点
* 第0行第0列的第一个点可以看作是坐标原点.在清除一个点的时候,要先读出要清除的那个点的位置
* 所在的字节数据,只能清除一个点,而要保持其他的点不变
* 全局变量: 无
* 入口参数: x,可以看作是打点的横坐标
* y,可以看作是打点的纵坐标
* 出口参数: 无
* 调用模块: WriteData(),SetPos()
* 作 者: 王康
* 日 期: 2008.8.7
* 修 改 人: 王康
* 日 期:
* 版 本: IAR V4.11
******************************************************************************************************/
void ClrDot(uchar x, uchar y)
{
uchar rdtmp; //用来存放读到的字节数据
SetPos(0, y / 8, x); //首先找到要清除的那个点的位置所在的字节
rdtmp = ReadData(); //读数据
rdtmp = ReadData(); //再次读数据,保证读进来数据的正确性
SetPos(0, y / 8, x); //找到要清除的点所在的字节位置
WriteData((~(0x01 << (y % 8))) & rdtmp); //清除要清除的点
}
/*****************************************************************************************************
* 函 数 名: DrawLine
* 功能描述: 本函数为画直线子函数,可以在液晶屏上的任意位置画直线
* 第0行第0列的第一个点可以看作是坐标原点.本函数输入两个点的坐标,可以借助"math.h"库中的
* 函数,利用两点式求直线方程,由于直线的斜率既可以为正又可以为负,因此将点的坐标定义为char型
* 全局变量: 无
* 入口参数: X1,Y1,可以看作是第一个点的横纵坐标
* X2,Y2,可以看作是第二个点的横纵坐标
* 出口参数: 无
* 调用模块: PlotDot()
* 作 者: 王康
* 日 期: 2008.8.7
* 修 改 人: 王康
* 日 期:
* 版 本: IAR V4.11
******************************************************************************************************/
void DrawLine(char X1, char Y1, char X2, char Y2)
{
char X; //定义函数自变量
char Y; //定义函数因变量
float K; //定义直线的斜率
K = (Y2 - Y1) * 1.0 / (X2 - X1); //根据数学公式求出直线的斜率
for(X = X1; X < X2; X++)
{
Y = (char)(K * (X - X1)) + Y1; //得出直线方程
PlotDot(X , Y);
}
}
/*****************************************************************************************************
* 函 数 名: Test1
* 功能描述: 本函数为测试子函数1
* 实现的功能是从上到下,从左到右,一个一个的打点,点打后不熄灭
* 全局变量: 无
* 入口参数: 无
* 出口参数: 无
* 调用模块: PlotDot()
* 作 者: 王康
* 日 期: 2008.8.7
* 修 改 人: 王康
* 日 期:
* 版 本: KEIL uV2
******************************************************************************************************/
void Test1(void)
{
uchar i; //横坐标
uchar j; //纵坐标
uint k; //用于延时
for(i = 0; i < 128; i++)
{
for(j = 0; j < 64; j++)
{
PlotDot(i, j);
for(k = 0; k < 500; k++);
}
}
}
/*****************************************************************************************************
* 函 数 名: Test2
* 功能描述: 本函数为测试子函数2
* 实现的功能是从左到右,从上到下,一个一个的打点,点打后不熄灭
* 全局变量: 无
* 入口参数: 无
* 出口参数: 无
* 调用模块: PlotDot()
* 作 者: 王康
* 日 期: 2008.8.7
* 修 改 人: 王康
* 日 期:
* 版 本: IAR V4.11
******************************************************************************************************/
void Test2(void)
{
uchar i;
uchar j;
uint k;
for(i = 0; i < 64; i++)
{
for(j = 0; j < 128; j++)
{
PlotDot(j,i);
for(k = 0; k < 500; k++);
}
}
}
/*****************************************************************************************************
* 函 数 名: Test3
* 功能描述: 本函数为测试子函数3
* 实现的功能是在液晶屏幕上打出一个正弦波
* 全局变量: 无
* 入口参数: 无
* 出口参数: 无
* 调用模块: PlotDot()
* 作 者: 王康
* 日 期: 2008.8.7
* 修 改 人: 王康
* 日 期:
* 版 本: IAR V4.11
******************************************************************************************************/
void Test3(void)
{
uchar x;
uint k;
uchar y;
for(x = 0;x < 128; x++)
{
y = (uchar)(30 - 20 * sin(x * 3.14 / 32));
PlotDot(x, y);
for(k = 0; k < 5000; k++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -