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

📄 draw_12864.c

📁 基于MSP430F14X单片机的红外接收程序
💻 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 + -