|
用的是stc8g1k08a,用官方给的io口配置工具,想把P3.7 P3.6 P3.5 P3.4设置为推挽输出,把P3.3 P3.2 P3.1 P3.0设置为准双向口,但是设置了之后只能全部为推挽输出或者全部为准双向口,这是为什么啊
#include "stc8g.h"
sbit KeyA = P3^3; //按键A连接引脚12
sbit KeyB = P3^2; //按键B连接引脚11
sbit button1 = P3^6; //相位开关F连接引脚15
sbit button2 = P3^7; //相位开关E连接引脚16
sbit BI = P1^1; //电机后退输入D连接引脚2
sbit FI = P1^0; //电机前进输入C连接引脚1
sbit FAN = P5^4; //风扇G连接引脚引脚5
sbit lock = P3^5; //锁扣I连接引脚14
sbit S1 = P3^4; //锁扣开关S1连接引脚13
bit openFlag = 1;
#define MAIN_Fosc 22118400L //定义主时钟
void delay_ms(unsigned char ms) //延时函数
{
unsigned int i;
do{
i = MAIN_Fosc / 10000;
while(--i);
}while(--ms);
}
void main()
{
P1M0 = 0x03; P1M1 = 0x00;
P3M0 = 0xf0; P3M1 = 0x00;
P5M0 = 0x10; P5M1 = 0x00; //设置推挽输出
if(openFlag==1)
{
openFlag = 0;
BI = 0;
FI = 0;
FAN = 0;
lock = 0;
KeyA = 0;
KeyB = 0;
KeyAFlag = 1;
KeyBFlag = 1;
}
while(1)
{
if(KeyA==1) //按键A按下,标志位置1
{
delay_ms(10);
if(KeyA==1)
{
lock = 1;
FI = 1;
BI = 0;
}
}
if(KeyB==1) //按键B按下,标志位置1
{
delay_ms(10);
if(KeyB==1)
{
FAN = 0;
FI = 0;
BI = 1;
}
}
if(button1==0) //相位开关1到位后,标志位置0
{
delay_ms(10);
if(button1==0)
{
FI = 0;
BI = 0;
FAN = 1;
}
}
if(button2==0) //相位开关2到位后,标志位置0
{
delay_ms(10);
if(button2==0)
{
FI = 0;
BI = 0;
FAN = 0;
}
}
if(S1==0)
{
delay_ms(10);
if(S1==0)
{
lock = 1;
}
}
}
}
}
}
|
|