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;
}
}
|