×
单片机 > 单片机程序设计 > 详情

PIC单片机按键控制PWM输出LED灯亮度C语言程序

发布时间:2020-06-03 发布时间:
|

#include     //调用头文件,可以去PICC软件下去查找PIC16F87XA单片机的头文件

__CONFIG(0x3b31);  //定义配置字,晶振类型:XT,启动开门狗,禁止低电压编程

//************************************************************************

#define HC138_A RE2 //定义U6、U7、U8的A为RE2端口

#define HC138_B RE1 //定义U6、U7、U8的B为RE1端口

#define HC138_C RE0 //定义U6、U7、U8的C为RE0端口

//************************************************************************

#define U6_E RA2    //定义U6_E为RA2端口,U6E=1时,U6使能否则失能

#define U7_E RA3    //定义U7_E为RA3端口,U7E=1时,U7使能否则失能

#define U8_E RA1    //定义U8_E为RA1端口,U8E=1时,U8使能否则失能

#define LED PORTB   //定义RB 8 point为LED端口

//*********************************************************************

#define uchar unsigned char 

#define uint unsigned int

void init(void);    //系统初始化

void delay (uint x);

void didi(uchar z);

//***********************************************************************

void main(void)

{   

    init();         //调用系统初始化函数         

    asm("CLRWDT");      //看门狗喂狗指令

    LED=0x00; 

    while(1)

    {

        if(RC0==0)

        {

            delay (10);

            if(RC0==0)

            {

                didi(1);

                while(!RC0)

                {

                    LED=0x0f;

                }

            }

        }

        if(RC1==0)

        {

            delay (10);         

            if(RC1==0)

            {

                didi(1);

                while(!RC1)

                {

                    LED=0xff;

                }   

            }

        }

    }

}

//***************************************************************************

void init(void)//系统初始化

{

    ADCON1=0X06;    //所有IO均为数字口,模拟量输入禁止

    OPTION=0x80;    //关闭RB口电平变化功能

    TRISA=0xd1;     //RA1,RA2,RA3,RA5置为输出,其他未用设置为输入

    TRISB=0x00;     //RB4-RB7置为输出,其他RB0-RB3设置为输入

    TRISC=0xff;     //未用设置为输入

    TRISD=0xf3;     //未用设置为输入

    TRISE=0x00;     //RE0,RE1,RE2置为输出

    LED=0x00;        //RB口全部置低电平

    RD2=0;          //关闭蜂鸣器

    RD3=0;          //关闭继电器

    RA1=0;          //关掉数码管、发光二极管

    RA2=0;          //关掉LED点阵屏左8列

    RA3=0;          //关掉LED点阵屏右8列

    RBIE=1;         //RB口电平变化中断open

    HC138_A=0;      //使74HC138的Y0端为0,其他高阻

    HC138_B=0;      //使74HC138的Y0端为0,其他高阻

    HC138_C=0;      //使74HC138的Y0端为0,其他高阻

    U6_E=0;         //U6关闭

    U7_E=0;         //U7关闭

    U8_E=1;         //U8打开      

    asm("CLRWDT");  

}


//*********************************************************************************************

void didi(uchar z)

{

    uchar a;

    for(a=z;a>0;a--)

    {

        RD2=1;

        delay(800);

        RD2=0;

        delay(500);

    }

}

//**********************************************************************************************

void delay (uint x)

{

    uint a,b;

    for(a=x;a>0;a--);

    {

        for(b=110;b>0;b--);

    }

}

//********************************************************




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何为单片机选择合适的负载电容