1、名称作用个数AT89S52单片机运算处理DS1802传感器温度测量数码管LG5011BSR温度显示蜂鸣器温度报警变压器变压6整流桥交流变直流7三端稳压器7805稳定电压值8AT24C02掉电存储器元件清单元件名称单位(只)型号温度传感器DS18B20-55100度 5V单片机AT89S52220V变9V9V/8W整流二极管IN4007C1,C230PC3,C622UF/25VC4220UF/25VC52.2UF/25R1R6100欧姆1/8WR7R9510欧姆R1010KR11R154.7KR16,R17,R18D0发光二极管白发红D1白发蓝D2,D3,D5红发红稳压管LM7805Y1晶震11
2、.0592HZS1S3按键Q1Q38550NPNU10U15LG5011BSR7段数码管电路板2块掉电保护24c02电源线程序:#include#include absacc.hcode unsigned char seg7code11= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40; /显示段码sbit TMDAT =P31; /DS18B20 的数据输入/输出脚DQ,根据情况设定sbit jia=P21;sbit jian=P20;sbit hong=P10; /红色警告灯sbit sheng=P11; /蜂鸣器sbit la
3、n=P12; /兰色灯bit write=0; /写24C08 的标志;j=30;unsigned int sdata;/测量到的温度的整数部分unsigned char xiaoshu1;/小数第一位unsigned char xiaoshu2;/小数第二位unsigned char xiaoshu;/两位小数bit fg=1; /温度正负标志/24C08 读写驱动程序/sbit scl=P34; / 24c08 SCLsbit sda=P35; / 24c08 SDAvoid delay1(unsigned char x) unsigned int i;for(i=0;ix;i+);voi
4、d flash() ; ; void x24c08_init() /24c08 初始化子程序scl=1; flash(); sda=1;void start() /启动(I方C)总线sda=1; scl=1; sda=0; scl=0;void stop() /停止(I方C)总线sda=0;void writex(unsigned char j) /写一个字节 unsigned char i,temp;temp=j;for (i=0;8;i+)temp=temp1; sda=CY;scl=0;unsigned char readx() /读一个字节unsigned char i,j,k=0;f
5、lash();if (sda=1) j=1;else j=0;k=(k1)|j; return(k);void clock() /(I方C)线时钟unsigned char i=0;scl=1;while (sda=1)&(i255)i+;/从24c02 的地址address 中读取一个字节数据/unsigned char x24c08_read(unsigned char address)unsigned char i;start(); writex(0xa0);clock(); writex(address); start();writex(0xa1); clock();i=readx()
6、; stop();delay1(10);return(i);/向24c02 的address 地址中写入一字节数据info/void x24c08_write(unsigned char address,unsigned char info)EA=0; writex(info);EA=1;delay1(50);/*/24C08 读写驱动程序完/void Delay2(unsigned int tc) /延时程序while( tc != 0 )unsigned int i; i100; i+);tc-;*/*显示延时程序*/void Delay(unsigned int tc)while( tc
7、 !80;/延时部分/void yanshi (unsigned int count) while(count-)for(i=0;115;/发送复位/void fashong (void) TMDAT = 0; for(i=0;103;TMDAT = 1;4;bit tmrbit (void) /读一位/ unsigned int i;bit dat;i+; i+; /微量延时 /dat = TMDAT;return (dat);unsigned char tmrbyte (void) /读一个字节unsigned char i,j,dat;dat = 0;for (i=1;=8; j = t
8、mrbit(); dat = (j 1);void tmwbyte (unsigned char dat) /写一个字节unsigned char j,i;bit testb;for (j=1;j 1;if (testb) TMDAT = 0; /写0elsevoid tmstart (void) /发送ds1820 开始转换fashong(); /复位yanshi(1); /延时tmwbyte(0xcc); /跳过序列号命令tmwbyte(0x44); /发转换命令 44H, void tmrtemp (void) /读取温度unsigned char a,b;fashong ();yans
9、hi (1);tmwbyte (0xcc);tmwbyte (0xbe); /发送读取命令a = tmrbyte (); /读取低位温度b = tmrbyte (); /读取高位温度if(b0x7f) /最高位为1 时温度是负a=a; b=b+1; /补码转换,取反加一fg=0; /读取温度为负时fg=0sdata = a/16+b*16; /整数部分xiaoshu1 = (a&0x0f)*10/16; /小数第一位xiaoshu2 = (a&0x0f)*100/16%10;/小数xiaoshu=xiaoshu1*10+xiaoshu2; /小数void DS18B20PRO(void)tms
10、tart();/yanshi(5); /如果是不断地读取的话可以不延tmrtemp(); /读取温度,执行完毕温度将存于void Led()if(fg=1) /温度为正时显示的数据 P2=P2&0xef;P0=seg7codesdata/10; /输Delay(2); P2=P2|0xf0;0xdf;P0=seg7codesdata%10|0x80; /输出个0xbf;P0=seg7codexiaoshu1; /输出小数点0x7f;P0=seg7codexiaoshu2; /输出小Delay(1);P2=P2&0xf7;P0=seg7codej/10; /输出十位 P2=P2|0x0f;0xf
11、b;P0=seg7codej%10|0x80; /输出个位 /*Delay(8); /输出个位Delay(4);if(sdatalan=1;hong=0;sheng=0;if(fg=0) /温度为负时显示的数据 P2=P2&P0=seg7code11; /负号P0=seg7codesdata/10|0x80;P0=seg7codesdata%10;main()fg=1;x24c08_init(); /初始化24C08j=x24c08_read(2);/读出保存的数据while(1)DS18B20PRO();Led();if(jia=0)Delay(200);j+;if(jian=0)j-;x24c08_write(2,j);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1