|
proteus仿真里把P3.2設為信號輸入判斷高低電平計數,P3.3為計數啟動鍵這里我想把這兩個鍵對調一下,變為:P3.2啟動鍵,P3.3信號輸入鍵,程序里是外部定義全局變量,把P口改了,但是仿真里好像識別不到P3.3的信號?我的啟動鍵一上一下反而計數值增加了,這是為什么?
程序如下:
sbit k1=P3^2; //sbit在外部定義全局變量 k1啟動鍵
sbit P33=P3^3;
//變量
uint now=0; //計數值
uint set=10;
uint bzbu=0;//設置
uint bz=0;//模式
uint qidong=0;//運行
//顯示控制
void dis()
{
//now
lcd1602_adr(0x0B);
lcd1602_writenumber(0x30+now%10000/1000);
lcd1602_writenumber(0x30+now%1000/100);
lcd1602_writenumber(0x30+now%100/10);
lcd1602_writenumber(0x30+now%10);
//set
lcd1602_adr(0x4B);
lcd1602_writenumber(0x30+set%10000/1000);
lcd1602_writenumber(0x30+set%1000/100);
lcd1602_writenumber(0x30+set%100/10);
lcd1602_writenumber(0x30+set%10);
if(bz==0)lcd1602_writenumber(' ');
if(bz==1)lcd1602_writenumber('<'); //bz為1寫入,為0???沒看懂
//啟動
if(bz==0)
{
if(k1==0)
{qidong=(qidong+1)%2;
if(qidong==1)
{;} //
else {;}
while(k1==0);}
}
//啟動 K1為0 啟動 %取余數
if(qidong==1)
{
if(now>=set){qidong=0;_delay_ms(500); } //蜂鳴器叫,燈關
}
//啟動
}
//按鍵功能函數
void key()
{
//掃描
key_z();
if(keyn1<16)
{
if((keyn1<10)&&(bz==1))
{
if(bzbu==0){set=keyn1;}
if(bzbu==1){set=set*10+keyn1;}
if(bzbu==2){set=set*10+keyn1;}
if(bzbu==3){set=set*10+keyn1;}
bzbu=(bzbu+1)%4;
}
if((keyn1==0x0a)&&(bz==0)){now=0;}//復位
if((keyn1==0x0b)&&(bz==1)){set=0;}//復位輸入
if((keyn1==0x0c)&&(qidong==0)){bz=1;}//設置
if(keyn1==0x0d){bz=0;}//退出
keyn1=16;
}
}
void DelayMS(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void SETP_MOTOR_FFW(uchar n)
{
uchar i,j;
for(i=0;i<5*n;i++)
{
for(j=0;j<8;j++)
{
P1 = FFW[j];
DelayMS(25);
dis(); //顯示
key();
}
}
}
void SETP_MOTOR_REV(uchar n)
{
uchar i,j;
for(i=0;i<5*n;i++)
{
for(j=0;j<8;j++)
{
P1 = REV[j];
DelayMS(25);
dis(); //顯示
key();
}
}
}
//-----------------------
void main()
{
uchar N = 3;
_delay_us(10);
_delay_ms(10);
//中斷允許
IT0=1;
EX0=1;
EA=1;
//初始化
lcd1602_init();
LCD1602_string(1,1,zifu0);
LCD1602_string(1,1,zifu0);
LCD1602_string(2,1,zifu1);
while(1)
{
if(K1 == 0)
{
dis(); //顯示
key();
SETP_MOTOR_FFW(N);
}
else if(K2 == 0)
{
dis(); //顯示
key();
SETP_MOTOR_REV(N);
}
else
{
dis(); //顯示
key();
}
}
}
//INT0中斷函數
void EX_INT0() interrupt 0
{
if(qidong==1)
{
_delay_ms(3);if(P33==0)now=now+1;
}
}
|
|