并行12864头文件.docx

上传人:b****8 文档编号:9138844 上传时间:2023-02-03 格式:DOCX 页数:19 大小:18.96KB
下载 相关 举报
并行12864头文件.docx_第1页
第1页 / 共19页
并行12864头文件.docx_第2页
第2页 / 共19页
并行12864头文件.docx_第3页
第3页 / 共19页
并行12864头文件.docx_第4页
第4页 / 共19页
并行12864头文件.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

并行12864头文件.docx

《并行12864头文件.docx》由会员分享,可在线阅读,更多相关《并行12864头文件.docx(19页珍藏版)》请在冰豆网上搜索。

并行12864头文件.docx

并行12864头文件

/***本程序为LCD12864并行事例程序,12864并行的头文件也在末尾附上***/

/***接口为msp430,51单片机只要稍加修改即可***/

/***内有显示数字、汉字、画数学函数图、显示字模点阵等操作***/

/***madeby糖coffee@uestc***/

#include

#include"lcd12864_p.h"

#include"math.h"

/***main.c***/

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;

Initial_LCD();

ClearLCD();

DrawL(0,0,127,63,1);

for(unsignedinti=0;i<127;i++)

{

unsignedinty=(unsignedint)((1+sin(i/10.0))*31.0);

unsignedintx=(unsignedint)((1+cos(i/10.0))*31.0);;

DrawP(i,y,1);DrawP(i,x,1);DrawP(x,y,1);//LCD_DrawP(x,y,0);

Set_cursor(1,3);PutsLCD("正弦曲线");

}

while

(1);

}

附12864头文件

/******lcd12864并行程序******/

/*-----------------------------------------------

Headfile:

LCD12864

DevicePin:

1-VSS2-VDD3-V0

4-RS5-R/W6-E

7-14DB0-DB7

------------------------------------------------*/

#ifndef__lcd12864_p

#define__lcd12864_p

/********************宏定义********************/

#defineDataDIRP3DIR

#defineDataOUTP3OUT

#defineDataINP3IN

#defineLCD_RSBIT1

#defineLCD_RWBIT3

#defineLCD_EBIT5

#defineLCD_DIRP2DIR

#defineLCD_CTRLP2OUT

#defineLCD_RS_Set_highLCD_CTRL|=LCD_RS

#defineLCD_RS_Set_lowLCD_CTRL&=~LCD_RS

#defineLCD_RW_Set_highLCD_CTRL|=LCD_RW

#defineLCD_RW_Set_lowLCD_CTRL&=~LCD_RW

#defineLCD_E_Set_highLCD_CTRL|=LCD_E

#defineLCD_E_Set_lowLCD_CTRL&=~LCD_E

/********************常用子函数********************/

unsignedcharlcd_buffer[128][64];

intABS(intx)

{

return(x>0?

x:

-x);

}

/*

voidLCD_Update(unsignedcharX,unsignedcharY)

{

if(X>=127||Y>=63)return;

ReadOldH=lcd_buffer[X+1][Y];

ReadOldL=lcd_buffer[X][Y];

Y>>=3;

LCD_WriteCMD(0x34);

LCD_WriteCMD(0x36);

Tier=X>>4;

Tier_bit=X&0x0f;

if(Y<32){

Row=Y;

}else{

Row=Y-32;

Tier+=8;

}//P1.3pullup

LCD_WriteCMD(Row+0x80);

LCD_WriteCMD(Tier+0x80);

LCD_WriteDAT(ReadOldH);

LCD_WriteDAT(ReadOldL);

LCD_WriteCMD(0x30);

}

*/

/*******************************************

函数名称:

delay

功能:

用于消抖的延时

参数:

返回值:

********************************************/

voidDelayus(unsignedchart)

{

while(t--);

}

voidDelay5ms(void)

{

for(unsignedinti=5000;i;i--);

}

/****************************************************

函数名称:

LCD_WaitForEnable

功能:

等待12864液晶完成内部操作

参数说明:

返回值:

****************************************************/

voidLCD_WaitForEnable()

{

unsignedcharbusy;

LCD_RS_Set_low;

LCD_RW_Set_high;

DataDIR=0x00;

do

{

LCD_E_Set_high;

_NOP();

busy=DataIN;

LCD_E_Set_low;

}

while(busy&0x80);

DataDIR=0xff;

}

/****************************************************

函数名称:

LCD_WriteCMD(unsignedcharcmd,unsignedcharcheck)

功能:

向12864液晶写入指令

参数:

cmd--待写指令

check--是否判忙的标志,1:

判忙,0:

判忙

返回值:

****************************************************/

voidLCD_WriteCMD(unsignedcharcmd)

{

LCD_WaitForEnable();//检测忙信号

LCD_RS_Set_low;

LCD_RW_Set_low;

_NOP();

DataOUT=cmd;

_NOP();

LCD_E_Set_high;

_NOP();

LCD_E_Set_low;

}

/****************************************************

函数名称:

LCD_WriteDAT(unsignedchardata)

功能:

向1602液晶显示的当前地址写入显示数据

参数:

data--显示的字符数据(ASCII码,或以''界定)

返回值;无

****************************************************/

voidLCD_WriteDAT(unsignedchardata)

{

LCD_WaitForEnable();//等待液晶不忙

LCD_RS_Set_high;

LCD_RW_Set_low;

_NOP();

DataOUT=data;//将显示数据写入数据端口

_NOP();

LCD_E_Set_high;//产生使能脉冲信号

_NOP();

LCD_E_Set_low;

}

/****************************************************

函数名称:

initial_lcd

功能:

12864液晶复位

参数说明:

返回值:

****************************************************/

voidInitial_LCD(void)

{

LCD_DIR|=(LCD_RS+LCD_RW+LCD_E);//控制线端口设置为输出

DataDIR=0xff;//数据线端口设置为输出

Delay5ms();

LCD_WriteCMD(0x30);//基本指令集

Delay5ms();

LCD_WriteCMD(0x01);//清屏,地址00H

Delay5ms();

LCD_WriteCMD(0x06);//光标的移动方向

Delay5ms();

LCD_WriteCMD(0x0c);//开显示,关游标

Delay5ms();

}

/****************************************************

函数名称:

LCD_SetCursor(unsignedcharx,unsignedchary)

功能:

向液晶发送显示坐标

参数说明:

x--列坐标

y--行坐标

返回值:

****************************************************/

voidSet_cursor(unsignedcharCurY,unsignedcharCurX)

{

switch(CurY)

{

case0:

LCD_WriteCMD(0x80+CurX);

break;//写入第一行CurX列的地址

case1:

LCD_WriteCMD(0x90+CurX);

break;//写入第二行CurX列的地址

case2:

LCD_WriteCMD(0x88+CurX);

break;//写入第三行CurX列的地址

case3:

LCD_WriteCMD(0x98+CurX);

break;//写入第四行CurX列的地址

default:

break;

}

}

/****************************************************

函数名称:

PutcLCD(unsignedchardata)

功能:

向12864液晶写字符

参数说明:

x,y--坐标

Data--数据

返回值:

****************************************************/

voidPutcLCD(unsignedchardata)

{

LCD_WriteDAT(data);

}

voidPutDig(unsignedcharnum)

{

LCD_WriteDAT(num+0x30);

}

/*****************************************************************

函数名称:

PutArray(unsignedchar*data,unsignedcharlength,unsignedcharaddress)

函数功能:

在LCD上显示一个数组(显示一串字符的前length个)

输入变量:

unsignedchardata

unsignedcharlength

unsignedcharaddress

调用函数:

Write_Data()

*****************************************************************/

voidPutArray(unsignedchar*data,unsignedcharlength,unsignedcharaddress)

{

unsignedchari;

if(address!

=0)//判断是否改变当前位置

{

//如果cAddr不为零,则改变按cAddr改变当前位置

LCD_WriteDAT(address);//sendthebeginningaddress

}

for(i=0;i

{

LCD_WriteDAT(data[i]);

}

}

/************************************************

函数名称:

PutInt(unsignedintnum)

函数功能:

显示十进制数

输入变量:

unsignedintnum

输出变量:

调用函数:

************************************************/

voidPutInt(unsignedintnum)

{

unsignedintsnum;

unsignedchartemp[12]={0},temp1[12]={0};

unsignedchari=0,n=0;

snum=num;

if(snum==0)

{

temp[0]='0';

i++;

}

while(num!

=0)

{

temp[i]=num%10+0x30;

num=num/10;

i++;

}

n=i;

for(i=0;i

temp1[i]=temp[n-1-i];

PutArray(temp1,n,0);

}

/***********************************************

函数名称:

PutsLCD()

功能描述:

LCD写入RAM字符串

输 入:

字符指针 Str

输 出:

***********************************************/

voidPutsLCD(unsignedchar*Str)

{

while(*Str!

='\0')//字符串还没有结束

{

LCD_WriteDAT(*Str);

Str++;

}

}

voidClearLCD()//CLR_GDRAM

{

unsignedcharx,y;

for(y=0;y<64;y++)

for(x=0;x<16;x++)

{

LCD_WriteCMD(0x34);

LCD_WriteCMD(y+0x80);//行地址

LCD_WriteCMD(x+0x80);//列地址

LCD_WriteCMD(0x30);

LCD_WriteDAT(0x00);

LCD_WriteDAT(0x00);

}

}

unsignedcharReadByte()

{

unsignedcharbyReturnValue;

LCD_WaitForEnable();

DataDIR=0x00;

LCD_RW_Set_high;

LCD_E_Set_low;

LCD_RS_Set_high;

_NOP();

_NOP();

LCD_E_Set_high;

byReturnValue=DataIN;

LCD_E_Set_low;

DataDIR=0xff;

returnbyReturnValue;

}

//*******************************************************************

//函数名称:

PutHex(unsignedcharHEX_Val)

//功能描述:

LCD写入十六进制数

//输入变量:

unsignedcharHEX_Val

//*******************************************************************

voidPutHex(unsignedchardata)

{

unsignedchartemp;

LCD_WriteDAT('0');

LCD_WriteDAT('x');//使前两位是0x

temp=data>>4;

if(temp>9)temp+=0x37;/*0-9的BCD码为X+0X30*/

elsetemp+=0x30;/*A-F的BCD码为X+0X37*/

LCD_WriteDAT(temp);

temp=data&0x0F;

if(temp>9)temp+=0x37;

elsetemp+=0x30;

LCD_WriteDAT(temp);

}

//*******************************************************************

//函数名称:

DrawP(unsignedcharX,unsignedcharY,unsignedcharColor)

//功能描述:

LCD打点

//输入变量:

X-横坐标,Y-纵坐标,Color-0擦除1点亮2取反

//*******************************************************************

voidDrawP(unsignedcharX,unsignedcharY,unsignedcharColor)

{

unsignedcharRow,Tier,Tier_bit;

unsignedcharReadOldH,ReadOldL;

LCD_WriteCMD(0x34);

LCD_WriteCMD(0x36);

Tier=X>>4;

Tier_bit=X&0x0f;

if(Y<32){

Row=Y;

}else{

Row=Y-32;

Tier+=8;

}

LCD_WriteCMD(Row+0x80);//垂直(列)地址

LCD_WriteCMD(Tier+0x80);//水平(行)地址

ReadByte();

ReadOldH=ReadByte();

ReadOldL=ReadByte();

LCD_WriteCMD(Row+0x80);

LCD_WriteCMD(Tier+0x80);

if(Tier_bit<8){

switch(Color){

case0:

ReadOldH&=(~(0x01<<(7-Tier_bit)));break;

case1:

ReadOldH|=(0x01<<(7-Tier_bit));break;

case2:

ReadOldH^=(0x01<<(7-Tier_bit));break;

default:

break;

}

}else{

switch(Color){

case0:

ReadOldL&=(~(0x01<<(15-Tier_bit)));break;

case1:

ReadOldL|=(0x01<<(15-Tier_bit));break;

case2:

ReadOldL^=(0x01<<(15-Tier_bit));break;

default:

break;

}

}

LCD_WriteDAT(ReadOldH);

LCD_WriteDAT(ReadOldL);

LCD_WriteCMD(0x30);

}

//*******************************************************************

//函数名称:

DrawLX(unsignedcharX0,unsignedcharX1,unsignedcharY,unsignedcharColor)

//功能描述:

LCD画水平线

//输入变量:

(X0,Y)-起点,(X1,Y)-终点,Color-0擦除1点亮2取反

//*******************************************************************

voidDrawLX(unsignedcharX0,unsignedcharX1,unsignedcharY,unsignedcharColor)

{

unsignedcharTemp;

if(X0>X1)

{

Temp=X1;

X1=X0;

X0=Temp;

}

for(;X0<=X1;X0++)DrawP(X0,Y,Color);

}

//*******************************************************************

//函数名称:

DrawLY(charX,unsignedcharY0,unsignedcharY1,unsignedcharColor)

//功能描述:

LCD画垂直线

//输入变量:

(X,Y0)-起点,(X,Y1)-终点,Color-0擦除1点亮2取反

//*******************************************************************

voidDrawLY(unsignedcharX,unsignedcharY0,unsignedcharY1,unsignedcharColor)

{

unsignedcharTemp;

if(Y0>Y1)

{

Temp=Y1;

Y1=Y0;

Y0=Temp;

}

for(;Y0<=Y1;Y0++)DrawP(X,Y0,Color);

}

//*******************************************************************

//函数名称:

DrawLX(unsignedcharX0,unsignedcharX1,uns

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1