unsigned char bdata flag;
sbit up_flag=flag^0;
sbit down_flag=flag^1;
sbit stop_flag=flag^2;
sbit ccw_flag=flag^3;
sbit sw2=P3^2;
sbit sw3=P3^3;
char i=20; /* 1 秒=20*50ms */
char di; /* 七段顯示器位址碼 */
int count; /* 七段顯示器的計數值 */
char ccw_cnt=0;
char disp[]={0,0,0,0}; /* 定義兩位數顯示值儲存緩衝區 */
char code act[]={0xfe,0xfd,0xfb,0xf7};
char code data_7seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};
void delay_1ms(unsigned int k)
{
unsigned int i,j;
for(i=0;i<=k;i++)
for(j=0;j<=110;j++)
;
}
void T0_int(void) interrupt 1 /* T0中斷函數:顯示器動態掃描 */
{
TH0=(65536-5000)/256; /* 重設初值 */
TL0=(65536-5000)%256;
P1=act[di]; /* 輸出位址碼 */
P0=disp[di]; /* 輸出所掃描位數的顯示資料 */
di++; /* 掃描下一位七段顯示器 */
if(di==4) /* 已掃描至最後一位數? */
di=0; /* 重新掃描第一位七段顯示器 */
} /* T0_int */
void T1_int(void) interrupt 3 /* T1中斷函數:延遲時間1秒 */
{
TH1=(65536-50000)/256; /* 重設初值 */
TL1=(65536-50000)%256;
i = i-1;
if(i==0)
{ //* 已經過0.1秒? */
i=20; //* 重設i=20 *
if(ccw_flag)
{
ccw_cnt++;
if(ccw_cnt==9)
{
ccw_cnt=1;
}
}
else
{
ccw_cnt--;
if(ccw_cnt<0)
{
ccw_cnt=9;
}
}
if(ccw_cnt==1)
{
disp[2]=11;
disp[3]=10;
}
else if(ccw_cnt==2)
{
disp[2]=10;
disp[3]=11;
}
else if(ccw_cnt==3)
{
disp[2]=10;
disp[3]=12;
}
else if(ccw_cnt==4)
{
disp[2]=10;
disp[3]=13;
}
else if(ccw_cnt==5)
{
disp[2]=10;
disp[3]=14;
}
else if(ccw_cnt==6)
{
disp[2]=14;
disp[3]=10;
}
else if(ccw_cnt==7)
{
disp[2]=15;
disp[3]=10;
}
else if(ccw_cnt==8)
{
disp[2]=16;
disp[3]=10;
}
/*================================*/
if(stop_flag){;}
else if(up_flag)
{
count++;
if(count==100)
{
count=0;
}
disp[0]=count%10; /* 取出十位數顯示碼 */
disp[1]=count/10;
}
else if(down_flag)
{
count--;
if(count==0)
{
count=99;
}
disp[0]=count%10; /* 取出十位數顯示碼 */
disp[1]=count/10;
}
}
} /* T1_int */
void init()
{
IE=0x8A; /* 致能計時器0、1中斷 */
TMOD=0x11; /* T0:工作模式0,T1:工作模式1 */
TH0=(65536-5000)/256; /* 設定T0初值,每5ms中斷一次 */
TL0=(65536-5000)%256;
TH1=(65536-50000)/256; /* 設定T1初值,每50ms中斷一次 */
TL1=(65536-50000)%256;
}
void test_7seg()
{
disp[0]=data_7seg[0];
disp[1]=data_7seg[0];
disp[2]=data_7seg[0];
disp[3]=data_7seg[0];
}
void main() /* 主程式 */
{
test_7seg();
TR0=1; /* 啟動計時器0 */
delay_1ms(2000);
TR1=1; /* 啟動計時器1 */
up_flag=1;
ccw_flag=1;
while(1) /* 等待計時器中斷 */
{
if(sw2==0){up_flag=~up_flag;down_flag=~down_flag; delay_1ms(50);while(sw2!=1);delay_1ms(50);}
if(sw3==0){ccw_flag=~ccw_flag; delay_1ms(50);while(sw3!=1);delay_1ms(50);}
}
} /* main */
沒有留言:
張貼留言