当前位置:网站首页>Nine Qi single chip microcomputer ny8b062d single key control four LED States

Nine Qi single chip microcomputer ny8b062d single key control four LED States

2022-07-04 23:51:00 51CTO

/* =========================================================================
 * Project:       Single key control 4 Kind of LED state
 * File:           Single key control 4 Kind of LED state
 * Description:   Single key control 4 Kind of LED state
 *                                               
 *                
 * Author:        Jimp
 * Version:       V1.0                              
 * Date:          2020/05/22
 =========================================================================*/
//--------------- File Include ---------------------------------------------
//--------------------------------------------------------------------------
#include <ny8.h>
#include <stdint.h>
#include "ny8_constant.h"
#define UPDATE_REG(x)    __asm__("MOVR _" #x ",F")
#define unchar unsigned char
#define unint unsigned int 

uint8_t myvar;
__sbit flag = myvar:0;        // Define the control operator
__sbit key = PORTB:0;
__sbit light1 = PORTA:7;
__sbit light2 = PORTA:6;
unchar Mod;        // Define the lighting mode

void isr(void) __interrupt(0)
{
    if(INTFbits.T0IF)
    { 
        static unsigned int cnt= 0;
        TMR0 = 0;
        INTF= (unsigned char)~(C_INT_TMR0);    // Clear T0IF flag bit    
        cnt ++;
        if(cnt >= 250)
            {
                cnt = 0;
                light1 = ~light1;
                light2 = ~light2;
            }
    }    
}

void lnit_Mod()        // Initialization function
{
    IOSTA = ~IOSTA;                                     // Set up A The mouth is the output
    PORTA = 0xFF;
    IOSTB = C_PB0_Input;
    flag = 1;
    key = 1; 
    Mod = 0;
    light1 = 0;
    light2 = 0;           
}

void lnit_Timer()    // Interrupt initialization
{
     DISI();        // Disable interrupt
     PCON1 = C_TMR0_Dis;
     TMR0 = 0;
     T0MD = C_PS0_TMR0 | C_PS0_Div8;        // Pre frequency division is allocated to TMR0
     INTE = C_INT_TMR0;
     ENI();        // Enable interrupt                     
}

void delay(unint z)        // The time delay function ms
{
    unint x,y;
    for(x = z;x > 0;x--)
        for(y = 100;y > 0;y--);
}

void lnput_Mod()        // State mode marker function
{
    if(Mod == 4)
        Mod = 0;
    if(key == 0)
    {
        delay(5);
        if(key == 0)    // Delay chattering
            Mod++;        // The number of keystrokes is marked
    }
    while(!key)            // Let go of the test
    {;;}
}

void run()            //4 Execution in three modes
{
    switch(Mod)
    {
        case 0:{PCON1 = C_TMR0_Dis;light1 = 0;light2 = 0;}break;        // All bright
        case 1:{PCON1 = C_TMR0_En;}break;        // Synchronous flashing
        case 2:{PCON1 = C_TMR0_Dis;light1 = 1;light2 = 1;}break;        // Total destruction
        case 3:{PCON1 = C_TMR0_Dis;light1 = 0;light2 = 1;PCON1 = C_TMR0_En;}break;        // Asynchronous flash
    }
}

void main(void)
{
    lnit_Mod();
    lnit_Timer();
    while(1)
    {
        lnput_Mod();
        if(flag == 1)         // control RUN function
        {
            run();
            if(Mod == 1||Mod == 3)
            flag = 0;
        }
        if(Mod == 0||Mod == 2)
        flag = 1;
    }
            
}


原网站

版权声明
本文为[51CTO]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/185/202207041833148375.html