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

📄 310_inital.c

📁 C8051F310部分模块程序.已经调试成功
💻 C
字号:
#include <stdio.h>
#include "310_struct.h"
#define uchar unsigned char
#define uint unsigned int
#define ADC0_TEMP0 0
#define ADC0_TEMP1 1
#define ADC0_HIH0  2
#define dry 1
#define warmth 2
#define wet 3
#define alarmlimit 0xaf 
void INIT_PORT (void) ;
INIT_ADC0 (unsigned char channel) ;
uint ADC0_TEMP (void) ;
void INIT_UART0 (void) ;
void INIT_TIMER2 (unsigned int iT2num) ;
void INIT_PCA(void) ;
void INIT_INTERRUPT (void) ;
void time3_open (void) ;
void time_open (void) ;
void time3_close (void) ;
void time_close (void) ;
void delay (void) ;
void INIT_SYS_CLK (void) ;
void step_machinery (uchar up_down) ;
void mode(uchar mode_num) ;
void uvcn(void) ;
void fan_speed (void) ;
void run_cn(uchar runbu) ;
void alarm(void) ;
extern xdata struct model locate ;
extern uchar power ;
extern uchar min ;
sbit AA = P3^0 ;
sbit BB = P3^1 ;
sbit CC = P3^2 ;
sbit DD = P3^3 ;
sbit fanh = P1^3 ;
sbit fanl = P1^4 ;
sbit compress = P1^5 ;
sbit uv = P1^6 ;
sbit hot = P1^7 ;
sbit expulsion = P2^0 ;
sbit ring = P2^1 ;
sbit run_lamp = P2^3 ;
sbit dry_lamp = P2^4 ;
sbit wet_lamp = P2^5 ;
sbit warm_lamp = P2^6 ;
sbit uv_lamp = P2^7 ;
/**********************************************
Function:SYSCLK_Init
Description:Choose the clock of system;   
Called by:main();
***********************************************/
void INIT_SYS_CLK (void)
{
int i; // delay counter
for (i=0; i < 256; i++) ; // XTLVLD blanking interval (>1ms)
OSCICN = 0xc3;//select local oscillator as SYSCLK
CLKSEL = 0x00;//select SYSCLK from register OSCICN setup ;
while (!(OSCICN & 0X40)) {
	;
    }
RSTSRC = 0x04 ;
}
void INIT_PORT (void){
    XBR1 = 0x42 ;
    XBR0 = 0x01 ;              // Enable crossbar and weak pull-ups
	P0MDOUT = 0x13 ;
    P1MDOUT = 0xf8 ;
	P2MDOUT = 0xff ;
	P3MDOUT = 0x0f ;
   }
void INIT_PCA(void) {
PCA0CN = 0x40 ;
PCA0MD = 0x00 ; //pca_clock = sys_clock/12 ;
PCA0CPM0 = 0x11 ; //下降沿
PCA0CPM1 = 0x21 ; //上升沿
}
INIT_ADC0 (unsigned char channel){
    REF0CN = 0x0a ;		
//Choose the VREF come from VDD;
	AMX0P = channel;//0x1e ; //channel 
//Select ADC0 channel ; example :AMX0P = 0X00 ,Select P1.0
    AMX0N = 0xff ; 
//Select ADC0 second channel ;  like up               
    ADC0CF = 0x08 ;
//Select ADC0 CLKSAR ;
    ADC0CN = 0xc0 ;
/**ADC0CN********************
*  BIT 7  6	 5	4  3  2	 1	0 
*	   |  |	 |	|  |  |__|__|___SAR Start kind choose; 000:write AD0BUSY ADC0 start
*      |  |  |  |  |                                   001:timer 0 full ADC0 start
*	   |  |	 |	|  |    							   010:timer 2 full ADC0 start
*	   |  |	 |	|  |								   011:timer 1 full ADC0 start
*	   |  |	 |	|  |								   100:information of CNVSTR input
*	   |  |	 |	|  |    							   101:timer 3 full ADC0 start 
*	   |  |	 |	|  |_____________ADC0 windows compare 
*	   |  |	 |	|________________ADC0 busy 
*	   |  |	 |___________________
*	   |  |______________________
*	   |_________________________
*/
}
uint ADC0_TEMP (void){
    uint temp ;
	uint buffer ;
	uchar change_times ;
	temp = 0 ;
	for (change_times = 0;change_times < 0x0f;change_times++){
	    ADC0CN |= 0x10 ;
	    while(AD0INT == 0){                          //Waiting conventer over;
        }
        ADC0CN &= 0xcf; 
		buffer = 0 ;                                  //Clear buffer ;
        buffer = ADC0H ;                           //Adc0h to buffer ;
		buffer = (buffer << 8) ;
        buffer += ADC0L ;
		temp += buffer ;
	}	
	return (temp) ;
}
void INIT_UART0 (void)
{
SCON0 = 0x10 ; // SCON0: mode 1, 8-bit UART, enable RX
}
/**********************************************
入口地址:Timer2_Init()
功能:T2作为串口发送和接收时钟;
被调用函数:main();
***********************************************/
void INIT_TIMER2 (unsigned int iT2num)
{
CKCON = 0x00 ;//use system/12 clock;
TL1 = iT2num;//0x95; // Init reload values
TH1 = iT2num;//0x95; // set to reload immediately
TMOD = 0x20 ;
TCON = 0x00 ;
TR1 = 1 ;
}

void INIT_INTERRUPT (void){
    EIE1 = 0x98 ;		//Enable interrupt all of PCA,T3,AD;
    IE = 0x20 ;			//open T2; 
	EA = 1 ;
}
void delay (void){
uint delay_num ;
uchar delay_loop ;
for (delay_loop = 0 ;delay_loop<200 ;delay_loop++){
    for (delay_num = 0;delay_num < 400;delay_num++){
	    ;
        }
	}
}
void step_machinery (uchar up_down) {
uchar step_num ;
if (up_down != 0){
for (step_num = 10 ;step_num != 0 ;step_num --){
    AA = 1 ;
	BB = 0 ;
	CC = 0 ;
	DD = 0 ;
	delay () ;
	AA = 0 ;
	BB = 1 ;
	CC = 0 ;
	DD = 0 ; 
	delay () ;
	AA = 0 ;
	BB = 0 ;
	CC = 1 ;
	DD = 0 ;
	delay () ;
	AA = 0 ;
	BB = 0 ;
	CC = 0 ;
	DD = 1 ;
	delay () ;
	}
for (step_num = 10 ;step_num != 0 ;step_num --){
    AA = 1 ;
	BB = 0 ;
	CC = 0 ;
	DD = 0 ;
	delay () ;
	AA = 0 ;
	BB = 0 ;
	CC = 0 ;
	DD = 1 ; 
	delay () ;
	AA = 0 ;
	BB = 0 ;
	CC = 1 ;
	DD = 0 ;
	delay () ;
	AA = 0 ;
	BB = 1 ;
	CC = 0 ;
	DD = 0 ;
	delay () ;
	}
	}
else {
    AA = 0 ;
	BB = 0 ;
	CC = 0 ;
	DD = 0 ;
	delay () ;
	}
}
void time_open (void){
TMR2RLL = 0X00 ;
TMR2RLH = 0X00 ;
TMR2L = 0X00 ;
TMR2H = 0X00 ;
TMR2CN = 0X04 ;
}
void time3_open (void){
TMR3RLL = 0X00 ;
TMR3RLH = 0X00 ;
TMR3L = 0X00 ;
TMR3H = 0X00 ;
TMR3CN = 0x04 ;
}
void time3_close (void){
TMR3CN = 0x00 ;
}
void time_close (void){
TMR2CN = 0x00 ;
}
void time (void){
if (locate.timer == 0){
    time3_close () ;
	}
}
void mode(void) {
    static uchar history ;
    uint temp_adopt ;
    uchar temph ;
    uchar templ ;
if (locate.mode_choose == dry){		   //干衣模式
    dry_lamp = 1 ;
	wet_lamp = 0 ;
	warm_lamp = 0;
	compress = 0 ;
	delay () ;
	INIT_ADC0 (ADC0_TEMP0) ;
	temp_adopt = ADC0_TEMP () ;
    temp_adopt = (temp_adopt >> 4) ;
    temp_adopt = (temp_adopt * 10) / 17 ;
    templ = temp_adopt ;
    temph = (temp_adopt >> 8) ;
//	SBUF0 = templ ;                     //将发送缓冲中的数据发送出去;
//      while(TI0 == 0)                            //等待;
//        {}  
//	TI0 = 0;
	if(templ > 35){
	    hot = 0 ;
		delay () ;
	    }
	if(templ < 25){
        hot = 1 ;
		delay () ;
	    }
	if (min == 1){	  //3分钟时间到
	            min = 0 ;		  //清除时钟标志
		        power = 0 ;	//locate.power ;
                time_close ();	  //关闭定时器
			    history = 0 ;
              }
	if(locate.power == 0){
	    if(history != 1){
	        time_open () ;		   //定时器开启
	        history = 1 ;
            }
	    }
	else {
	    power = 1 ;
		}
    }
if(locate.mode_choose == wet){	     //抽湿模式
    static uchar history ;
    dry_lamp = 0 ;
	hot = 0 ;
	wet_lamp = 1 ;
	warm_lamp = 0;
	delay () ;	
	power = locate.power ;
    if (min == 1 ){	  //3分钟时间到
        min = 0 ;		  //清除时钟标志
	    history = 0 ;
	    compress = 1 ;
		delay () ;
	    time_close ();	  //关闭定时器
        }
    INIT_ADC0 (ADC0_HIH0) ;
    temp_adopt = ADC0_TEMP () ;
    temp_adopt = (temp_adopt >> 4) ;
    temp_adopt = (temp_adopt * 10) / 7 ;
    templ = temp_adopt ;
    temph = (temp_adopt >> 8) ;
//    SBUF0 = templ ;                     //将发送缓冲中的数据发送出去;
//    while(TI0 == 0)                            //等待;
//	    {}  
//	TI0 = 0;
    if((templ - 2) > locate.humidity ){
	    if(locate.power == 0){
		        if(history != 1){
	            time_open () ;		   //定时器开启
	            history = 1 ;
                }
			}
    	}
	if((locate.humidity - 2) > templ){
	compress = 0 ;
	delay () ;
	    }
    }
if(locate.mode_choose == warmth){			  //才暖模式
    dry_lamp = 0 ;
	wet_lamp = 0 ;
	warm_lamp = 1 ;
	compress = 0 ;
	delay () ;
	INIT_ADC0 (ADC0_TEMP0) ;
    temp_adopt = ADC0_TEMP () ;
    temp_adopt = (temp_adopt >> 4) ;
    temp_adopt = (temp_adopt * 10) / 17  ;
    templ = temp_adopt ;
    temph = (temp_adopt >> 8) ;
//	SBUF0 = templ ;                     //将发送缓冲中的数据发送出去;
//        while(TI0 == 0)                            //等待;
//	        {}  
//	TI0 = 0;
	if((templ - 1) > locate.temp){
	    hot = 0 ;
		delay () ;
		}
	if((locate.temp - 1) > templ){
	    hot = 1 ;
		delay () ;
		}
	 if (min == 1){	  //3分钟时间到
	        min = 0 ;		  //清除时钟标志
		    power = 0;//locate.power ;
			history = 0 ;
            time_close ();	  //关闭定时器
            }
	if(locate.power == 0){
	    if(history != 1){
	        time_open () ;		   //定时器开启
	        history = 1 ;
            }
	    }
	else {
	    power = 1 ;
		}
	}
}
void uvcn(void){
    if(locate.uv == 1){
	    uv = 1 ;
        uv_lamp = 1 ;
		delay () ;
		}
	else {
	    uv = 0 ;
		uv_lamp = 0 ;
		delay () ;
		}
	}
void fan_speed (void){
    if(locate.fan == 1){
	    fanh = 1 ;
		fanl = 0 ;
		delay () ;
		}
	else {
	    fanh = 0 ;
		fanl = 1 ;
		delay () ;
		}
}
void run_cn(uchar runbu){
if(runbu != 0){
    run_lamp = 1 ;
	expulsion = 0 ;
	DD = 1 ;
	delay () ;	
	}
else {
    run_lamp = 0 ;
	expulsion = 1 ;
	DD = 0 ;
	delay () ;
	}
}
void alarm(void){
    uchar alarmnum ;
    INIT_ADC0 (ADC0_TEMP1) ;
	alarmnum = ADC0_TEMP () ;
    if(alarmnum > alarmlimit){
	    ring = 1 ;
		}
	else {
	    ring = 0 ;
		}
}

⌨️ 快捷键说明

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