单总线温控可调设计 文档.docx
- 文档编号:17156326
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:25
- 大小:396.34KB
单总线温控可调设计 文档.docx
《单总线温控可调设计 文档.docx》由会员分享,可在线阅读,更多相关《单总线温控可调设计 文档.docx(25页珍藏版)》请在冰点文库上搜索。
单总线温控可调设计文档
设计文件
第1册
共16页
共1册
产品型号:
产品名称:
单总线温控可调监测系统
产品图号:
本册内容:
旧底图总号
小组成员:
底图总号
日期
签字
2013年12月19日
描图:
描校:
设计文件明细表
产品名称
单总线温控可调监测系统
产品图号
序号
文件代号
文件名称
页数
备注
1
01
系统框图
3
2
02
电路原理图
4
3
03
器件清单
5
4
04
印制线路板图
6
5
05
3D模型展示图
7
6
06
程序流程图
8
7
07
程序模块
9—15
8
08
系统仿真效果图
16
9
10
旧底图总号
拟制
审核
底图总号
日期
签字
标准化
第2页
共16页
更改标记
数量
更改单号
签名
日期
批准
描图:
描校:
系统框图
产品名称
单总线温控可调监测系统
名称
产品图号
图号
旧底图总号
底图总号
拟制
审核
日期
签字
标准化
第3页
共16页
更改标记
数量
更改单号
签名
日期
批准
描图:
描校:
电路原理图
产品名称
单总线温控可调监测系统
名称
产品图号
图号
旧底图总号
底图总号
拟制
审核
日期
签字
标准化
第4页
共16页
更改标记
数量
更改单号
签名
日期
批准
描图:
描校:
元器件清单
产品名称
单总线温控可调监测系统
名称
产品图号
图号
序号
器件类型
器件参数
数量
备注
1
AT89C52
1
2
74HC138
1
3
74HC04
1
4
LCD1602
1
5
DS18B20
1
6
晶振
1
7
电阻
4
8
8位排阻
1
9
电容
3
10
二极管
2
11
三极管
2
12
5V直流继电器
2
13
按键开关
13
14
加热器
1
15
直流电机
1
16
USB插座
1
旧底图总号
底图总号
拟制
审核
日期
签字
标准化
第5页
共16页
更改标记
数量
更改单号
签名
日期
批准
描图:
描校:
印刷线路板图
产品名称
单总线温控可调监测系统
工序名称
产品图号
工序号
旧底图总号
底图总号
拟制
日期
签字
审核
标准化
第6页共16页
更改标记
数量
更改单号
签名
日期
批准
描图:
描校:
3D模型展示图
产品名称
单总线温控可调监测系统
工序名称
产品图号
工序号
旧底图总号
底图总号
拟制
审核
日期
签字
标准化
第7页
共16页
更改标记
数量
更改单号
签名
日期
批准
描图:
描校:
程序流程图
产品名称
单总线温控可调系统
工序名称
产品图号
工序号
旧底图总号
底图总号
拟制
审核
日期
签字
标准化
第8页
共16页
更改标记
数量
更改单号
签名
日期
批准
描图:
描校:
程序模块
产品名称
单总线温控可调监测系统
工序名称
产品图号
工序号
#include
#include
typedefunsignedcharuchar;
typedefunsignedintuint;
ucharcodetable1[]="RANGE:
xxC--xxC";
ucharcodetable2[]="Current:
xx.xC";
ucharcodetable3[]="MaxTemp:
C";
ucharcodetable4[]="MinTemp:
C";
ucharcodetable5[]="SetupTemp";
uchartab1[]="";
uchartab2[]="";
ucharset_max=40;
ucharset_min=20;
charkey=0,a=0;
voidkey_work(void);
voidlcd_init(void);
voidwrite_date(uchardate);
voidwrite_com(ucharcom);
voidlcd_scan(void);
uchardatatemp[2]={0x00,0x00};//读出温度缓存
uchardatatable[4]={0};//显示单元数据,共4个数据,一个运算暂存用
floatt=0;
/************************端口定义**********************************/
sbitwd=P2^5;//温度采集
sbithot=P2^7;//加热管
sbitcold=P2^6;//电机风扇
sbitA138=P3^5;
sbitB138=P3^6;
sbitC138=P3^7;
sbitRW=P3^4;
sbitRS=P3^3;
/***********************LCD1602程序******************************/
voidlcd_init(void)
{
A138=1;
RW=0;
B138=1;
C138=0;
write_com(0x38);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
}
voidlcd_delay(ucharx)
{
uchari,j;
for(i=0;i for(j=0;j<20;j++) ; } voidwrite_date(uchardate) { P0=date; lcd_delay(5); RS=1; lcd_delay(5); A138=0; lcd_delay(5); A138=1; } voidwrite_com(ucharcom) { P0=com; lcd_delay(5); RS=0; lcd_delay(5); A138=0; lcd_delay(5); A138=1; } voidlcd_scan(void) { ucharm; write_com(0x80); lcd_delay(5); for(m=0;m<16;m++) { write_date(tab1[m]); lcd_delay(5); } write_com(0x80+0x40); lcd_delay(5); for(m=0;m<16;m++) { write_date(tab2[m]); lcd_delay(5); } } /**************按键扫描函数*****************/ voidkey_delay(ucharx) { uchari,j; for(i=0;i for(j=0;j<10;j++) ; } voidkey_num(void) { P1=0xfe;//扫描第一行 switch(P1) { case0xee: key=1;break; case0xde: key=2;break; case0xbe: key=3;break; } P1=0xfd;//扫描第二行 switch(P1) { case0xed: key=4;break; case0xdd: key=5;break; case0xbd: key=6;break; } P1=0xfb;//扫描第三行 switch(P1) { case0xeb: key=7;break; case0xdb: key=8;break; case0xbb: key=9;break; } P1=0xf7;//扫描第四行 switch(P1) { case0xe7: key=10;break; case0xd7: key=0;break; case0xb7: key=11;break; } } voidkey_work(void) { switch(key) { case10: a++; if(a==3) a=1; break; case11: a=0; break; default: switch(a) { case1: set_max=set_max%10*10; set_max=set_max+key; break; case2: set_min=set_min%10*10; set_min=set_min+key; break; } break; } } voidkey_scan(void) { P1=0xf0; if(P1! =0xf0) { key_delay(300); if(P1! =0xf0) { key_num(); key_work(); } } P1=0xf0; while(P1! =0xf0); } /************************延时函数************************/ voiddelay_10us(uintz) { for(;z>0;z--); } voiddelay_600ms() { uinta,b; for(a=300;a>0;a--) for(b=250;b>0;b--); } /************************18B20复位************************/ voidds18b20_init(void) { charX=1; while(X) { while(X) { wd=1; delay_10us (1); wd=0; delay_10us(50); wd=1; delay_10us(9); X=wd; } delay_10us(20); X=~wd; } wd=1; } /************************18B20写一个字节************************/ voidds18b20_write_byte(ucharval) { uchari,X; for(i=8;i>0;i--) { X=val&0x01; wd=1;delay_10us (1); wd=0;delay_10us (1); wd=X;//最低位移出,并写入总线 delay_10us(8); val=val/2;//右移一位,倒数第二位变为最低位 } wd=1; delay_10us (1);//高电平维持11us,写结束 } /**********************18B20读1个字节********************/ uchards18b20_read_byte(void) { uchari; ucharvalue=0; for(i=8;i>0;i--) { value>>=1; wd=1;delay_10us (1); wd=0;delay_10us (1); wd=1;delay_10us (2); if(wd) value|=0x80; delay_10us(8); } wd=1;//总线恢复高电平,DQ=1 return(value); } /**********************18B20读温度************************/ voidDS18B20_Read() { ds18b20_init();//总线复位 ds18b20_write_byte(0xCC);//发SkipROM命令 ds18b20_write_byte(0x44);//((0xBE)发读命令)送入温度转换命令 wd=1; delay_600ms(); ds18b20_init(); ds18b20_write_byte(0xCC);//SkipROM ds18b20_write_byte(0xBE);//((44)发转换命令)送入发读命令 temp[0]=ds18b20_read_byte();//18B20存储器的第一个字节为温度低8位 temp[1]=ds18b20_read_byte();//18B20存储器的第二个字节为温度高8位 } /************************18B20温度数据处理************************/ voidDS18B20_Work() { inttemp1=0; ucharn=0;//存储符号 if(temp[1]&0x08)//如果实际温度为负值,负温度补码求原码 { temp1=temp[1]; temp1=temp1<<8; temp1=temp1|temp[0]; temp1=0xffff-temp1+1; temp[0]=temp1&0x00ff; temp1=temp1&0xff00; temp1=temp1>>8; temp[1]=temp1; n=1; } table[0]=((temp[0]&0x0f)*0.0625+0.05)*10; table[3]=((temp[0]&0xf0)>>4)|((temp[1]&0x0f)<<4); //低八位屏蔽小数位后右移四位与高八位屏蔽高四位后左移四位合并形成温度的整数值 t=table[3]+table[0]/10.0; table[0]=table[0]+'0'; table[1]=table[3]%10+'0'; table[2]=table[3]/10%10+'0'; table[3]=table[3]/100+'0'; if(table[3]=='0') { table[3]=0xfe; if(table[2]=='0') { table[2]=0xfe; } } //温度的百位及十位为0时都不显示,LCD1602的“不显示"代码为0x20 if(n) table[3]=0x2D;//负温度(最低-55c)时最高位显示"-" } /*****************用于18B20变化温度对显示数组的修改*******************/ voidDS18B20_Change() { tab2[10]=table[2]; tab2[11]=table[1]; tab2[13]=table[0]; } /****************************主函数***********************/ main() { uchari; lcd_init(); while (1) { switch(a) { case1: for(i=0;i<16;i++) { tab1[i]=table5[i]; tab2[i]=table3[i]; } tab2[11]=0xdf; tab2[9]=set_max/10+'0'; tab2[10]=set_max%10+'0'; break; case2: for(i=0;i<16;i++) { tab1[i]=table5[i]; tab2[i]=table4[i]; } tab2[11]=0xdf; tab2[9]=set_min/10+'0'; tab2[10]=set_min%10+'0'; break; case0: for(i=0;i<16;i++) { tab1[i]=table1[i]; tab2[i]=table2[i]; } tab1[8]=0xdf; tab1[14]=0xdf; tab2[14]=0xdf; tab1[6]=set_max/10+'0'; tab1[7]=set_max%10+'0'; tab1[12]=set_min/10+'0'; tab1[13]=set_min%10+'0'; DS18B20_Read();//读出18B20温度数据 DS18B20_Work();//处理温度数据 DS18B20_Change(); break; } lcd_scan();//显示温度值 key_scan(); if(t>set_max) { hot=1; cold=0; } elseif(t { cold=1; hot=0; } else { cold=1; hot=1; } } } 底图总号 拟制 审核 日期 签字 标准化 第15页 共16页 更改标记 数量 更改单号 签名 日期 批准 描图: 描校: 系统仿真 效果图 产品名称 单总线温控可调监测系统 工序名称 产品图号 工序号 旧底图总号 底图总号 拟制 审核 日期 签字 标准化 第16页 共16页 更改标记 数量 更改单号 签名 日期 批准 描图: 描校:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单总线温控可调设计 文档 总线 温控 可调 设计