是这样的,我想用按键控制灯,按一下,LED亮,按一下灭,PORTC_0脚接按键,PORTD_0接LED.程序如下:
LED#include <pic.h>
#include <pic1687x.h>
#include"delay.h"
void main(void)
{
unsigned char ID=0;
TRISD&=~0X01;//所有D0端口输出
PORTD&=~0X01;//所有D0端口输出低电平
TRISC=0X00;//
PORTC|=0X01;//所有C0端口输出高电平
while(1){
if(RC0==0)
{
delay_nms(10);
if(RC0==0)
{
ID++;
}
}
switch(ID)
{
case 1: PORTD=0x01;
break;
case 2: PORTD=0X00;
ID=0;
break;
default:
break;
}
}
}
按道理是要先把PORTC_0这个脚方向置为输入 TRISC=0X01;但结果是按键控制不了,灯一闪一闪的,把它改成TRISC=0X00,就可以了,不知怎么回事,望熟手指点下,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
总的来说是你扫键程序不对
你令TRISC=0x00那是输出啊
想让小灯亮灭受按键控制,也就是按键导致输出状态翻转,这样倒是没有必要用switch(ID)函数,按键检测最好能检测松开作为有效,按下-松开,然后翻转PORTD0就行啦。下面的代码可能性,我没验证,我用的不是HiTec的编译器,代码有所差异
trisc0 = 1;
trisd0 = 0;
if(portc0 == 0)
{
delay_ms(10); //去抖动
if(portc0 == 0) //确定有按键按下
{
while(portc == 0){} //等待按键松开
portd0 = !portd0;
}
}
一周热门 更多>