大连交通大学2010届本科生毕业设计(论文)
附 录
#include
#define LCD_DB P2
sbit DQ = P1^0; sbit BUZZER = P1^1; sbit PWM = P1^2; sbit LCD_RS = P1^4; sbit LCD_RW = P1^5; sbit LCD_E = P1^6; sbit HEAT = P1^7;
void initial(void); void read_DHT11(void);
void LCD_write_command(unsigned char com);
void LCD_display_char(unsigned char x, unsigned char y, unsigned char dat); unsigned char read_DHT11_char(void); void control_temperature_humidity(void); void delay_xms(unsigned int time_xms); void delay_x10us(unsigned int time_x10us);
unsigned char stop_system = 0;
unsigned char lineOne[] = \ C%unsigned char lineTwo[] = \ %RH%unsigned int T0_number = 0, T1_number, PWM_width_H;
unsigned char temperature_ten, temperature_one, humidity_ten, humidity_one; unsigned char temperature_H, temperature_L, humidity_H, humidity_L, checkData;
void initial(void) {
unsigned char i, j;
23
大连交通大学2010届本科生毕业设计(论文)
}
TMOD = 0x11; //定时器0工作方式1,16位计数器;定时器1工作方式1,16位TH1 = 0xFC; TH1 = 0x66; TH0 = 0xFC; EA = 1; ET1 = 1; ET0 = 1; EX0 = 1; IT1 = 1; TR0 = 1;
LCD_write_command(0x38); //设置8位格式,2行,5x7
LCD_write_command(0x0c); //设置整体显示,关闭光标,且不闪烁 LCD_write_command(0x06); //设置输入方式,增量不移位 LCD_write_command(0x01); //清屏 for (i = 0; i < 16; i++) { }
for (j = 0; j < 16; j++) { }
LCD_display_char(14, 1, 0xDF);
//显示
LCD_display_char(j, 2, lineTwo[j]); LCD_display_char(i, 1, lineOne[i]);
//定时器1溢出周期1ms,延时
//定时器0中断周期1ms,PWM
计数器
TL0 = 0x66;
void read_DHT11(void) {
DQ = 0; delay_xms(18);
24
大连交通大学2010届本科生毕业设计(论文)
}
DQ = 1; delay_x10us(2);
if (DQ == 0) {
while (DQ == 0); }
while (DQ == 1);
humidity_H = read_DHT11_char(); humidity_L = read_DHT11_char(); temperature_H = read_DHT11_char(); temperature_L = read_DHT11_char();
unsigned char read_DHT11_char(void) {
unsigned char i, temp_one, temp_two; for (i = 0; i < 8; i++) { }
return temp_two;
25
while (DQ == 0); delay_x10us(3);
if (DQ == 0) { } else { }
temp_two <<= 1; temp_two |= temp_one; while(DQ == 1);
temp_one = 1; temp_one = 0;
大连交通大学2010届本科生毕业设计(论文)
}
void LCD_write_command(unsigned char com) { }
void LCD_display_char(unsigned char x, unsigned char y, unsigned char dat) { }
void LCD_display_DHT11(void) {
26
LCD_DB = com; LCD_RS = 0; LCD_RW = 0; LCD_E = 1; delay_xms(1); LCD_E = 0; delay_xms(5);
if (y == 1) { } else { }
LCD_DB = dat; LCD_RS = 1; LCD_RW = 0; LCD_E = 1; delay_xms(1); LCD_E = 0; delay_xms(5);
LCD_write_command(0xc0 + x); LCD_write_command(0x80 + x);
大连交通大学2010届本科生毕业设计(论文)
}
temperature_ten = temperature_H / 10 + 0x30; temperature_one = temperature_H % 10 + 0x30; humidity_ten = humidity_H / 10 + 0x30; humidity_one = humidity_H % 10 + 0x30;
LCD_display_char(12, 1, temperature_ten); LCD_display_char(13, 1, temperature_one); LCD_display_char(11, 2, humidity_ten); LCD_display_char(12, 2, humidity_one);
void control_temperature_humidity(void) {
if (temperature_H > 28) { }
else if (temperature_H < 18) { } else { }
if (temperature_H >= 23) { }
HEAT = 0; PWM_width_H = 0; HEAT = 1;
PWM_width_H = 100;
//温度→转速
PWM_width_H = (temperature_H - 18) * 10;
if (humidity_H > 65 || humidity_H < 45) { }
BUZZER = 1;
//湿度→蜂鸣
27