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

M16单片机l红外线解码程序+led数码管显示

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

我自己用icc+M16写的一个led显示+红外线解码程序


一个特别功能 也是他们常用的功能 按键处理程序 按一下只变一个数 

按住1s左右(自己设置)快速变化  进一步的功能正开发中 

下一步 就是3771+39610 步进电机驱动程序 希望大家多多支持哦!

哦对了 里面的图片是用flash8做的         原理图是用protues6.9 画的 仿真上有点问题 实际电路中 是正常的


单片机源码:

/*

01-05 22:30       2007-1-6 23:04

infrared

//ICC-AVR application builder : 2006-12-16 0:17:05         2006-12-18 20:04       IR_CDOE

// Target : M16

// Crystal: 16.000Mhz //注册大小写识别        开始必须为字母 红外线

*/

#include

#include

#include "led.h"

#include "IR_DATA.H"

#define IR       6

//#include "delay.h"

//用户码

#define          CUSTOMCODE          9

//按键码

#define          POWER_ON            221

#define          STAND_BY            220

#define          DMX                 216

#define          AUTO                212

#define          AUDIO               208

#define        FADETIME_UP           217

#define        FADETIME_DOWN         209

#define        PATTERN_UP            218

#define        PATTERN_DOWN          210


//                值            0         1                                                 10        11       12        13        14        15

//                         0         1         2         3         4          5        6         7         8        9          d          f            

char LED_DATA[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0Xa1,0X0e,0x00,0xff,0xef,0x3f}; //11 FOR "d"

char iPos,iPreBit,iNowBit,iHight,iLow,iIrMode,iBitCount,bIrCmdOk,bCmdOk,iCmd,iIrData[6];

char JS_001=0,JS_002=0;

long       JS_003=0;

char JS_004=0;

char JS_005=0;

char JS_006=0;

char JS_007=0;

char JS_008=0;

long       TIMER1_ICP_T,TIMER1_ICP_T1,TIMER1_ICP_T2;

char       LED_DISPLAY_V1=10;              // 初始值       显示 为 d001

char       LED_DISPLAY_V2=0;

char       LED_DISPLAY_V3=0;

char       LED_DISPLAY_V4=1;

char       LED_DISPLAY_V5=14;

long        JS_PRESS_ON_UP=0;

long        JS_PRESS_ON_DOWN=0;

char        JS_TIMER1_ICP_INPUT=0;

char        OUT_22_LOW;

char       JS_PRESS_ON_UP_1=0;

char       JS_PRESS_ON_UP_10000=0;

char       JS_PRESS_DWON_ON_1=0;

char       JS_PRESS_ON_DOWN_10000=0;

int         JS_PRESS_ON_UP_FAST=0;

int         JS_PRESS_OFF_UP=0;

char       JS_MODE_MODE=0;

char       JS_MENU_MODE=0;

char       JS_UP_MODE=0;

char       JS_DOWN_MODE=0;

int         JS_PRESS_OFF_DOWN;

int         JS_PRESS_ON_DOWN_FAST;

char       JS_PRESS_DOWN_ON_1;

char       ICP_TIME=0,ICP_TIME_T1=0;

char START_ICP_JS_TLOW=0;

char ICP_INT_SN=0;               //ICP 产生中断标志位

char KEY_BANK=0;

char KEY_PAN_MODE_1=0;

char KEY_PAN_MODE_2=0;

char KEY_PAN_MODE_3=0;

char KEY_PAN_3=0;

char KEY_PAN_4=0;

char KEY_PAN_5=0;

char KEY_PAN_6=0;

char KEY_PAN_7=0;

char KEY_PAN_8=0;

char PAN_ICP_INPUT_CHECK=0,JS_ICP_INT=0;

char N_001=1,SUM=0;

char IR_CUSTOM_CODE=0;IR_DATA_CODE=0;

// 共阳极用 

void port_init(void)

{

PORTA = 0xFF;

DDRA       = 0xFF;

PORTB = 0x1F;

DDRB       = 0x1F;

PORTC = 0x1F; //m103 output only

DDRC       = 0x10;

PORTD = 0x00;

DDRD       = 0x00;

}

//Watchdog initialize

// prescale: 16K 

//void watchdog_init(void)

//{

//WDR(); //this prevents a timout on enabling

//WDTCR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs

//}       

//Watchdog initialize

// prescale: 2048K

void watchdog_init(void)

{

WDR(); //this prevents a timout on enabling

WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs

}

#pragma interrupt_handler eeprom_ready_isr:16

void eeprom_ready_isr(void)

{

//eeprom ready event

}

/////////////////////////TIMER0/////////////////////////////////////////////////////////////

//TIMER0 initialize - prescale:8

// WGM: Normal

// desired value: 100uSec

// actual value: 100.000uSec (0.0%)

void timer0_init(void)

{

TCCR0 = 0x00; //stop

TCNT0 = 0xCE; //set count

OCR0       = 0x32;       //set compare

TCCR0 = 0x02; //start timer

}

#pragma interrupt_handler timer0_ovf_isr:10

void timer0_ovf_isr(void)

{

       TCNT0 = 0xCE; //reload counter value       100us

       LED_SCAN(); 

       KEY_CHK(); 

       CheckIR();  

        JS_003=++JS_003;                     //KEY_CHECK 

        TEST();

        //display_times();              //TEST USE

  

  

   

}

/////////////////test/////////////////////////////////////

void       TEST()

{

       //LED_DISPLAY_V4=8;               //TEST

       if (JS_003==10000)

                {

                LED_DISPLAY_V5=14;

             

                }  

         else if (JS_003==20000)  

              {

              JS_003=0;  

              LED_DISPLAY_V5=13;

              } 

}

/////////////////////////timer2///////////////////////////////////////////////////////////////////

//TIMER2 initialize - prescale:32

// WGM: Normal

// desired value: 10uSec

// actual value: 10.000uSec (0.0%)

void timer2_init(void)

{

TCCR2 = 0x00; //stop

ASSR       = 0x00; //set async mode

TCNT2 = 0xFB; //setup

OCR2       = 0x05;

TCCR2 = 0x03; //start

}

#pragma interrupt_handler timer2_ovf_isr:5

void timer2_ovf_isr(void)        //10us

{

TCNT2 = 0xFB; //reload counter value

//ICP_INT_JS();

//ICP_INT_CLR_JS();


}

/////////////////////////KEY_CHK/////////////////////////////////////////////////////////////

void KEY_CHK()

{

    

KEY_CHK_MODE();                       // 调用        KEY_CHK_MODE

KEY_CHK_MENU();                       // 调用        KEY_CHK_MENU

KEY_CHK_UP();                         // 调用        KEY_CHK_UP

KEY_CHK_DOWN();                       // 调用        KEY_CHK_DOWN  

}

//////////////////////////MODE///////////////////////////////////////////////////////////

void KEY_CHK_MODE()                        //100us /times

{

         KEY_BANK=KEY_INPUT;                    // 取PINC值

         KEY_BANK&=0X01;                        // 取mode 值 

if (KEY_BANK==0)          //有按下 执行   

        {           //TEST--------OK------------->>>>  

            KEY_BANK=1;               

            JS_004=++JS_004;

            if (JS_004==1)

                             {

              //LED_DISPLAY_V1=11;

             LED_DISPLAY_V2=0;

             LED_DISPLAY_V3=0;

             LED_DISPLAY_V4=1;        

                             }

else if (JS_00


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

热门文章 更多
stm32 总线矩阵介绍