




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#ifndef _LCD12864_H#define _LCD12864_H/-包含头文件-/#include/-重定义关键词-/#ifndef uchar#define uchar unsigned char#endif#ifndef uint #define uint unsigned int#endif/-如果使用画图模式定义这个-/#define LCD12864_PICTURE/-定义使用的IO口-/#define LCD12864_DATAPORT P1 /数据IO口sbit LCD12864_RS = P26; /(数据命令)寄存器选择输入 sbit LCD12864_RW = P25; /液晶读/写控制sbit LCD12864_EN = P27; /液晶使能控制sbit LCD12864_PSB = P32; /串/并方式控制sbit LCD12864_RST = P34; /复位端/-声明全局函数-/void LCD12864_Delay1ms(uint c);uchar LCD12864_Busy(void);void LCD12864_WriteCmd(uchar cmd);void LCD12864_WriteData(uchar dat);void LCD12864_Init();void LCD12864_ClearScreen(void);void LCD12864_SetWindow(uchar x, uchar y);void LCD12864_DrowPic(uchar *a);void LCD12864_DrowPoint(uchar x, uchar y); #endif#ifndef _TEMP_H_#define _TEMP_H_#include/-重定义关键词-/#ifndef uchar#define uchar unsigned char#endif#ifndef uint #define uint unsigned int#endif/-定义使用的IO口-/sbit DSPORT=P33;/-声明全局函数-/void Delay1ms(uint );uchar Ds18b20Init();void Ds18b20WriteByte(uchar com);uchar Ds18b20ReadByte();void Ds18b20ChangTemp();void Ds18b20ReadTempCom();int Ds18b20ReadTemp();#endif#includelcd12864.h/* 函 数 名 : LCD12864_Delay1ms* 函数功能 : 延时1MS* 输 入 : c* 输 出 : 无*/void LCD12864_Delay1ms(uint c) uchar a,b;for(; c0; c-) for(b=199; b0; b-) for(a=1; a0; a-);/* 函 数 名 : LCD12864_Busy* 函数功能 : 检测LCD是否忙* 输 入 : 无* 输 出 : 1或0(1表示不忙,0表示忙)*/uchar LCD12864_Busy(void)uchar i = 0;LCD12864_RS = 0; /选择命令LCD12864_RW = 1;/选择读取LCD12864_EN = 1;LCD12864_Delay1ms(1);while(LCD12864_DATAPORT & 0x80) = 0x80)/检测读取到的值i+;if(i 100)LCD12864_EN = 0;return 0; /超过等待时间返回0表示失败LCD12864_EN = 0;return 1;/* 函 数 名 : LCD12864_WriteCmd* 函数功能 : 写命令* 输 入 : cmd* 输 出 : 无*/void LCD12864_WriteCmd(uchar cmd)uchar i;i = 0;while( LCD12864_Busy() = 0)LCD12864_Delay1ms(1);i+;if( i100)return; /超过等待退出LCD12864_RS = 0; /选择命令LCD12864_RW = 0; /选择写入LCD12864_EN = 0; /初始化使能端LCD12864_DATAPORT = cmd; /放置数据LCD12864_EN = 1; /写时序LCD12864_Delay1ms(1);LCD12864_EN = 0; /* 函 数 名 : LCD12864_WriteData* 函数功能 : 写数据* 输 入 : dat* 输 出 : 无*/void LCD12864_WriteData(uchar dat)uchar i;i = 0;while( LCD12864_Busy() = 0)LCD12864_Delay1ms(1);i+;if( i100)return; /超过等待退出LCD12864_RS = 1; /选择数据LCD12864_RW = 0; /选择写入LCD12864_EN = 0; /初始化使能端LCD12864_DATAPORT = dat; /放置数据LCD12864_EN = 1; /写时序LCD12864_Delay1ms(1);LCD12864_EN = 0; /* 函 数 名 : LCD12864_ReadData* 函数功能 : 读取数据* 输 入 : 无* 输 出 : 读取到的8位数据*/#ifdef LCD12864_PICTUREuchar LCD12864_ReadData(void)uchar i, readValue;i = 0;while( LCD12864_Busy() = 0)LCD12864_Delay1ms(1);i+;if( i100)return 0; /超过等待退出LCD12864_RS = 1; /选择命令LCD12864_RW = 1;LCD12864_EN = 0;LCD12864_Delay1ms(1); /等待LCD12864_EN = 1;LCD12864_Delay1ms(1);readValue = LCD12864_DATAPORT;LCD12864_EN = 0;return readValue;#endif/* 函 数 名 : LCD12864_Init* 函数功能 : 初始化LCD12864* 输 入 : 无* 输 出 : 无*/void LCD12864_Init()LCD12864_PSB = 1; /选择并行输入LCD12864_RST = 1; /复位LCD12864_WriteCmd(0x30); /选择基本指令操作LCD12864_WriteCmd(0x0c); /显示开,关光标LCD12864_WriteCmd(0x01); /清除LCD12864的显示内容/* 函 数 名 : LCD12864_ClearScreen* 函数功能 : 在画图模式下,LCD12864的01H命令不能清屏,所以要自己写一个清* * 屏函数* 输 入 : 无* 输 出 : 无*/#ifdef LCD12864_PICTUREvoid LCD12864_ClearScreen(void)uchar i,j;LCD12864_WriteCmd(0x34); /开启拓展指令集for(i=0;i32;i+) /因为LCD有纵坐标32格所以写三十二次LCD12864_WriteCmd(0x80+i); /先写入纵坐标Y的值LCD12864_WriteCmd(0x80); /再写入横坐标X的值for(j=0;j32;j+) /横坐标有16位,每位写入两个字节的的数据,也 /就写入32次以为当写入两个字节之后横坐标会自LCD12864_WriteData(0x00); /动加1,所以就不用再次写入地址了。LCD12864_WriteCmd(0x36); /0x36扩展指令里面打开绘图显示LCD12864_WriteCmd(0x30); /恢复基本指令集#endif/* 函 数 名 : LCD12864_SetWindow* 函数功能 : 设置在基本指令模式下设置显示坐标。注意:x是设置行,y是设置列* 输 入 : x, y* 输 出 : 无*/void LCD12864_SetWindow(uchar x, uchar y)uchar pos;if(x = 0) / 第一行的地址是80Hx = 0x80;else if(x = 1) /第二行的地址是90Hx = 0x90;else if(x = 2) /第三行的地址是88Hx = 0x88;else if(x = 3)x = 0x98; /第4行的地址是98Hpos = x + y;LCD12864_WriteCmd(pos);/* 函 数 名 : LCD12864_ClearScreen* 函数功能 : 在画图模式下,LCD12864的01H命令不能清屏,所以要自己写一个清* * 屏函数* 输 入 : 无* 输 出 : 无*/#ifdef LCD12864_PICTUREvoid LCD12864_DrowPic(uchar *a) unsigned char i,j;LCD12864_ClearScreen();LCD12864_WriteCmd(0x34); /开启扩展指令集,并关闭画图显示。for(i=0;i32;i+) /因为LCD有纵坐标32格所以写三十二次LCD12864_WriteCmd(0x80+i); /先写入纵坐标Y的值LCD12864_WriteCmd(0x80); /再写入横坐标X的值for(j=0; j16; j+) /横坐标有16位,每位写入两个字节的的数据,也 /就写入32次以为当写入两个字节之后横坐标会自LCD12864_WriteData(*a); /动加1,所以就不用再次写入地址了。a+; for(i=0; i32; i+) /因为LCD有纵坐标32格所以写三十二次LCD12864_WriteCmd(0x80+i); /先写入纵坐标Y的值LCD12864_WriteCmd(0x88); /再写入横坐标X的值for(j=0; j31)x_adr = 0x88 + x / 16;/计算X轴的地址elsex_adr = 0x80 + x / 16;/-求出X(水平位置),点亮的点是在16位数据里面的哪一个位-/-所以对这个数求余数-/bt = 0x8000 (x % 16);LCD12864_WriteCmd(0x34); /进入拓展指令集LCD12864_WriteCmd(y_adr); /读取数据的时候要先写入所取数据的地址LCD12864_WriteCmd(x_adr);LCD12864_ReadData(); /读取的第一个字节不要,readValue = LCD12864_ReadData(); /从第二个字节开始接收。readValue 8;l_bit = bt;LCD12864_WriteCmd(y_adr); /写入点的时候,从新写入地址,因为地址已经改变。LCD12864_WriteCmd(x_adr);LCD12864_WriteData(h_bit);LCD12864_WriteData(l_bit);LCD12864_WriteCmd(0x36); /开显示LCD12864_WriteCmd(0x30); /关闭绘图指令集#endif#include #includetemp.h#include/* 函 数 名 : Delay1ms* 函数功能 : 延时函数* 输 入 : 无* 输 出 : 无*/ uchar HANZI16 = 室温:;void Delay10ms(unsigned int c) /误差 0us unsigned char a, b;/-c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了-/ for (;c0;c-)for (b=38;b0;b-)for (a=130;a0;a-); /* 函数名 : LcdDisplay()* 函数功能 : LCD显示读取到的温度* 输入 : v* 输出 : 无*/void LcdDisplay(int temp) /lcd显示 unsigned char i,j, datas = 0, 0, 0, 0, 0; /定义数组float tp; if(temp 0) /当温度值为负数 LCD12864_WriteCmd(0x80);/写地址 80表示初始地址for(j=0;j5;j+)LCD12864_WriteData(HANZI1j);SBUF=-; /将接收到的数据放入到发送寄存器while(!TI); /等待发送数据完成TI=0; /清除发送完成标志位 LCD12864_WriteData(-); /显示负/因为读取的温度是实际温度的补码,所以减1,再取反求出原码temp=temp-1;temp=temp;tp=temp;temp=tp*0.0625*100+0.5;/留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点/后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就/算由?.5,还是在小数点后面。 else LCD12864_WriteCmd(0x80);/写地址 80表示初始地址for(j=0;j5;j+)LCD12864_WriteData(HANZI1j); LCD12864_WriteData(+); /显示正SBUF=+;/将接收到的数据放入到发送寄存器while(!TI); /等待发送数据完成TI=0; /清除发送完成标志位tp=temp;/因为数据处理有小数点所以将温度赋给一个浮点型变量/如果温度是正的那么,那么正数的原码就是补码它本身temp=tp*0.0625*100+0.5;/留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点/后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就/算加上0.5,还是在小数点后面。datas0 = temp / 10000;datas1 = temp % 10000 / 1000;datas2 = temp % 1000 / 100;datas3 = temp % 100 / 10;datas4 = temp % 10;LCD12864_WriteData(0+datas0); /百位 SBUF = 0+datas0; /将接收到的数据放入到发送寄存器while (!TI); /等待发送数据完成TI = 0;LCD12864_WriteData(0+datas1); /十位SBUF = 0+datas1; /将接收到的数据放入到发送寄存器while (!TI); /等待发送数据完成TI = 0;LCD12864_WriteData(0+datas2); /个位 SBUF = 0+datas2; /将接收到的数据放入到发送寄存器while (!TI); /等待发送数据完成TI = 0;LCD12864_WriteData(.); /显示 .SBUF = .; /将接收到的数据放入到发送寄存器while (!TI);/等待发送数据完成TI = 0;LCD12864_WriteData(0+datas3); /显示小数点 SBUF = 0+datas3; /将接收到的数据放入到发送寄存器while (!TI); /等待发送数据完成TI = 0;LCD12864_WriteData(0+datas4); /显示小数点 SBUF = 0+datas4; /将接收到的数据放入到发送寄存器while (!TI); /等待发送数据完成TI = 0;for(i=0; i0; y-)for(x=110; x0; x-);/* 函 数 名 : Ds18b20Init* 函数功能 : 初始化* 输 入 : 无* 输 出 : 初始化成功返回1,失败返回0*/uchar Ds18b20Init()uchar i;DSPORT = 0; /将总线拉低480us960usi = 70;while(i-); /延时642usDSPORT = 1;/然后拉高总线,如果DS18B20做出反应会将在15us60us后总线拉低i = 0;while(DSPORT)/等待DS18B20拉低总线i+;if(i5)/等待5MSreturn 0;/初始化失败Delay1ms(1);return 1;/初始化成功/* 函 数 名 : Ds18b20WriteByte* 函数功能 : 向18B20写入一个字节* 输 入 : com* 输 出 : 无*/void Ds18b20WriteByte(uchar dat)uint i, j;for(j=0; j= 1;/* 函 数 名 : Ds18b20ReadByte* 函数功能 : 读取一个字节* 输 入 : com* 输 出 : 无*/uchar Ds18b20ReadByte()uchar byte, bi;uint i, j;for(j=8; j0; j-)DSPORT = 0;/先将总线拉低1usi+;DSPORT = 1;/然后释放总线i+;i+;/延时6us等待数据稳定bi = DSPORT; /读取数据,从最低位开始读取/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/byte = (byte 1) | (bi 7); i = 4;/读取完之后等待48us再接着读取下一个数while(i-);return byte;/* 函 数 名 : Ds18b20ChangTemp* 函数功能 : 让18b20开始转换温度* 输 入 : com* 输 出 : 无*/void Ds18b20ChangTemp()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);/跳过ROM操作命令 Ds18b20WriteByte(0x44); /温度转换命令Delay1ms(100);/等待转换成功,而如果你是一直刷着的话,就不用这个延时了 /* 函 数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新能源项目评估报告范文
- 物业收费管理操作规程
- 高校教师职业道德提升培训心得
- 建筑施工安全隐患检查表
- 噬菌体抗毒素Dmd抑制细菌毒素LsoA活性的结构生物学解析:分子机制与进化意义
- 核燃料循环优化-第6篇-洞察及研究
- 劳务聘请合同7篇
- 2025年工程咨询合同(GF-2000-1001)
- 2025年装修材料检测合同协议
- 2025年直播带货平台直播内容制作合同
- 山体.施工合同样本
- 肺结核课件培训
- 个体诊所管理暂行办法
- 潍坊市2026届高三开学调研监测考试化学试题及答案
- 收单外包管理办法
- 分时租赁介绍课件
- 第七章-大学生创业实践案例课件
- 燃机三菱控制系统简述课件
- 全尺寸测量报告FAI
- (完整)农村污水处理工程施工组织设计
- 认识五线谱精选PPT
评论
0/150
提交评论