可預(yù)置的8位計(jì)數(shù)器程序的主要部分分析
/******************************************************************/
void pt_cnt(void) //輸出控制子程序開始
{
if((cnt[0]==pre_cnt[0])(cnt[1]==pre_cnt[1])
(cnt[2]==pre_cnt[2])(cnt[3]==pre_cnt[3])
(cnt[4]==pre_cnt[4])(cnt[5]==pre_cnt[5])
(cnt[6]==pre_cnt[6])(cnt[7]==pre_cnt[7])) //若計(jì)數(shù)值等于預(yù)置值
out_flag=1; //輸出標(biāo)志置1
else out_flag=0; //否則輸出標(biāo)志置0
//=================================================
if(out_flag)drv=0; //若輸出標(biāo)志為1,輸出端(P3.4)置0,驅(qū)動(dòng)光耦U2
else drv=1; //否則輸出端(P3.4)置1
} //輸出控制子程序結(jié)束
/**********************************************************/
void main(void) //主程序開始
{ IE=0x84; //開放CPU中斷,開放外中斷1的中斷
IT1=1; //置外中斷1為邊沿觸發(fā)
while(1) //無限循環(huán)
{P3_6=0;P3_7=1; //禁止發(fā)送給顯示器,消隱有效
SBUF=0x00;while(!TI);TI=0; //向IC2發(fā)送0x00,使IC2輸出為全0
if((P30x24)!=0x24)keydown_flag=1; //檢測(cè)P3.2、P3.5是否為高電平。
//若不為高電平,說明有鍵按下,鍵被按下標(biāo)志置1
else keydown_flag=0; //否則,鍵被按下標(biāo)志置0
//-------------------------------------------------------------------------------
SBUF=0xfe;while(!TI);TI=0; //向IC2發(fā)送0xfe
if(!P3_2)set_flag=!set_flag; //若P3.2為0,說明S9鍵按下,標(biāo)志set_flag取反
//==================================================
if(!set_flag){cnter();dis_cnter();pt_cnt();delay(100);}
//若標(biāo)志set_flag為0,調(diào)用計(jì)數(shù)、顯示計(jì)數(shù)、輸出控制的子程序
else {scan_key();dis_pre_cnter();delay(10);}
否則標(biāo)志set_flag為1,調(diào)用掃描S1~S8鍵、顯示預(yù)置值的子程序
//=====================================================
if(keydown_flag)delay(300); //因有鍵按下,調(diào)用延時(shí)300mS子程序,
//以免調(diào)整鍵值的速度過快
}
} //主程序結(jié)束
/***************************************************************/
void extern_int1(void) interrupt 2 using 1 //外中斷1服務(wù)子程序
{
cnt[0]++; //計(jì)數(shù)器的最低位加1
}
塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理
評(píng)論