




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
12c芯片与温度测试主程序:#include main.h#include delay.h#include GUI.h#include LCD12864.h#include DS18B20.h#include stc12c5a60s2.h#include i2c.hsbit beep=P15;unsigned int i,x1,y1,x2,y2,y,num1;unsigned int temp1;unsigned char Time;unsigned int temp;void bee();void zhexian();void cunchu();void dushu();void InitTimer0(void);void LcdDisplay(int temp);unsigned char At24c02Read(unsigned char );void At24c02Write(unsigned char ,unsigned char );void main()InitTimer0();ds1820rst();LCD12864_ClearScreen();init_12864();gui_hline(0,127,63);gui_rline(0,0,63);At24c02Write(1,6);writecom_12864(0x90); writedat_12864(At24c02Read(1);while(1) temp=read_temp();cunchu();dushu();LcdDisplay(temp);if(Time=20);zhexian();void LcdDisplay( int temp) /12864显示 display_12864(1,0,+); writecom_12864(0x80+1); /显示位置writedat_12864(0x30+temp%10000/1000);writedat_12864(0x30+temp%1000/100); display_12864(1,2,.); writedat_12864(0x30+temp%100/10);writedat_12864(0x30+temp%10);display_12864(1,4,C);void InitTimer0(void) /10ms TMOD = 0x01; TH0 = 0x0D8; TL0 = 0x0F0; EA = 1; ET0 = 1; TR0 = 1;void Timer0Interrupt(void) interrupt 1 TH0 = 0x0D8; TL0 = 0x0F0; Time+; i+;if(temp=3000)beep=beep;delayms(1);void cunchu()/储存数到24c02 At24c02Write(8,temp%10000/1000+0x30); /将读取的温度值十位处理成字符写入24c02的储存地址8 delayms(200); At24c02Write(9,temp%1000/100+0x30); /将读取的温度值个位位处理成字符写入24c02的储存地址9delayms(200);At24c02Write(10,temp%100/10+0x30); /将读取的温度值小数处理成字符写入24c02的储存地址10delayms(200); At24c02Write(11,temp%10+0x30); /将读取的温度值小数处理成字符写入24c02的储存地址11delayms(200);void dushu()/从24c02读出数据 writecom_12864(0x80+5); /显示位置 writedat_12864(At24c02Read(8); /读24c02储存地址8数据显示writedat_12864(At24c02Read(9); /读24c02储存地址9数据显示 writedat_12864(.); writedat_12864(At24c02Read(10); /读24c02储存地址10数据显示 writedat_12864(At24c02Read(11); void zhexian()/折线图 gui_hline(0,127,63); gui_rline(0,0,63); Time=0;temp1=(temp-2500)/15.625;/从25度到35度y坐标有十度,10/64=0.15625,x1=1+num1*8;/每八格打一个点y1=y;x2=8+num1*8;y2=63-temp1;delayms(10);gui_line(x1,y1,x2,y2);y=63-temp1;num1+;if(num1=16) num1=0;LCD12864_ClearScreen();void At24c02Write(unsigned char addr,unsigned char dat)/写入存储I2C_Start();I2C_SendByte(0xa0, 1);I2C_SendByte(addr, 1);I2C_SendByte(dat, 0);I2C_Stop();unsigned char At24c02Read(unsigned char addr)/读出存储unsigned char temp;I2C_Start();I2C_SendByte(0xa0, 1); I2C_SendByte(addr, 1); I2C_Start();I2C_SendByte(0xa1, 1); temp=I2C_ReadByte(); I2C_Stop();return temp;子程序:#includemain.h#includedelay.hvoid delayus(uint t)/延时微妙函数while(-t);/* 函 数 名 : delayms(uchar d)* 函数功能 : 1MS延时* 输 入 : d* 输 出 : 无* 备 注 : 无*/void delayms(uchar d)unsigned char a, b;for(;d0;-d)_nop_();a = 11;b = 185;dowhile (-b); while (-a);/* 函 数 名 : delays(uchar d)* 函数功能 : 1S延时* 输 入 : d* 输 出 : 无* 备 注 : 无*/void delays(uchar d) unsigned char a,b,c;for(;d0;d-)for(c=169;c0;c-)for(b=114;b0;b-)for(a=142;a0;a-);_nop_(); void Delay20us()/超声波延时20US函数 11.0592MHzunsigned char yanshi;_nop_();yanshi = 52;while (-yanshi);/*头文件*/*单片机速度不一样延时要相应的变化*/#include main.h#include DS18B20.h#include delay.h/float tvalue; /温度值uchar tflag;/*ds1820复位*/void ds1820rst() unsigned char x=0;D18b20 = 1; /DQ复位delayus(10); /延时D18b20 = 0; /DQ拉低delayus(500); /精确延时大于480usD18b20 = 1; /拉高delayus(200); uchar ds1820rd()/*读数据*/ unsigned char i=0; unsigned char dat = 0; for (i=8;i0;i-) D18b20 = 0; /给脉冲信号 dat=1; D18b20 = 1; /给脉冲信号 if(D18b20) dat|=0x80; delayus(40); return(dat);void ds1820wr(uchar wdata)/*写数据*/unsigned char i=0; for (i=8; i0; i-) D18b20 = 0; D18b20 = wdata&0x01; delayus(40); D18b20 = 1; wdata=1; uint read_temp()/*读取温度值并转换*/ uint tp; uint tvalue;uchar a,b; ds1820rst(); ds1820wr(0xcc); /*跳过读序列号*/ ds1820wr(0x44); /*启动温度转换*/ ds1820rst(); ds1820wr(0xcc); /*跳过读序列号*/ ds1820wr(0xbe); /*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue=8; tvalue=tvalue|a; if(tvalue0; b-)for(a=2; a0; a-);/* 函 数 名 : I2C_Start()* 函数功能 : 起始信号:在I2C_SCL时钟信号在高电平期间I2C_SDA信号产生一个下降沿* 输 入 : 无* 输 出 : 无* 备 注 : 起始之后I2C_SDA和I2C_SCL都为0*/void I2C_Start()I2C_SDA = 1;I2C_Delay10us();I2C_SCL = 1;I2C_Delay10us();/建立时间是I2C_SDA保持时间4.7usI2C_SDA = 0;I2C_Delay10us();/保持时间是4usI2C_SCL = 0;I2C_Delay10us();/* 函 数 名 : I2C_Stop()* 函数功能 : 终止信号:在I2C_SCL时钟信号高电平期间I2C_SDA信号产生一个上升沿* 输 入 : 无* 输 出 : 无* 备 注 : 结束之后保持I2C_SDA和I2C_SCL都为1;表示总线空闲*/void I2C_Stop()I2C_SDA = 0;I2C_Delay10us();I2C_SCL = 1;I2C_Delay10us();/建立时间大于4.7usI2C_SDA = 1;I2C_Delay10us();/* 函 数 名 : I2cSendByte(uchar num)* 函数功能 : 通过I2C发送一个字节。在I2C_SCL时钟信号高电平期间,* * 保持发送信号I2C_SDA保持稳定* 输 入 : num ,ack* 输 出 : 0或1。发送成功返回1,发送失败返回0* 备 注 : 发送完一个字节I2C_SCL=0, 需要应答则应答设置为1,否则为0*/uchar I2C_SendByte(uchar dat, uchar ack)uchar a = 0,b = 0;/最大255,一个机器周期为1us,最大延时255us。for(a=0; a 7; /起始信号之后I2C_SCL=0,所以可以直接改变I2C_SDA信号dat = dat 4.7usI2C_SCL = 0;I2C_Delay10us();/时间大于4usI2C_SDA = 1;I2C_Delay10us();I2C_SCL = 1;while(I2C_SDA & (ack = 1)/等待应答,也就是等待从设备把I2C_SDA拉低b+;if(b 200) /如果超过200us没有应答发送失败,或者为非应答,表示接收结束I2C_SCL = 0;I2C_Delay10us();return 0;I2C_SCL = 0;I2C_Delay10us(); return 1;/* 函 数 名 : I2cReadByte()* 函数功能 : 使用I2c读取一个字节* 输 入 : 无* 输 出 : dat* 备 注 : 接收完一个字节I2C_SCL=0*/uchar I2C_ReadByte()uchar a = 0,dat = 0;I2C_SDA = 1;/起始和发送一个字节之后I2C_SCL都是0I2C_Delay10us();for(a=0; a8; a+)/接收8个字节I2C_SCL = 1;I2C_Delay10us();dat = 1;dat |= I2C_SDA;I2C_Delay10us();I2C_SCL = 0;I2C_Delay10us();return dat;#includelcd.h#include /* 函 数 名 : Lcd1602_Delay1ms* 函数功能 : 延时函数,延时1ms* 输 入 : c* 输 出 : 无* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。*/void Lcd1602_Delay1ms(uchar d) /误差 0us unsigned char a, b;for(;d0;-d)_nop_();a = 11;b = 185;dowhile (-b); while (-a); /* 函 数 名 : LcdWriteCom* 函数功能 : 向LCD写入一个字节的命令* 输 入 : com* 输 出 : 无*/#ifndef LCD1602_4PINS /当没有定义这个LCD1602_4PINS时void LcdWriteCom(uchar com) /写入命令LCD1602_E = 0; /使能LCD1602_RS = 0; /选择发送命令LCD1602_RW = 0; /选择写入LCD1602_DATAPINS = com; /放入命令Lcd1602_Delay1ms(1);/等待数据稳定LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5); /保持时间LCD1602_E = 0;#else void LcdWriteCom(uchar com) /写入命令LCD1602_E = 0; /使能清零LCD1602_RS = 0; /选择写入命令LCD1602_RW = 0; /选择写入LCD1602_DATAPINS = com;/由于4位的接线是接到P0口的高四位,所以传送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;/Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com 4; /发送低四位Lcd1602_Delay1ms(1);LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;#endif/* 函 数 名 : LcdWriteData* 函数功能 : 向LCD写入一个字节的数据* 输 入 : dat* 输 出 : 无*/ #ifndef LCD1602_4PINS void LcdWriteData(uchar dat)/写入数据LCD1602_E = 0;/使能清零LCD1602_RS = 1;/选择输入数据LCD1602_RW = 0;/选择写入LCD1602_DATAPINS = dat; /写入数据Lcd1602_Delay1ms(1);LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5); /保持时间LCD1602_E = 0;#elsevoid LcdWriteData(uchar dat)/写入数据LCD1602_E = 0; /使能清零LCD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030中国高度酒行业市场发展现状及发展前景与投融资战略报告
- 2025至2030中国供应链可视化(SCV)软件行业产业运行态势及投资规划深度研究报告
- 2025至2030中国临时纹身贴行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国TMR感应IC行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国7氨基头孢烷酸行业风险评估及投资趋势预判报告
- 2025至2030中国1甲基3硝基胍行业发展趋势分析与未来投资战略咨询研究报告
- 2025-2030年饮料包装产业行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年花卉行业市场深度调研及发展趋势与投资战略研究报告
- 2025-2030年生鲜农产品连锁产业市场深度调研及发展趋势与投资战略研究报告
- 2025-2030年汽车贷款行业市场现状供需分析及投资评估规划分析研究报告
- isa-381g站用变接地保护测控装置技术使用说明书南网版v3
- 六年级劳动教育7.青椒炒肉丝(课件)
- 手术通知单模板
- 油气藏类型、典型的相图特征和识别实例
- 《议程设置理论》
- 取力器的设计设计说明书
- 10kv高压架空电线防护方案概述
- 铸造厂各岗位职责标准xls
- 整车试验大纲
- 空调维保方案及报价(共3页)
- 电缆厂物料编码规则(共8页)
评论
0/150
提交评论