51单片机上18B20如何在12864上显示两个小数点

51单片机上18B20如何在12864上显示两个小数点,第1张

temp <<= 8; //两个字节组合为1个字

temp = temp | a;----在1个字之中,最低四位是小数

f_temp = temp 00625; --这里是除以16,就已经把小数的信息,都弄没了

temp = f_temp 10 + 05;//乘以10表示小数点后面只取1位,加05是四舍五入

再乘以100,得出的也不是原来的、真正的小数。

绝对好用的串口程序

sbit SID=P2^1; //12864数据

sbit SCLK=P2^2; //12864时钟

init()

{

write(0,0x30); //8 位介面,基本指令

write(0,0x0c); //显示打开,光标关,反白关

write(0,0x01); //清屏,将DDRAM的地址计数器归零

delaynms(10);

write(0,0x80); for(i=0;i<16;i++) write(1,datas11[i]);

write(0,0x90); for(i=0;i<16;i++) write(1,datas2[i]);

write(0,0x88); for(i=0;i<16;i++) write(1,datas3[i]);

write(0,0x98); for(i=0;i<16;i++) write(1,datas4[i]);

}

/12864/

void delaynms(unsigned int di) //延时

{

unsigned int da,db;

for(da=0;da<di;da++)

for(db=0;db<10;db++);

}

void sendbyte(unsigned char bbyte) //发送一个字节

{

unsigned char i;

for(i=0;i<8;i++)

{

SID=bbyte&0x80; //取出最高位

SCLK=1;

SCLK=0;

bbyte<<=1; //左移

}

}

void write(bit start, unsigned char ddata) //写指令或数据

{

unsigned char start_data,Hdata,Ldata;

if(start==0) start_data=0xf8; //写指令

else start_data=0xfa; //写数据

Hdata=ddata&0xf0; //取高四位

Ldata=(ddata<<4)&0xf0; //取低四位

sendbyte(start_data); //发送起始信号

delaynms(5); //延时是必须的

sendbyte(Hdata); //发送高四位

delaynms(1); //延时是必须的

sendbyte(Ldata); //发送低四位

delaynms(1); //延时是必须的

}

/void lcdinit(void) //初始化LCD

{

delaynms(10); //启动等待,等LCM讲入工作状态

//PSB=0; ; //串口驱动模式

// RESET=0; delaynms(1); RESET=1; // 复位LCD

// CS=1;

write(0,0x30); //8 位介面,基本指令集

write(0,0x0c); //显示打开,光标关,反白关

write(0,0x01); //清屏,将DDRAM的地址计数器归零

}/

这是12864的程序,这是调子程序的语句,看子程序的名是Disp_HZ(0x80,line1,1),应该是显示汉字的语句,调用时带有3个参数,第一个0x80,应该是显示行在第一行,第二个line1,应该是先定义的一个汉字的字符串,就是要显示的汉字,第三个数应该是表示左屏。有些12864屏是分左右屏显示的。具体的这3个参数是不是这些意义,要看具体的子程序就知道了。

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;个

段1:为这些引脚号起个有实际含义别名,有助于阅读程序,可以理解为#define Name P2^4

段2:检测液晶是否正忙,能否接受指令,等待液晶不忙时退出函数,下面就可以发送指令了

段3:命令是用来控制液晶的,例如清除显示内容,查询液晶状态等等,数据是用来显示的编码,类似于数码管的显示码,具体字符的编码要查手册。准确地说,数据也是通过命令的形式传进液晶的。

段4:通过各种指令进行初始化。液晶“模块”相当于单片机+“屏幕”,类似于启动开机步骤。

包括:设置工作方式,如串行或并行方式

复位,先置复位脚低,再置高

选择指令集,告诉液晶如何把指令翻译正具体 *** 作,具体指令手册上有

数据流,指令通过什么样的信号传输,如8位并行,4位并行,串行

开显示,打开屏幕,之前的 *** 作在屏幕上都是看不到的,都是内部 *** 作

清除显示,清显示缓冲区,就是模块内存放显示内容编码一内存

游标等,控制当标位置,类比于windows的文本编辑,那个闪烁的光标是可以用鼠标、键盘控制的

段5:模块本身内置了常用标准字符的编码,就是字符格式,或称之为字库。平时使用只要输入比如说ascii码至模块,模块会自动转换为具体的点阵编码;此外还可以自定义部分非标准编码,其字符格式(即点阵)需要自己编,比如一个816点阵共128点,哪些点亮哪些点灭由1bit二进制数表示,共16字节,1616点阵就是32字节,按照液晶模块规定的顺序,发送至模块自定义区(有专用指令),之后就可以像使用内置字库一样使用了,而不用每次传输16或32字节。

段6:x y不能理解为坐标。编写者懒得命名了。具体要看怎么调用的,x应该是把一个大区域分成小区域的编号,y是小区域内部的编号

段7:好像是由液晶内部地址排列规则决定的。从地址上看,12864应该是两组6464拼起来的,所以水平地址不同,相当于片选信号不同。

以上就是关于51单片机上18B20如何在12864上显示两个小数点全部的内容,包括:51单片机上18B20如何在12864上显示两个小数点、求51单片机驱动液晶12864的程序,要求是串口方式。程序里不要有绘图反白之类的,只要能显示汉字就行。、这个是12864的程序这句看不懂意思Disp_HZ(0x80,line1,1)请教各位大神了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10214397.html

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

发表评论

登录后才能评论

评论列表(0条)

保存