微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于一个按键控制LED灯亮暗的问题.谢谢!

关于一个按键控制LED灯亮暗的问题.谢谢!

时间:10-02 整理:3721RD 点击:
我想实现一个按键按下后LED灯亮起,再按一下LED灯熄灭,可是程序烧写后,按一下按键亮了一会儿马上又熄灭了,每次按下只亮一会儿,可以帮我看下程序吗?同样的程序在51中是可以实现的,到PIC16F1933里面就不行了(电灯程序部分)
#include <pic.h>
#include <pic16f1933.h>
#define uint unsigned int
#define uchar unsigned char
uint i,j;
uchar SS;
/***********************************延时函数*********************/
void delay(uint z)
{
uint x,y;
for(x = z;x>0;x--)
for(y = 100;y>0;y--) ;
}
/***********************************延时函数*********************/
void main()
{
OSCCON = 0XFB;
TRISA = 0X00;
TRISC = 0XFF;
PORTA = 0XFF;
SS=0XFF;
while(1)
{
if(RC7 == 0)
{
delay(21);
SS = ~SS;
while(!RC7);
delay(21);
}
PORTA = SS;
}
}  

我用过PIC16F1936的芯片,跟你用的PIC16F1933差不多,只不过就是内部RAM大小不一样,我有点搞不明白,你为啥要定义uchar SS,
常量用#define SS 0XFF就好了啊(其实没有必要),PORTA端口作为输出端口对吧,要么为0XFF,要么为0X00,你要设置PORTA为数字量,上电默认为模拟量,
应该是这样子
TRISA = 0X00;
ANSELA = 0XFF;  //将PORTA 设为数字量
LATA = 0;            //将PORTA 清0
while(1)
{
    if(RC7 == 0)
   {
       delay(10);
       if(RC7 == 0)
       {
          while(!RC7);      //按键松开执行LED反转
           LATA = ~LATA;
       }
   }
}

这样你再试试看 看看有没有效果。

#include <pic.h>
#include <pic16f1933.h>
#define uint unsigned int
#define uchar unsigned char
#define LED PORTAbits.RA4
#define KEY PORTCbits.RC7
__CONFIG(0x0FA4);
//  __CONFIG(0x3AFF);
uint i,j;
uchar SS;
/***********************************延时函数*********************/
void delay(uint z)
{
uint x,y;
for(x = z;x>0;x--)
        for(y = 100;y>0;y--) ;
}
/***********************************延时函数*********************/
void main()
{
OSCCON = 0XFB;
TRISA = 0X00;
TRISC = 0xFF;
//ANSELA = 0X00;  //将PORTA 设为数字量
PORTA = 0XFF;            //将PORTA 清0
SS = 0;
while(1)
{
    if(KEY == 0)
   {
       delay(21);
       if(KEY == 0)
       {
                KEY == 1;
          while(!KEY);      //按键松开执行LED反转
                   SS++;
                                if(SS == 4)
                                                {
                                                        SS = 0;
                                                  }
       }
   }
switch (SS)
        {
        case 1:PORTA=0XFE;break;
        case 2:PORTA=0XDF;break;
        case 3:PORTA=0XEF;break;
        case 0:PORTA=0XFF;break;
        }
}
}

这个问题是由于没有配置字引起的,不过非常感谢您的回答!学到挺多东西。

路过,学习了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top