www.pudn.com > SHT11.rar > CO.C, change:2008-04-11,size:2435b


#define	uchar	unsigned char 
#define uint	unsigned int 
#define ulong 	unsigned long 
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳 
 
#include<REG51.h> 
 #include <intrins.h> 
 #include <stdio.h> // 
#include <math.h>    //Keil library   
 
 sbit	out =P3^0;	//加热口 
 //sbit	input =P1^1;//检测口 
 //sbit	speek =P2^0;//报警 
 
 sbit	clo =P3^7;//时钟 
 sbit	ST =P3^5;//开始 
 sbit	EOC =P3^6;//成功信号 
 
 sbit	gwei =P3^4;//个位 
 sbit	swei =P3^3;//十位 
sbit	bwei =P3^2;//百位 
sbit	qwei =P3^1;//千位 
 
sbit	speak =P0^0;//报警音 
sbit	bjled =P0^1;//报警灯 
sbit	zcled =P0^2;//正常LED 
 
 
 int count; 
 uchar xianzhi;//取转换结果 
uchar seth;//高时间 
uchar setl;//低时间 
uchar seth_mi;//高时间 
uchar setl_mi;//低时间 
 
 bit  hlbz;//高低标志 
 bit  clbz; 
 bit  spbz; 
 
  
 
 
 
 
 
 
///定时中断程序/// 
void t0 (void) interrupt 1 using 0 
{ 
   	TH0=(65536-200)/256;//5ms*200=1000ms=1s 
 	TL0=(65536-200)%256; 
	clo=!clo;//产生时钟 
     if(count>5000) 
	 { 
	   if(hlbz)  
           { 
		    if(seth_mi==0){seth_mi=seth;hlbz=0;out=0;} 
			else seth_mi--; 
		    } 
	   if(!hlbz)  
           { 
		    if(setl_mi==0){setl_mi=setl;hlbz=1;out=1;} 
			else setl_mi--; 
		    } 
	 count=0; 
	 } 
     else count++; 
 
         
 
} 
///////////// 
///////延时/////// 
delay(int i) 
{ 
   while(--i);      
      
}      
 
///////显示处理/////// 
xianshi() 
{ 
     
 
	int   abcd=0; 
    int i; 
   
  for (i=0;i<5;i++) 
 
{   
 abcd=xianzhi; 
 gwei=1; 
 swei=1; 
 bwei=1; 
 qwei=1; 
 P1=dispcode[abcd/1000]; 
  qwei=0; 
 delay(70); 
  qwei=1; 
 abcd=abcd%1000; 
 P1=dispcode[abcd/100]; 
 bwei=0; 
 delay(70); 
 bwei=1;   
 abcd=abcd%100; 
 P1=dispcode[abcd/10];  
 swei=0; 
 delay(70); 
 swei=1; 
 abcd=abcd%10; 
 P1=dispcode[abcd];  
 gwei=0; 
 delay(70); 
 gwei=1; 
 } 
} 
 
  doing() 
  { 
    if(xianzhi>100)  
	   {bjled=0;speak=1;zcled=1;} 
	else {bjled=1;speak=0;zcled=0;} 
  } 
 
 
 
 
void	main(void) 
	{ 
	seth=60;//h60秒 
	setl=90;//l90秒 
	seth_mi=60;//h60秒 
	setl_mi=90;//l90秒 
 
 
	TMOD=0X01;//定时0 16位工作模式 
 	TH0=(65536-200)/256; 
 	TL0=(65536-200)%256; 
	 
	TR0=1;	//开始计时 
	ET0=1;   //开定时0中断 
	EA=1;    //开全中断 
	while(1) 
	{ 
 	   ST=0; 
   _nop_(); 
	   ST=1; 
   _nop_(); 
	   ST=0; 
	//   EOC=0; 
	        xianshi(); 
     
		while(!EOC) 
		{ 
        xianshi(); 
		 } 
       xianzhi=P2; 
	           xianshi(); 
	   doing(); 
 
 
	} 
	}