最近有个小玩意要用到PIC12F508,
电路是这样的,POWER键接在GP5脚,另一个模式切换键接在GP4脚,GP0,GP1接两个电机
为什么POWER键可以进入休眠,但是醒不过来呢?
下面是我的程序,请大侠帮忙看看。
#include <pic.h>//头文件
#define uchar unsigned char
#define uint unsigned int
__CONFIG(OSC_IntRC&WDT_OFF);//内部RC,看门狗禁止
#define _XTAL_FREQ 4000000
#define m1 GP4//电机m1
#define m2 GP5//电机m2
#define key_power 0x20 //power键值
#define key_mode 0x10 //mode键值
uchar motor_mode = 1; //模式
uchar key_trg; //按键触发
uchar key_count; //长按
void get_key(void)
{
uchar temp_data;
temp_data = (GPIO & 0x30) ^ 0xff;//取得按键状态
key_trg = temp_data & (temp_data^key_count);//保存触发状态
key_count = temp_data;
}
void key_proc(void)
{
if (key_trg & key_power)//按电源键
{
GPIO = GPIO;//读取IO
SLEEP(); //进入休眠模式
}
if (motor_mode)//按模式键
{
if (key_trg & key_mode) //模式切换
{
motor_mode++;
if (motor_mode > 3)
{
motor_mode = 1;
}
}
}
}
void motor_proc()
{
if (motor_mode == 0){m1 = 0;m2 = 0;}
if (motor_mode == 1){m1 = 1;m2 = 1;}
if (motor_mode == 2){m1 = 0;m2 = 1;}
if (motor_mode == 3){m1 = 1;m2 = 0;}
}
/****************************************主程序*/
void main()
{
#asm
movlw 0FCh;
tris 6;//设置端口GP0,GP1输出,其他输入
#endasm
while(1)
{
get_key();
key_proc();
motor_proc();
__delay_ms(10);
}
} |