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)请教各位大神了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)