#include
显示温湿度
{ EN=0; RS=0; P0=date; EN=1; delayms(2); EN=0; } void init_1602() { unsigned char h; RW=0; WRITE_LCD1602_COM(0x38); WRITE_LCD1602_COM(0x0c); WRITE_LCD1602_COM(0x06); WRITE_LCD1602_COM(0x01); WRITE_LCD1602_COM(0x80+0x40); for(h=0;h<16;h++) WRITE_LCD1602_DAT(DIS_TIM[h]); } /*************************************************** 函数名称:延时子函数 函数功能:按键消抖 ***************************************************/ void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) } void Main_display() for(j=110;j>0;j--);
27
{ WRITE_LCD1602_COM(0x80+0x40+7); WRITE_LCD1602_DAT(LCD1602_Table[PM_dat00/100]); WRITE_LCD1602_DAT(LCD1602_Table[PM_dat0/10]); WRITE_LCD1602_DAT(LCD1602_Table[PM_dat]); } void main() { uint PM_AD_buf=0; uint PM_AD_dat=0; uint AD_dat1=0; float PM_js=0.0; bit flag1=0; TMOD=0X02; TH0=216; //每40us进一次中断 TL0=216; ET0=1; TR0=0; GP2Y_LED=0; EA=1; init_1602(); 28
while(1) { GP2Y_LED=1; TR0=1; while(1) { } if(time_num1>5) break; AD_dat1=A_D(1); PM_AD_dat=PM_AD_dat*4+AD_dat1; PM_AD_dat/=5; PM_js=((float)(PM_AD_dat/256.0+0.01))*120000.0*0.035; // PM_js=((float)(PM_AD_dat/256.0-0.0356))*120000.0; } } void time0_int() interrupt 1 { time_num1++; if(time_num1==8) { } else if(time_num1>250) { time_num1=0; TR0=0; 29
GP2Y_LED=0; PM_dat=(uint)(PM_js); Main_display();
flag1=1; } } /***************************************************** 功能:将模拟信号转换成数字信号 ***************************************************/ sbit ADC0832_CS=P1^2; sbit ADC0832_CLK=P1^0; sbit ADC0832_DIO=P1^1; unsigned int A_D(bit flag) { unsigned char i; unsigned char dat; ADC0832_CS=1; //一个转换周期开始 ADC0832_CLK=0; //为第一个脉冲作准备 ADC0832_CS=0; //CS置0,片选有效 ADC0832_DIO=1; //DIO置1,规定的起始信号 ADC0832_CLK=1; //第一个脉冲 ADC0832_CLK=0; //第一个脉冲的下降沿,此前DIO必须是高电平 ADC0832_DIO=1; //DIO置1, 通道选择信号 ADC0832_CLK=1; //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0 ADC0832_CLK=0; //第二个脉冲下降沿 if(!flag) ADC0832_DIO=0; //DI置0,选择通道0 else ADC0832_DIO=1; //DI置1,选择通道1 ADC0832_CLK=1; //第三个脉冲 ADC0832_CLK=0; //第三个脉冲下降沿 ADC0832_DIO=1; //第三个脉冲下沉之后,输入端DIO失去作用,应置1 ADC0832_CLK=1; //第四个脉冲 30
for(i=0;i<8;i++) //高位在前 { ADC0832_CLK=1; //第四个脉冲 ADC0832_CLK=0; dat<<=1; //将下面储存的低位数据向右移 dat|=(unsigned char)ADC0832_DIO; //将输出数据DIO通过或运算储存在dat最低位 } ADC0832_CS=1; //片选无效 return dat; } //将读书的数据返回 31