IO0SET=en; IO0CLR=en; }
/****************************************************************************
* 函数名称:WrDat() * 函数功能:写数据
* 入口参数:dat,待写入LCD的数据 ****************************************************************************/
void WrDat(uint8 dat) { ChkBusy(); IO0SET=rs; IO0CLR=rw; IO0CLR=IO0CLR|0xff00; //先清零 IO0SET=dat<<8; //再送数 IO0SET=en; IO0CLR=en; }
/****************************************************************************
* 函数名称:lcd_init() * 函数功能:lcd初始化
****************************************************************************/
void lcd_init(void) { WrOp(0x38); WrOp(0x06); WrOp(0x0c); }
/***************************************************************************
* 函数名称:LocateXY() * 函数功能:显示光标定位
* 入口参数:posx LCD列位置,posy LCD行
位置
****************************************************************************/
void LocateXY( uint8 posx,uint8 posy) { uint8 temp; temp = posx & 0xf; posy &= 0x1; if ( posy )temp |= 0x40; temp |= 0x80; WrOp(temp); }
/***************************************************************************
* 函数名称:DispOneChar() * 函数功能:显示单字符
* 入口参数:x LCD列位置,y LCD行位置,Wdata 显示字符
****************************************************************************/
void DispOneChar(uint8 x,uint8 y,uint8 Wdata) {
LocateXY( x, y ); // 定位显示字符的x,y位置 WrDat( Wdata ); // 写字符 }
/***************************************************************************
* 函数名称:ePutstr() * 函数功能:显示字符串
* 入口参数:x LCD列,y LCD行,j 字符串长度,*ptr 字符串指针
****************************************************************************/
void ePutstr(uint8 x,uint8 y, uint8 j,uint8 *ptr){ uint8 i,l=0;
for (i=0;i /**************************************************************************** * 函数名称:DisText() * 函数功能:显示文本 * 入口参数:addr LCD DDRAM地址,*p 文本指针 ****************************************************************************/ void DisText(uint8 addr,char *p) { WrOp(addr); while(*p !='\\0')WrDat(*(p++)); } /**************************************************************************** * 函数名称:main() * 函数功能:LCD初始化,自定义汉字字符,LCD显示英文和汉字字符。 ****************************************************************************/ int main(void) { uint8 i; uint8 examp1[]={0x32,0x30,0x31,0x32,0x00,0x31,0x01,0x32,0x36,0x02}; uint8 Hzzimo[]={0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x00, // 年 0x0F,0x09,0x0F,0x09,0x0F,0x09,0x11,0x00, // 月 0x0F,0x09,0x09,0x0F,0x09,0x09,0x0F,0x00}; // 日 lcd_init(); // LCD初始化 WrOp( 0x40 ); // 自定义汉字字符:年、月、日 for (i=0;i<24;i++){ WrDat(Hzzimo[i]); } DisText(0x80,\ // 第一行从第0位开始显示英文字符 ePutstr(4,1,10,examp1); // 第二行从第4位开始显示2012年1月26日 while(1); } 八、LCD 1602显示2 实验电路图: 源程序: #include \#define rs (1<<5) #define rw (1<<6) #define en (1<<7) #define busy (1<<15) /* 函数名称:ChkBusy() * 函数功能:检查总线是否忙**/ void ChkBusy() { IO0DIR=0xf0; while(1) { IO0CLR=rs; IO0SET=rw; IO0SET=en; if(!(IO0PIN & busy))break; IO0CLR=en; } IO0DIR=0xffffffff;} /* 函数名称:WrOp() * 函数功能:写命令 * 入口参数:dat,待写入LCD的命令 **/ void WrOp(uint8 dat) { ChkBusy();IO0CLR=rs;IO0CLR=rw; IO0CLR=IO0CLR|0xff00; //先清零 IO0SET=dat<<8; //再送数 IO0SET=en;IO0CLR=en;} /* 函数名称:WrDat() * 函数功能:写数据 * 入口参数:dat,待写入LCD的数据 **/ void WrDat(uint8 dat) { ChkBusy();IO0SET=rs;IO0CLR=rw; IO0CLR=IO0CLR|0xff00; //先清零 IO0SET=dat<<8; //再送数 IO0SET=en;IO0CLR=en;} /* 函数名称:lcd_init() * 函数功能:lcd初始化**/ void lcd_init(void) { WrOp(0x38);WrOp(0x06);WrOp(0x0c); } /* 函数名称:DisText() * 函数功能:显示文本 * 入口参数:addr LCD DDRAM地址,*p 文本指针 **/ void DisText(uint8 addr,char *p) { WrOp(addr); while(*p !='\\0')WrDat(*(p++));} /* 函数名称:main() * 函数功能:LCD初始化,自定义汉字字符,LCD显示英文和汉字字符。**/ int main(void) { uint8 i; lcd_init(); // LCD初始化 DisText(0x80,\ DisText(0xc0,\hijklmn\ while(1);} 九、LCD 1602显示3 实验电路图: 源程序: #include \#define rs (1<<5) #define rw (1<<6) #define en (1<<7) #define busy (1<<15) /* 函数名称:ChkBusy() * 函数功能:检查总线是否忙**/ void ChkBusy() { IO0DIR=0xf0; while(1) { IO0CLR=rs; IO0SET=rw; IO0SET=en; if(!(IO0PIN & busy))break; IO0CLR=en; } IO0DIR=0xffffffff;} /* 函数名称:WrOp() * 函数功能:写命令 * 入口参数:dat,待写入LCD的命令 **/ void WrOp(uint8 dat) { ChkBusy();IO0CLR=rs;IO0CLR=rw; IO0CLR=IO0CLR|0xff00; //先清零 IO0SET=dat<<8; //再送数 IO0SET=en;IO0CLR=en;} /* 函数名称:WrDat() * 函数功能:写数据 * 入口参数:dat,待写入LCD的数据 **/ void WrDat(uint8 dat) { ChkBusy();IO0SET=rs;IO0CLR=rw; IO0CLR=IO0CLR|0xff00; //先清零 IO0SET=dat<<8; //再送数 IO0SET=en;IO0CLR=en;} /* 函数名称:lcd_init() * 函数功能:lcd初始化**/ void lcd_init(void) { WrOp(0x38);WrOp(0x06);WrOp(0x0c); } /* 函数名称:DisText() * 函数功能:显示文本 * 入口参数:addr LCD DDRAM地址,*p 文本指针 **/ void DisText(uint8 addr,char *p) { WrOp(addr); while(*p !='\\0')WrDat(*(p++));} /* 函数名称:main() * 函数功能:LCD初始化,自定义汉字字符,LCD显示英文和汉字字符。**/ int main(void) { uint8 i; lcd_init(); // LCD初始化 DisText(0x80,\hijklmn\DisText(0xc0,\ while(1);} 十、PWM脉宽调制 实验内容: LPC2131芯片PWM模块可以实现6路单边沿控制或者3路双边沿控制,或者两者混合输出。 实验电路图: 源程序: #include uint8 Flash_Count = 0; uint8 Operation_Type = 1; void DelayMS(uint16 x) { uint16 t; while(x--) {for(t=500;t>0;t--);} }