⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tempfan.c

📁 Automatic Temperature Controlled Fan With PWM Conrol in Keil
💻 C
字号:
#include <reg52.H>#include <stdio.h>#include <string.h>
#include <intrins.h>
#include "ADC.c"
#include "LCD.c"

sbit PWMPIN= P3^7;
bit USRFLG=0;
unsigned char pwm_width;
void itoa(unsigned int value  ,unsigned char *string);
void Speed(unsigned char Temp);


//***************************************************************

// 		Timer 0 interrupt

//***************************************************************

void timer0() interrupt 1 
{  if(!USRFLG)
  {       //Start of High level    USRFLG = 1; //Set flag    PWMPIN = 1;     //Set PWM o/p pin    TH0 = pwm_width;        //Load timer    TF0 = 0;                //Clear interrupt flag //               return;         //Return  }  else 
  {  //Start of Low level     USRFLG = 0; //Clear flag     PWMPIN = 0;     //Clear PWM o/p pin     TH0 = 255 - pwm_width;  //Load timer     TF0 = 0;        //Clear Interrupt flag//                return;         //return  }}


//***************************************************************

// 			Serial Port initialization for 9600 baud

//***************************************************************

void SerInit()
{
	TMOD |=0x20;
	TH1=-3;
	SCON=0x50;
	TR1=1;
	TI=1;
}

//***************************************************************

// 			Delay for 1 MS

//***************************************************************

void Delay_MS(unsigned int value)
{
	unsigned int x,y;
	for(x=0;x<1000;x++)
		for(y=0;y<value;y++);
}
//***************************************************************

// 			PWM setup

//***************************************************************
void pwm_setup()
{   TMOD = 0;   pwm_width = 160;   EA = 1;   ET0 = 1;   TR0 = 1;
   TH0=0;
   TL0=0;}
//***************************************************************

// 			Delay for 1 MS

//***************************************************************

void main()
{ 
	unsigned int Temp;
	unsigned char Ascii[10];
	ADCinit();
	SerInit();
	lcd_init();

	lcd_com(15); // first line
	lcd_puts("   TEMPERATURE ");
	lcd_com(0xC0);	   //second line
	lcd_puts(" CONTROLLED FAN");
	Delay_MS(100);
	
	lcd_com(0x01);	
	lcd_com(0x80);
	lcd_com(0x0C);
	lcd_puts("TEMP    deg C");
	pwm_setup();
	while(1)
	{
		AddressLatch();
		Start();
		EOCCheck();
		Temp=(unsigned char)ReadADC();
 		Speed(Temp);
		itoa(Temp ,Ascii);
		lcd_com(0x84);
		lcd_puts(Ascii);

	}
}

//***************************************************************

// 			Integer to Ascii Conversion

//***************************************************************
 void itoa(unsigned int value  ,unsigned char *string)
{

	if(value<10)
	{

			string[3]='\0';
			string[2]=((value%10)+0x30);
			value=value/10;
			string[1]=((value%10)+0x30);
			string[0]=' ';
	}
	else if(value<100)
	{
			string[3]='\0';
			string[2]=((value%10)+0x30);
			value=value/10;
			string[1]=((value%10)+0x30);
			string[0]=' ';
	}
	else if(value<1000)
	{

		string[3]='\0';
		string[2]=((value%10)+0x30);
		value=value/10;
		string[1]=((value%10)+0x30);
		value=value/10;
		string[0]=((value%10)+0x30);

	}
	else if(value<10000)
	{
		string[4]='\0';
		string[3]=((value%10)+0x30);
		value=value/10;
		string[2]=((value%10)+0x30);
		value=value/10;
		string[1]=((value%10)+0x30);
		value=value/10;
		string[0]=((value%10)+0x30);
	}
}

//********************************************************************


//********************************************************************
 void Speed(unsigned char Temp)
 {
	if(Temp>50)
	 pwm_width=0;
	else if(Temp<50)
		if(Temp<30)
		pwm_width=255;
		else 
   	    pwm_width=(255-((Temp-30)*6));
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -