#include <at89x52.h>
unsigned char ptn_table[]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0Xf8,0X80,0X90};
unsigned char time_500ms=10;
char disp_no;
unsigned char bdata flag;
sbit up_flag=flag^0;
sbit down_flag=flag^1;
sbit stop_flag=flag^2;
void display(unsigned char num)
{
P0=num;
}
void delay_1ms(unsigned int k)
{
unsigned int i,j;
for (i=0;i<=k;i++)
for (j=0;j<=110;j++);
}
void keyup(){
delay_1ms(300);
!=:不等於為關係運算式
while((P2|0xf0)!=0xff);
delay_1ms(300);
}
void timer_set()
{
TMOD=0X01; //T0 MODE 1
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;
IE=0x82;
TR0=1;
}
void T0_INT(void) interrupt 1
{
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;
time_500ms--;
if(time_500ms==0)
{
time_500ms=10;
選擇性敘述:很多個條件(些例為3個條件停止、上數、下數),選擇一個的需求條件來做
if(條件式1)動作1;條件式不成立就往下判斷
else if(條件式2)成立就動作2,做完就跳出來;
else if(否則條件式3成立)就動作3就跳出來;
else 動作4(若上面的動作都不成立就做動作4,如果你的條件沒有以上皆非就不需要此else);
if(stop_flag)
{
}
else if(up_flag)
{
disp_no++;
if(disp_no>9)
{
disp_no=0;
}
display(ptn_table[disp_no]);
delay_1ms(500);
}
else if(down_flag)
{
disp_no--;
if(disp_no<0)
{
disp_no=9;
}
display(ptn_table[disp_no]);
delay_1ms(500);
}
}
}
main進入主程式
void main()
{
timer_set();
P0=0xff;
while(1){
P2=0x7f;
最常用選擇性敘述:條件式成立 執行兩個statement (超過兩個statement要大括號)
==:為關係運算式\
if(P2_3==0){flag=0;P0=0xc0;disp_no=0;keyup();}//0
if(P2_2==0){flag=0;P0=0xf9;disp_no=1;keyup();}//1
if(P2_1==0){flag=0;P0=0xa4;disp_no=2;keyup();}//2
if(P2_0==0){flag=0;P0=0xb0;disp_no=3;keyup();}//3
P2=0xbf;
if(P2_3==0){flag=0;P0=0x99;disp_no=4;keyup();}//4
if(P2_2==0){flag=0;P0=0x92;disp_no=5;keyup();}//5
if(P2_1==0){flag=0;P0=0x82;disp_no=6;keyup();}//6
if(P2_0==0){flag=0;P0=0xf8;disp_no=7;keyup();}//7
P2=0xdf;
if(P2_3==0){flag=0;P0=0x80;disp_no=8;keyup();}//8
if(P2_2==0){flag=0;P0=0x90;disp_no=9;keyup();}//9
if(P2_1==0){flag=0;up_flag=1;keyup();}//a
if(P2_0==0){flag=0;down_flag=1;keyup();}//b
P2=0xef;
if(P2_3==0){keyup();stop_flag=0;}//c
if(P2_2==0){keyup();stop_flag=1;}//d
}
}
沒有留言:
張貼留言