📄 csy.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 + -