非接触式红外体温计
单片机源程序如下:
- #include<reg52.h>
- #include"MLX906.h"
- #include"LCD1602.h"
- #include"EEPROM.h"
- #include"I2C.h"
- #include"WT558D.h"
- #include"USART.h"
- sbit red =P3^3;
- sbit green =P3^4;
- sbit blue =P3^5;
- sbit key =P3^6;
- uchar tab[] ="Temp:";
- int main()
- {
- uchar i;
- uint wendu; //存储读取的值
- uint xiaoshu,zhengshu; //存储小数和整数
- uchar ge,shi,bai,fyi,fer; //存储个,十,百,分数的第一位,分数的第二位
- double num;
- UsartInit();
- Lcd_init();
- for(i=0;i<5;i++)
- {
- write_data(tab[i]);
- }
- bai = EEPROM_read_data(0);
- shi = EEPROM_read_data(1);
- ge = EEPROM_read_data(2);
- fyi = EEPROM_read_data(3);
- fer = EEPROM_read_data(4);
- if(bai!=0)
- {
- write_data(bai+0x30);
- }
- write_data(shi+0x30);
- write_data(ge+0x30);
- write_data(0x2e);
- write_data(fyi+0x30);
- write_data(fer+0x30);
- write_data(0xdf);
- write_data('C');
- write_com(0x85);
- key=1;
- while(1)
- {
- if(key==0)
- {
- delay(10);
- if(key==0)
- {
- wendu=read_temp();
- wendu=wendu*2;
- if(wendu>=27315)
- {
- wendu=wendu-27315+530; //530是进行温度补偿
- zhengshu=wendu/100; //整数部分
- xiaoshu=wendu-zhengshu*100; //小数部分
- bai = zhengshu/100;
- shi = zhengshu%100/10;
- ge = zhengshu%10;
- fyi = xiaoshu/10;
- fer = xiaoshu%10;
- num = wendu*1.0/100;
- EEPROM_write_data(0,bai);
- delay(20);
- EEPROM_write_data(1,shi);
- delay(20);
- EEPROM_write_data(2,ge);
- delay(20);
- EEPROM_write_data(3,fyi);
- delay(20);
- EEPROM_write_data(4,fer);
- delay(20);
- }
- if(bai!=0)
- {
- write_data(bai+0x30);
- }
- write_data(shi+0x30);
- write_data(ge+0x30);
- write_data(0x2e);
- write_data(fyi+0x30);
- write_data(fer+0x30);
- write_data(0xdf);
- //write_data('C');
- }while(!key);
- write_com(0x85);
- if(num<36.0)
- {
- blue = 0;
- red = 1;
- green = 1;
- }
- else if(num>=36.0&&num<=38.0)
- {
- green = 0;
- red = 1;
- blue = 1;
- }
- else if(num>38.0)
- {
- red = 0;
- green =1;
- blue = 1;
- }
- //语音播报
-
- Send_oneline(shi*10);
- WT558D_Delay1ms(500);
- if(ge!=0)
- {
- Send_oneline(ge);
- WT558D_Delay1ms(300);
- }
- Send_oneline(56);
- WT558D_Delay1ms(300);
- Send_oneline(fyi);
- WT558D_Delay1ms(300);
- Send_oneline(fer);
- WT558D_Delay1ms(600);
- if(num<36.0)
- {
- Send_oneline(58);
- }
- else if(num>=36.0&&num<=38.0)
- {
- Send_oneline(59);
- }
- else if(num>38.0)
- {
- Send_oneline(57);
- }
- }
- }
-
- }
- //串口中断
- void serial() interrupt 4
- {
- uint wendu; //存储读取的值
- uint xiaoshu,zhengshu; //存储小数和整数
- uchar ge,shi,bai,fyi,fer; //存储个,十,百,分数的第一位,分数的第二位
- double num;
- uchar start = Usart_Read();
- if(start =='s')
- {
- wendu=read_temp();
- wendu=wendu*2;
- if(wendu>=27315)
- {
- wendu=wendu-27315+530; //530是进行温度补偿
- zhengshu=wendu/100; //整数部分
- xiaoshu=wendu-zhengshu*100; //小数部分
- bai = zhengshu/100;
- shi = zhengshu%100/10;
- ge = zhengshu%10;
- fyi = xiaoshu/10;
- fer = xiaoshu%10;
- Usart_Write(shi+0x30);
- Usart_Write(ge+0x30);
- Usart_Write('.');
- Usart_Write(fyi+0x30);
- Usart_Write(fer+0x30);
- num = wendu*1.0/100;
- EEPROM_write_data(0,bai);
- delay(20);
- EEPROM_write_data(1,shi);
- delay(20);
- EEPROM_write_data(2,ge);
- delay(20);
- EEPROM_write_data(3,fyi);
- delay(20);
- EEPROM_write_data(4,fer);
- delay(20);
- }
- if(bai!=0)
- {
- write_data(bai+0x30);
- }
- write_data(shi+0x30);
- write_data(ge+0x30);
- write_data(0x2e);
- write_data(fyi+0x30);
- write_data(fer+0x30);
- write_data(0xdf);
- //write_data('C');
- }while(!key);
- write_com(0x85);
- if(num<36.0)
- {
- blue = 0;
- red = 1;
- green = 1;
- }
- else if(num>=36.0&&num<=38.0)
- {
- green = 0;
- red = 1;
- blue = 1;
- }
- else if(num>38.0)
- {
- red = 0;
- green =1;
- blue = 1;
- }
- //语音播报
-
- Send_oneline(shi*10);
- WT558D_Delay1ms(500);
- if(ge!=0)
- {
- Send_oneline(ge);
- WT558D_Delay1ms(300);
- }
- Send_oneline(56);
- WT558D_Delay1ms(300);
- Send_oneline(fyi);
- WT558D_Delay1ms(300);
- Send_oneline(fer);
- WT558D_Delay1ms(600);
- if(num<36.0)
- {
- Send_oneline(58);
- }
- else if(num>=36.0&&num<=38.0)
- {
- Send_oneline(59);
- }
- else if(num>38.0)
- {
- Send_oneline(57);
- }
- }
复制代码
所有资料51hei提供下载:
总程序.rar
(73.09 KB, 下载次数: 53)
|