液晶12864的显示程序

液晶12864的显示程序,第1张

/****************打点******************/

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)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12108523.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存