⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_draw.c

📁 基于MSP430F14X单片机的LCD12864的显示驱动程序
💻 C
字号:
/****************************************************************************************************
* 文件名:	LCD_DRAW.c																				*
* Copyright (c) 2008 *********武汉理工大学信息工程学院电信系										*
* 创建人:	王康																					*
* 日 期:	2008.8.6实现了液晶屏上任意显示汉字的功能												*
* 修改人:	王康																					*
* 日 期:	2008.8.7完成了工程功能的扩充,即在液晶屏的任意位置打点,可以用来波形显示					*
* 描 述:	本文件主要完成了在液晶上任意位置打点的功能,包含了一些基本作图函数,可供其他模块调用		*
* 接口定义:	用的是熊涛那块12864接口板,接口按板上定义进行配置										*
*			P1口接DB7 -- DB0																		*
*			DI -- P3.7, 数据/指令 选择																*
*			RW -- P3.6, 读/写选择																	*
*			E -- P3.5, 使能信号																		*
*			CS2 -- P3.4, 片选1, 右半片																*
*			CS1 -- P3.3, 片选2, 左半片																*
*			RST -- P3.2, 复位																		*
* 版 本:	KEIL uV2																				*
****************************************************************************************************/


//头文件
#include "config.h"


/*****************************************************************************************************
* 函 数 名:	PlotDot
* 功能描述: 本函数为打点子函数,可以在液晶屏上的任意位置进行打点
*			第0行第0列的第一个点可以看作是坐标原点,在打一个点的时候,要先读出要清除的那个点的位置
*          	所在的字节数据,在打一个点的时候,保持该字节里其他的点不变
* 全局变量: 无
* 入口参数:	x,可以看作是打点的横坐标
*			y,可以看作是打点的纵坐标
* 出口参数:	无
* 调用模块: WriteData(),SetPos()
* 作 	者:	王康
* 日 	期:	2008.8.7
* 修 改 人:	王康
* 日 	期:
* 版  	本:	KEIL uV2
******************************************************************************************************/
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
* 修 改 人:	王康
* 日 	期:
* 版  	本:	KEIL uV2
******************************************************************************************************/
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
* 修 改 人:	王康
* 日 	期:
* 版  	本:	KEIL uV2
******************************************************************************************************/
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 = 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
* 修 改 人:	王康
* 日 	期:
* 版  	本:	KEIL uV2
******************************************************************************************************/
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
* 修 改 人:	王康
* 日 	期:
* 版  	本:	KEIL uV2
******************************************************************************************************/
void Test3(void)
{
	uchar	x;
	uint	k;
	uchar	y;
	for(x = 0;x < 128; x++)
	{
		y = 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 + -