
//Drive:MSP430F413
//File: LCD1602_8.H
//Date: 08-7-29
//Time: 16:09
//Note: LCD1602 Mini Driver.
//QQ:269829973
//Mail:wty014198@163.com
/*------------------------------------------------------------------------------*/
#ifndef __LCD1602_8_H__
#define __LCD1602_8_H__
/*------------------------------------------------------------------------------*/
//LCD接口定义
//sfr io = 0x80 //P0-0x80,P1-0x90,P2-0xA0,P3-0xB0
//sbit rs = P1^0 //LCD数据/命令选择端(H/L)
//sbit rw = P1^1 //核亮帆LCD读/写选择端(H/L)
//sbit ep = P1^2 //LCD使能控制
//sbit bz = io^7 //LCD忙标志位
#define RS BIT7
#define RW BIT6
#define EN BIT5
/*------------------------------------------------------------------------------*/
//函数声明
void lcd_busy(void) //测试LCD忙碌状态程序
void lcd_wcmd(unsigned char cmd) //写入指令到LCD程序
void lcd_wdat(unsigned char dat) //写入数据到LCD程序
void lcd_pos( unsigned char y,unsigned char x)//LCD数据指针位置程序
//void printc(unsigned char CHAR) /键配/显示字符
void prints(unsigned char y,unsigned x,unsigned char n,unsigned char *string) //显示字符串改雹
void lcd_init(void)//LCD初始化设定程序
void lcd_clear(void)
void cursor_move(unsigned char yy,unsigned char xx)
void delay_nms(unsigned int n)
{
unsigned int i=0,j=0
for (i=ni>0i--)
for (j=0j<800j++)//800
}
void delay_mini(unsigned char n)
{
while(n--)
{
_NOP()
}
}
/*------------------------------------------------------------------------------*/
//测试LCD忙碌状态
void lcd_busy(void)
{ unsigned char bz
do{
P5OUT&=~(EN)//ep = 0
P5OUT&=~(RS)//rs = 0 //指令
P5OUT|=RW//rw = 1 //读出
P6OUT=0xff//io = 0xff
P5OUT|=EN //ep = 1
delay_mini(10) //_nop_()//高电平读出 1us
P6DIR=0
bz=(P6IN&BIT7)>>7
// bz=0
P6DIR=0xff
}while(bz) //bz=1表示忙,bz=0表示空闲
P5OUT&=~(EN) //ep = 0
delay_mini(100)
}
/*------------------------------------------------------------------------------*/
//写入指令到LCD
void lcd_wcmd(unsigned char cmd)
{
lcd_busy()//检测忙
P5OUT&=~(RS) //rs = 0 //指令
P5OUT&=~(RW) //rw = 0 //写入
P5OUT|=EN//ep = 1
delay_mini(5)
P6OUT = cmd//指令
delay_mini(5)
P5OUT&=~(EN) //ep = 0 //下降沿有效
delay_mini(5)
}
/*------------------------------------------------------------------------------*/
//写入数据函数
void lcd_wdat(unsigned char Data)
{
lcd_busy() //检测忙
P5OUT|=RS //rs = 1 //数据
P5OUT&=~(RW)//rw = 0 //写入
P5OUT|=EN //ep = 1
delay_mini(5)
P6OUT = Data //数据
delay_mini(5)
P5OUT&=~(EN)//ep = 0 //下降沿有效
delay_mini(5)
}
/*------------------------------------------------------------------------------*/
//LCD数据指针位置程序
void lcd_point( unsigned char y,unsigned char x)
{
if(y)lcd_wcmd(x|0xc0)//y=1,第二行显示y=0,第一行显示 0<=x<16
else lcd_wcmd(x|0x80)//数据指针=80+地址码(00H~27H,40H~67H)
}
/*------------------------------------------------------------------------------*/
//显示字符
/*
void printc(unsigned char CHAR)
{
lcd_wdat(CHAR)
}
*/
void lcd_clear(void)
{
lcd_wcmd(0x01) //清除LCD的显示内容
}
/*------------------------------------------------------------------------------*/
//显示字符串
void prints(unsigned char y,unsigned x,unsigned char n,unsigned char *string)
{
unsigned char i
lcd_point(y,x)
//do{lcd_wdat(string[i])i++}while(string[i]!='\0')//生成代码比for循环大
for(i=0i<ni++)lcd_wdat(string[i]) //有时用for循环也好哈
}
/*------------------------------------------------------------------------------*/
//LCD初始化设定
void lcd_init()
{ P6DIR=0xff//设P6口为输入方式
P6SEL=0 //设P6口为一般I/O口
P5DIR|=BIT7
P5DIR|=BIT6
P5DIR|=BIT5
P5SEL=0
lcd_wcmd(0x38) //设置LCD为16X2显示,5X7点阵,八位数据接口
lcd_wcmd(0x06) //LCD显示光标移动设置(光标地址指针加1,整屏显示不移动)
lcd_wcmd(0x0f) //LCD开显示及光标设置(光标不闪烁,不显示"_")
lcd_wcmd(0x01) //清除LCD的显示内容
}
void cursor_move(unsigned char yy,unsigned char xx)
{
lcd_point( yy,xx)
lcd_wcmd(0x0f)
}
#endif
单片机不亮念清一样,同样的程序肯定不一高岩定能用。void test_busy(void)
void write_CMD(uchar cmd)
void write_data( uchar data )
这三个函数中延时的多少应该调整一下,敬前可能就好。
MSP430程序可以通过使用MSP430 Flasher工具来固化,它是一庆枣个用于将二进制文件烧录到MSP430 MCU的烧录器。它能够誉锋拆处理ELF和TI-TXT文件,它还具有验证功能,可以验证程序文件是否正确地烧录到MCU中。基答欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)