打印

pic12f508按键控制led

[复制链接]
3450|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lycstronger|  楼主 | 2011-11-5 14:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
功能:按一下按键 led闪  在按一下led灭 循环下去  ,为什么我的程序按两下就不行了 就像单片机死机了一下 求解  急!!!
#include<pic.h>
__CONFIG(0x00a);
typedef unsigned int uint;
bit flag_led=0;
//I/O口初始化
void Init()
{
        TRIS=0;        //设置所以IO口为输出
        OPTION=0;//设置所有I/O走做普通I/O口
}
void delay_ms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}
void keyscan()
{       
        if(GP5==0)
        {
                delay_ms(10);
                if(GP5==0)
                {                       
                        while(!GP5);
                        flag_led=~flag_led;       
                }
        }
}
void main()
{
        Init();
        while(1)
        {
                keyscan();
                if(flag_led==1)
                {
                        GP4=~GP4;
                        delay_ms(300);
                }
                else
                        GP4=0;
        }
}

相关帖子

沙发
chen3bing| | 2011-11-5 16:00 | 只看该作者
TRIS=0;        //设置所以IO口为输出
GPIO5应该设置为输入。

使用特权

评论回复
板凳
hotpower| | 2011-11-5 16:37 | 只看该作者
俺10年前用过,汇编写的

使用特权

评论回复
地板
SeaSun| | 2011-11-6 12:07 | 只看该作者
delay300ms,造成描按键失效,假死

使用特权

评论回复
5
lycstronger|  楼主 | 2011-11-7 07:57 | 只看该作者
问题解决了,2楼说的对,应该按键应该设置为输入,但是我就是没有理解,普通io怎么不行能,51里也很好用的啊?

使用特权

评论回复
6
lycstronger|  楼主 | 2011-11-7 08:00 | 只看该作者
4楼的所说的假死情况我也改了  毕竟那样写不好  不过就是不会用定时器 要不就好了  没有学过pic 因为要用到12f508看了一下 稀里糊涂的把别人的程序改了改

使用特权

评论回复
7
lycstronger|  楼主 | 2011-11-7 08:01 | 只看该作者
不过说实话不知道是我没有接触pic还是本身pic的资源比较少,我发现资源真的很少

使用特权

评论回复
8
lycstronger|  楼主 | 2011-11-7 08:47 | 只看该作者
程序已经改成如下 请各位前辈多多指点 学生刚毕业
功能:GP5按下 一个led亮再按灭  GP1按下 另一个led闪 GP1再按一下 led停在闪
#include<pic.h>
__CONFIG(0x00a);
typedef unsigned int uint;
typedef unsigned char uchar;
bit flag_led=0;

void keyscan();
//I/O口初始化
void Init()
{       
        OPTION=0;//设置所有I/O走做普通I/O口
        TRIS=0x22;        //设置所以IO口为输出
}
void delay_ms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=100;j>0;j--);
}
void keyscan()
{       
        if(GP5==0)
        {
                delay_ms(10);
                if(GP5==0)
                {                       
                        while(!GP5);
                        flag_led=~flag_led;       
                }
        }
        if(GP1==0)
        {
                delay_ms(10);
                if(GP1==0)
                {
                       
                        while(!GP1);
                        GP2=~GP2;                       
                }
        }
}
void main()
{
        uchar i;
        Init();
        GP2=0;
        while(1)
        {
                GP5=1;
                GP1=1;
                keyscan();               
                if(flag_led==1)
                {
                        GP4=~GP4;
                        for(i=0;i<80;i++)
                        {
                                keyscan();
                                delay_ms(5);
                        }
                }
                else
                        GP4=0;
        }
}

使用特权

评论回复
9
Startthejourn| | 2013-7-9 21:17 | 只看该作者
你好  您PIC12F675是用什么编译器呢:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

25

帖子

0

粉丝