基于51单片机,如何让12864m(没有片选的那种,带字库的)显示数字变量。整形就可以,求这段程序。

基于51单片机,如何让12864m(没有片选的那种,带字库的)显示数字变量。整形就可以,求这段程序。,第1张

在解决这个问题之前呢,有一点我需要提醒下你,别介意哈,int a=1.2;定义整型变量怎么能赋值浮点数呢,相信是手误吧。言归正传,要在12864液晶上显示一个变量不用修改多少程序,只颂物衡需要蚂薯在写数据函数里改一下数据形式就行,格式这样定义 writeByte(a/10+'0'),这是显示a的十位的数字,个位只需将 /换为野做 %就行,

希望我的回答能帮助到你。

#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)

x00=unm/100

xx=unm%100

x0=xx/悔塌10

x=xx%10

数据分碧哗圆离出错

改下

x00=unm/1000; 千位

xx=unm%1000/芦吵100百

x0=xx%100/10十

x=xx%10个


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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存