并行12864头文件.docx
《并行12864头文件.docx》由会员分享,可在线阅读,更多相关《并行12864头文件.docx(19页珍藏版)》请在冰豆网上搜索。
并行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;itemp1[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