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

📄 csy.c

📁 抽水机程序
💻 C
字号:
/*******************************************
HT46R47   4M CSYC
*******************************************/
#include <ht46r47.h>

#pragma vector time0 @ 0x08   //定时中断向量8ms

#define     voltage   _pb0
#define     ps        _pb1
#define     flow      _pb2
#define     motor     _pb3
#define     led       _pa
#define     lop       _pd0

//全局变量
unsigned int vtimer2s;
unsigned int turnover;
unsigned int ledtimer;

struct{
    unsigned b0:1;
    unsigned b1:1;
    unsigned b2:1;
    unsigned b3:1;
    unsigned b4:1;
    unsigned b5:1;
    unsigned b6:1;
    unsigned b7:1;
    }bitbit;
#define  motor_flag  bitbit.b0
#define  flow_flag   bitbit.b1
#define  ps_flag     bitbit.b3
#define  ledlight    bitbit.b4
#define  ledflash    bitbit.b5
#define  ledturn     bitbit.b6


void delay1ms(unsigned int chu){
    while(--chu)
    _delay(800);
}

void timer0(){
    _ton=0;
    _tmr=5;
    ledtimer++;
    if(ledtimer>=0x0f){
        ledlight=0;
        ledtimer=0;
    }
    else if(ledtimer<0x0f){
         ledlight=1;
        }                           //每秒闪一下
    _nop();
    if(ledflash){
        if(ledlight)led=0xff;
        else if(!ledlight)led=0x00;
    }
    if(ledturn){
        if(ledtimer>=0x0f){
        led=turnover;
        delay1ms(5);          //_rlc(&turnover);
        #asm
        rlc _turnover
        #endasm        
        }
    }
    _ton=1;
}
unsigned  int adchange(){
    unsigned int i;
    unsigned int advalue;
    for(i=0;i<10;i++){
           _start=0b0;																		//启动AD 8bit  vdd/256
		   _start=0b1;
		   _start=0b0;
		   while(_eocb);
		   advalue+=_adrh;
		   _start=0b1;																		//复位AD
		   _start=0b0; 
		}
		return advalue/10;
}
           
main(){
    unsigned int i;
    unsigned int value;
    unsigned int ftimer5s;
    unsigned int ftimer1s;     
    _pac=0b00000000;
    _pa=0b00000000;
    _pbc=0b00000110;
    _pb3=1;
    _intc=0b00000101;        //打开定时中断  总中断
    _tmrc=0b10010111;        //fsys/4  32us
    _tmr=5;  
    _acsr=0b00000001;        //A/D 时钟控制选择器
    _adcr=0b01001000;           //  可以在睡觉时关闭  A/D    
    motor_flag=0;              //停止
    flow_flag=1;               //没有水
    ps_flag=1;                 //
    vtimer2s=0;
    turnover=0x03;   
    delay1ms(100);
    while(1){
        if(motor_flag){            //电机启开   >1.4v (<160v)
            value=adchange();
            if(value>=0x8f){
                 if(++vtimer2s>=200){
                     vtimer2s=0;
                     motor=0;       //关闭
                     motor_flag=0;
                     ledflash=1;
                     ledturn=0;
                    }
                }
             else if(value<=0x87){
                     vtimer2s=0;
                     motor=1;
                     motor_flag=1;
                     ledflash=0;
                     ledturn=1;              //打开轮流闪
                    }
            }
        else if(!motor_flag){
             value=adchange();
             if(value<0xa7){           //停的状态 >180v
                 motor=1;
                 motor_flag=1;
                 ledflash=0;
                 ledturn=1;
                }
             else if(value>0xa7){
                   motor=0;
                   motor_flag=1;
                   ledflash=1;
                   ledturn=0;
                }
            }
        if(++ftimer5s>500&&(motor_flag==1)){
            if(!flow){
                ftimer5s=0;
                flow_flag=1;
                motor=1;
            }
            else if(flow){                       //没有水流
                     if(++ftimer1s>100){
                        if(flow){
                            ftimer1s=0;
                            flow_flag=0;
                            motor=0;
                        }
                    }
                }
            }
            if(ps&&(flow_flag==0)){
                lop=1;
                delay1ms(100);
                lop=0;
            }
            else if((!ps)&&(flow_flag==0)){
                lop=1;
            }
            while(!flow_flag){
                motor=0;
                if(!flow)flow_flag=1;
            }
        }
    }
                
            
                
                 
                 
                     
                       
                  
       
    
    

⌨️ 快捷键说明

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