非接觸式紅外體溫計
單片機源程序如下:
- #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)
2020-4-5 00:30 上傳
點擊文件名下載附件
|