关于一个按键控制LED灯亮暗的问题.谢谢!
#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;
}
}
}
这个问题是由于没有配置字引起的,不过非常感谢您的回答!学到挺多东西。
路过,学习了。