数字体温计protues仿真图和程序.docx

上传人:大张伟 文档编号:10736570 上传时间:2021-06-01 格式:DOCX 页数:22 大小:208.70KB
返回 下载 相关 举报
数字体温计protues仿真图和程序.docx_第1页
第1页 / 共22页
数字体温计protues仿真图和程序.docx_第2页
第2页 / 共22页
数字体温计protues仿真图和程序.docx_第3页
第3页 / 共22页
数字体温计protues仿真图和程序.docx_第4页
第4页 / 共22页
数字体温计protues仿真图和程序.docx_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《数字体温计protues仿真图和程序.docx》由会员分享,可在线阅读,更多相关《数字体温计protues仿真图和程序.docx(22页珍藏版)》请在三一文库上搜索。

1、willCurrent Ten? !TEriP; 36 力BSs 2l A&SXSS丽珅用均则吗VtMM * 4 PAMW FU4E-3 PUdE-l PUMBfl PMJM ,3户flJvl f=i AMI JUM-? pi-9 fwt rm-iw38WJD 小M-1系统程序#include#include #define uchar unsigned char#define uint unsigned intsbit BUFFER=P1A5;sbit DQ=P3A7 ;sbit lcdrs=P2A6;sbit lcden=P2A7;sbit lcdrw=P2A5;sbit AN=P2A0;

2、sbit AM=P2A1;uchar code Temp_Disp_Title=Current Temp : ;uchar temp_buffer=TEMP: ;uchar code xs=0,1,1,2,334,4,5,6,6,7,8,8,9,9;仞、数位uchar Temp_value=0x00,0x00;/为 DS18B20 读取的字节分配地址uchar Display_Digit=0,0,0,0;uint T;void delay(uint);void delay1602(uint);void init_ds18b20();void write_byte(uchar date);voi

3、d display_temp();void write_com(uchar);void write_2(uchar);void init1602();uchar read_byte();void read_temp();void main() bit zhi=0;AN=1;init1602(); /1602 初始化read_temp(); /读取温度delay(50000);while(1)read_temp();if(zhi=0)display_temp(); /按键没有按下时显示温度if(Display_Digit22)/设定报警温度if(zhi=0)BUFFER=0;delay(2000

4、);BUFFER=1;delay1602(1);if(AN=0) / 检测按键delay1602(5) ;/去抖if(AN=0)/按下按键 zhi=zhi;/while(1); /保持当前温度 while(!AN); / 松手检测void delay(uint t)while(t-);void delay1602(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*初始化,检测DS18B20 是否在线*/void init_ds18b20()DQ=1;delay(8);DQ=0;delay(85);DQ=1;delay(14);delay(5);v

5、oid write_byte(uchar date)uchar i;for(i=0;i=1;date 右移一位delay(5);uchar read_byte()uint i,value;for(i=0;i=1;/右移一位,同时起延时作用DQ=1;if(DQ=1)value|=0x80;/R高位开始读delay(5);return value;void read_temp()init_ds18b20();whte_byte(0xcc);/跳过 ROMwhte_byte(0x44);/启动温度测量delay(200);/给出温度测量时间init_ds18b20();whte_byte(0xcc)

6、;/跳过 ROMwhte_byte(0xbe);/读取温度void display_temp()uint i;Temp_value0=read_byte();Temp_value1=read_byte();Display_Digit0 = xsTemp_value0&0x0f; /显示小数位T=(Temp_value0&0xf0)4) | (Temp_value1&0x07)4);Display_Digit3 = T/100;/ 百位Display_Digit2 = T%100/10; / 十位Display_Digit1 = T%10;/ 个位temp_buffer11= Display_D

7、igit0+0 ;temp_buffer10=.;temp_buffer9=Display_Digit1+0 ;temp_buffer8=Display_Digit2+0 ;temp_buffer7=Display_Digit3+0 ;if(Display_Digit3 = 0)temp_buffer7= ;/ 如果百位为0,则显示空格if(Display_Digit2 = 0&Display_Digit3=0)temp_buffer8= ;/ 如果百位和十位同时为0,则十位处显示空格write_com(0x80);for(i=0;i15;i+)write_2(Temp_Disp_Titlei

8、);write_com(0x80+0x40) ;for(i=0;i12;i+)write_2(temp_bufferi);delay1602(10);write_com(0x80+0x4d);write_2(0xdf);write_2(C);void write_com(uchar com)lcdrs=0;P0=com;delay1602(5);lcden=1;delay1602(5);lcden=0;void write_2(uchar da)lcdrs=1;P0=da;delay1602(5);lcden=1;delay1602(5);lcden=0;void init1602()lcde

9、n=0;lcdrw=0;write_com(0x38);write_com(0x0c);write_com(0x06); write_com(0x80);仿真图LCD1C1- U1XCRYST 继22p口 X1R210kF:正中.D2:LED-8FXTAL1P0.0/AD0XTAL2RSTPTALE EAP1.0P1.1P1.2P1.3P0.1/AD1P0.2/AD2P0.3WD3P0.4/AD4P0.5/AD5P0.6WD6P0.7/AD7P2.0/A8P2.1/A9P22/A10P23/A11P2.4/A12P25/A13P2B/A14P2.7W15P3J0fiXDP3.1/TXD P32

10、而 P33而P1.4P3.4/T0P1.5P3.5fT1前6P3.6 丽P1.7P3.7标AT89C514EXTH21222224 2E2E272E,;1112三14 211 Mi 1;LWJ祝O P2.3O P2.4O P2.5O P2.6O P27程序清单#include#define uchar unsigned char#define uint unsigned intuchar i;sbit lcdrs=P3A0;sbit lcdrw=P3A1;sbit lcden=P3A2;sbit d1=P1A0;sbit d2=P1A1;uchar code t0=the temperatur

11、e ;uchar code t1= is;uchar code wendu=0123456789;/利用一个温度表解决温度显示乱码sbit DQ = P3A7;定义 ds18B20 总线 IO/液晶显示模块void delay(uint z) uint x,y;for(x=100;x1;x-)for(y=z;y1;y-);void write_com(uchar com) lcdrs=0;P2=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date) lcdrs=1;P2=date;delay(5);lcden=1;de

12、lay(5);lcden=0;void init_lcd()lcden=0;lcdrw=0;write_com(0x38);write_com(0x01);write_com(0x0c);write_com(0x06);write_com(0x80);for(i=0;i16;i+) write_date(t0i);delay(0);write_com(0x80+0x40);for(i=0;i0;i-)DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;tmpDelay(4);return(dat);void WriteOneChar(unsi

13、gned char dat)/H一个字节unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = dat&0x01;tmpDelay(5);DQ = 1;dat=1;unsigned int Readtemp()戚取温度unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换Init_DS18B20();WriteOneChar(0xCC)

14、; /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器a=ReadOneChar(); /连续读两个字节数据/读低 8位b=ReadOneChar();/读高 8位t=b;t37)d1=0;d2=1;delay(500);if(num1BCDDIVAB;B=A%100MOVR7,A;R7=百位数MOVA,#0AHXCHA,BDIVAB;B=A%BSWAPAORLA,BRETJ;Calculate CRC-8Values. Uses The CCITT-8Polynomial,Expressed As ;XA8+XA5+XA4+1尸=CRC8CAL:PUSHACCMO

15、VR7,#08H;Number Bits In ByteCRC8LOOP1:XRLA,B;Calculte CRCRRCA;Move To CarryMOVA,B;Get The Last CRC ValueJNCCRC8LOOP2;Skip If Data=0XRLA,#18H;Updata The New CRCCRC8LOOP2:RRCA;Position The New CRCMOVB,A;Store The New CRCPOPACC;Get The Remaining BitsRRA;Position The Next BitPUSHACC;Save The Remaining BitsDJNZR7,CRC8LOOP1 ;Repeat For 8 BitsPOPACCRETEND

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1