气流量控制系统Word文档格式.docx
《气流量控制系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《气流量控制系统Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
uintvoltage1,Disval1,voltage2,Disval2;
uintvalue,dis_val;
//无符号整型全局变量定义
ucharstatus=4,status_1=0,status_2=0,flag;
//无符号字符型全局变量定义
ucharstatus_sw=0;
ucharnum;
//***************************************
#defineS1(PINA&
0x01)//递减
#defineS2(PINA&
0x02)//位数设定
#defineS3(PINA&
0x04)//运行
#defineS4(PINA&
0x08)//存储
#defineS5(PINA&
0x10)//M4
#defineS6(PINA&
0x20)//M3
#defineS7(PINA&
0x40)//M2
//#defineS8(PINA&
0x80)//M1
#defineS9(PINC&
0x02)//递增
#defineS10(PINC&
0x01)//切换
#definextal8
//***************************************
#defineEEWE1
#defineEEMWE2
#defineEERE0
//***************写EEPROM子函数***********
voidWRITE_EEP(uintaddress,uchardat)//dat为待写数据,add为EEPROM的某单元地址
{
while(EECR&
(1<
EEWE));
//等待前一次写操作完成
EEAR=address;
//设定单元地址
EEDR=dat;
//将数据写入EEDR
EECR|=(1<
EEMWE);
//允许EEPROM操作
EEWE);
//开始EEPROM写操作
}
//****************读EEPROM子函数*******************
ucharREAD_EEP(uintaddress)//add为EEPROM的某单元地址
EERE);
returnEEDR;
//返回读出的数据
//****************************************
voidDelay_1ms(void)
{uinti;
for(i=1;
i<
(uint)(xtal*143-2);
i++)
;
//========================================
voidDelay_nms(uintn)
uinti=0;
while(i<
n)
{Delay_1ms();
i++;
}
/******************************************/
uintconv(uintl)//数据转换子函数,定义i为无符号整型变量
longm;
//定义x为无符号长整型局部变量
uintn;
//定义y为无符号整型局部变量
m=(5000*(long)l)/1023;
//将变量i转换成需要显示的形式
n=(uint)m;
//将无符号长整型变量x强制转换成无符号整型变量y
returnn;
//返回y的值
}
voidport_init(void)
PORTA=0x7F;
DDRA=0x00;
MCUCSR|=0x80;
//使PORTB端口的JTAG功能无效
PORTB=0x00;
DDRB=0xFF;
//使PORTC端口的JTAG功能无效
PORTC=0x03;
DDRC=0xfC;
//使PORTD端口的JTAG功能无效
PORTD=0x00;
DDRD=0xff;
voidtimer0_init(void)
TCNT0=0x83;
TCCR0=0x04;
voidtimer1_init(void)
TCCR1A=0xA3;
TCCR1B=0x0A;
OCR1A=0x00;
OCR1B=0x00;
TCNT1H=0xD8;
TCNT1L=0xF0;
//***************看门狗初始化,分频系数为256K*************
voidwatchdog_init(void)
__watchdog_reset();
WDTCR=0x1b;
WDTCR=0x00;
voidadc_init(void)//模数转换初始化子函数
ADCSRA=0x00;
ADMUX=0x07;
//选择ADC输入通道为7
ACSR=0x80;
//关掉模拟比较器
ADCSRA=0xCE;
//单次转换\中断
//ADCSRA=0xE9;
//ADC中断使能,预分频器系数取2,ADC转换使能,自动触发使能
voidinit_devices(void)
__disable_interrupt();
//disableallinterrupts
port_init();
timer0_init();
//timer1_init();
adc_init();
MCUCR=0x8A;
//中断方式控制
GICR=0xC0;
//使能中断方式
TIMSK=0x03;
__enable_interrupt();
//re-enableinterrupts11
/****************************************************/
voidscan()
if(S10==0)//切换键
{
Delay_nms(10);
if(S10==0)
while(!
S10);
if(++status_2>
2){status_2=0;
if(S9==0)//个十百位选择
if(S9==0)
{
S9);
if(++status_sw>
3){status_sw=0;
if(status_sw==0){PORTB|=(1<
0);
PORTB&
=~(1<
1);
2);
3);
elseif(status_sw==3){PORTB|=(1<
elseif(status_sw==2){PORTB|=(1<
elseif(status_sw==1){PORTB|=(1<
if(S2==0)//递增
if(S2==0)
S2);
if((status_2==0)&
&
(status_sw==0))
if(++cnt1_1>
9)cnt1_1=0;
elseif((status_2==0)&
(status_sw==1))
if(++cnt1_2>
9)cnt1_2=0;
(status_sw==2))
if(++cnt1_3>
9)cnt1_3=0;
(status_sw==3))
if(++cnt1_4>
9)cnt1_4=0;
/////////////////////////////////////////
if((status_2==1)&
if(++cnt2_1>
9)cnt2_1=0;
elseif((status_2==1)&
if(++cnt2_2>
9)cnt2_2=0;
if(++cnt2_3>
9)cnt2_3=0;
if(++cnt2_4>
9)cnt2_4=0;
if(S1==0)//递减
if(S1==0)
S1);
if(--cnt1_1==0)cnt1_1=9;
if(--cnt1_2==0)cnt1_2=9;
if(--cnt1_3==0)cnt1_3=9;
if(--cnt1_4=