
void point(uchar x,uchar y)
{
uchar y1,hang,lie,msb_data,lsb_data,temp=0x01
if(y1!=y)
{
msb_data=0
lsb_data=0
}
y1=y
if(y<32)
{
hang=0x80+y
lie=0x80
}
if(y>31)
{
hang=0x80+y-32
lie=0x88
}
if(y>63)//return
{
lcm_com(0x80)
_nop_()
hanzi("温度超出显示范围")
while(1)
flash()
}
lie=lie+x/16
if(x%16==0)
{
msb_data=0
lsb_data=0
}
if(x%16<8)
{
msb_data=msb_data|(temp<<(7-x%16))
lsb_data=0x00|lsb_data
}//保留以前的数据,把第x个点亮
if(x%16==8)
{
msb_data=msb_data|0x00
lsb_data=lsb_data|0x80
}
if(x%16>8)大于24小于32
{
msb_data=msb_data|0x00
lsb_data=lsb_data|(temp<<(15-x%16))
}
lcm_com(0x34)//扩充指令集
lcm_com(hang)
lcm_com(lie)
lcm_dat(msb_data)
lcm_dat(lsb_data)
lcm_com(0x36)//绘图显示开
}
#define uchar unsigned char#define uint unsigned int
#define iDat 1 //数据标志
#define iCmd 0 //指令标志
#define LCDb_RS 0x20 //定义四个控制引脚
#define LCDb_RW 0x40
#define LCDb_E 0x80
#define LCDb_RST 0x04
#define LCDb_L1 0x80 //第一行的地址
#define LCDb_L2 0x90 //第二行的地址
#define LCDb_L3 0x88 //第三行的地址
#define LCDb_L4 0x98 //第四行的地址
#define LCDb_SET_RS P1OUT|=LCDb_RS //四个控制管脚的控制 *** 作
#define LCDb_SET_RW P1OUT|=LCDb_RW
#define LCDb_SET_E P1OUT|=LCDb_E
#define LCDb_SET_RST P8OUT|=LCDb_RST
#define LCDb_CLR_RS P1OUT&=~LCDb_RS
#define LCDb_CLR_RW P1OUT&=~LCDb_RW
#define LCDb_CLR_E P1OUT&=~LCDb_E
#define LCDb_CLR_RST P8OUT&=~LCDb_RST
#define LCDb_DO P4OUT //输出数据总线端口定义
#define LCDb_FUNCTION 0x38 // 液晶模式为8位,2行,5*8字符
#define LCDb_BASCMD 0x30 // 基本指令集
#define LCDb_CLS 0x01 // 清屏
#define LCDb_HOME 0x02 // 地址返回原点,不改变DDRAM内容
#define LCDb_ENTRY 0x06 // 设定输入模式,光标加,屏幕不移动
#define LCDb_C2L 0x10 // 光标左移
#define LCDb_C2R 0x14 // 光标右移
#define LCDb_D2L 0x18 // 屏幕左移
#define LCDb_D2R 0x1C // 屏幕又移
#define LCDb_ON 0x0C // 打开显示
#define LCDb_OFF 0x08 // 关闭显示
unsigned char RXData
unsigned char Result[5] //整数转化成字符串,给LCD显示
/*******************************************
函数名称: Delayms
功能: 延时指定毫秒(8M晶振)
参数: MS--延时的毫秒数
返回值 : 无
********************************************/
void Delayms(uint MS)
{
uint i,j
for( i=0i<MSi++)
for(j=0j<1141j++)
}
/*******************************************
函数名称: Delayus
功能: 延时指定微秒(8M晶振)
参数: US--延时的微秒数(大约,不是很精确,MS越大越准确)
返回值 : 无
********************************************/
void Delayus(uint US)
{
uint i
US=US*5/4
for( i=0i<USi++)
}
void LCD12864_portini()
{
P1DIR=0xFF
P4DIR=0xFF
P8DIR=0xFF//Trig =P8^3输出
P8OUT |=LCDb_RST
//P1OUT=0xFF
}
/******************************************
函数名称: LCD12864_sendbyte
功能: 向12864液晶写入一个字节数据或者指令
参数: DatCmd--为iDat时是数据,为iCmd时是指令
dByte--为写入12864的数据或者指令
返回值 : 无
********************************************/
void LCD12864_sendbyte(uchar DatCmd, uchar dByte)
{
if (DatCmd == iCmd) //指令 *** 作
LCDb_CLR_RS
else
LCDb_SET_RS
LCDb_CLR_RW //写 *** 作
LCDb_SET_E
LCDb_DO = dByte //写入数据
//Delayus(500)
Delayms(1)
LCDb_CLR_E
}
/*******************************************
函数名称: LCD12864_sendstr
功能: 向12864液晶写入一个字符串
参数: ptString--字符串指针
返回值 : 无
********************************************/
void LCD12864_sendstr(uchar *ptString)
{
while((*ptString)!='\0') //字符串未结束一直写
{
LCD12864_sendbyte(iDat, *ptString++)
}
}
/*******************************************
函数名称: LCD12864_clear
功能: 12864液晶清屏
参数: 无
返回值 : 无
********************************************/
void LCD12864_clear(void)
{
LCD12864_sendbyte(iCmd,LCDb_CLS)
Delayms(2)// 清屏指令写入后,2ms 的延时是很必要的!!!
}
/*******************************************
函数名称: LCD12864_gotoXY
功能: 移动到指定位置
参数: Row--指定的行
Col--指定的列
返回值 : 无
********************************************/
void LCD12864_gotoXY(uchar Row, uchar Col)
{
switch (Row) //选择行
{
case 2:
LCD12864_sendbyte(iCmd, LCDb_L2 + Col)break //写入第2行的指定列
case 3:
LCD12864_sendbyte(iCmd, LCDb_L3 + Col)break //写入第3行的指定列
case 4:
LCD12864_sendbyte(iCmd, LCDb_L4 + Col)break //写入第4行的指定列
default:
LCD12864_sendbyte(iCmd, LCDb_L1 + Col)break //写入第1行的指定列
}
}
/*******************************************
函数名称: LCD12864_initial
功能: 12864液晶初始化
参数: 无
返回值 : 无
********************************************/
void LCD12864_initial(void)
{
Delayms(100) // 等待内部复位
LCD12864_portini() //端口初始化
LCD12864_sendbyte(iCmd, LCDb_FUNCTION) //功能、模式设定
LCD12864_sendbyte(iCmd, LCDb_ON) //打开显示
LCD12864_clear() //清屏
LCD12864_sendbyte(iCmd, LCDb_ENTRY) // 输入模式设定
}
void Int_char(int data)
{
if(data/1000)
{
Result[0]=data/1000+'0'
Result[1]=data/100%10+'0'
Result[2]=data/10%10+'0'
Result[3]=data%10+'0'
Result[4]=0
}
else if(data/100)
{
Result[0]=data/100+'0'
Result[1]=data/10%10+'0'
Result[2]=data%10+'0'
Result[3]=0
Result[4]=0
}
else if(data/10)
{
Result[0]=data/10%10+'0'
Result[1]=data%10+'0'
Result[2]=0
Result[3]=0
Result[4]=0
}
else
{
Result[0]=data%10+'0'
Result[1]=0
Result[2]=0
Result[3]=0
Result[4]=0
}
}
这使msp430单片机的程序,只要在主函数中调用函数,就是调用这个函数Int_char(tmp)每一次循环调用一次,这样可以实时显示这个变化温度数值
LCD12864_gotoXY(2,4)
LCD12864_sendstr("")
LCD12864_gotoXY(1,0) //第1行,第1列显示
LCD12864_sendstr("正在检测")
LCD12864_gotoXY(2,0) //第2行,第1列显示
LCD12864_sendstr("距离是:")
Int_char(tmp)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)