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

2019-11-07来源: 51hei关键字:M16单片机l  红外线解码  led数码管显示

我自己用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

[1] [2]
关键字:M16单片机l  红外线解码  led数码管显示 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479246.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:M8单片机串口通讯监听(使用PROTEUS串口仿真GSM模块AT指令通讯)
下一篇:AVR单片机的TWI中断模式

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

基于attiny13的NEC红外线遥控信号解码程序
最近参考了网上的51红外线遥控遥控信号解码程序,编写了基于attiny13的NEC红外线遥控信号解码程序,拿出来给大家共勉,欢迎大家批评指正。程序如下:#include <avr/io.h>#include <avr/interrupt.h>#define uchar unsigned char#define star()  TCCR0B=(1<<CS01)|(1<<CS00)    //启动定时器,64分频,定时器时钟周期在53.3us~58.2us之间,中位数55.75us#define stop()  TCCR0B=0 
发表于 2019-10-30
红外线遥控器软件解码程序(能解大部分遥控器的编码)
红外线一开始发送一段13.5ms的引导码,引导码由9ms的高电平和4.5ms的低电平组成,跟着引导码是系统码,系统反码,按键码,按键反码,如果按着键不放,则遥控器则发送一段重复码,重复码由9ms的高电平,2.25ms的低电平,跟着是一个短脉冲,本程序是免费给大家,版权所有,不得用于商业目的,如需用到本程序到商业上请与本人联系经本人同意后方可用于商业目的,本程序经过试用,能解大部分遥控器的编码!#include    "at89x52.h"#define     NULL    
发表于 2018-01-16
红外线遥控器软件解码原理和程序(C语言)
红外线一开始发送一段13.5ms的引导码,引导码由9ms的高电平和4.5ms的低电平组成,跟着引导码是系统码,系统反码,按键码,按键反码,如果按着键不放,则遥控器则发送一段重复码,重复码由9ms的高电平,2.25ms的低电平,跟着是一个短脉冲,本程序来自网络,版权归源作者所有,仅做学习交流之用!不得用于商业目的,本程序经过试用,能解大部分遥控器的编码! #include    "at89x52.h" #define     NULL       
发表于 2016-09-30
一个红外线发射+解码程序+仿真文件
400us // IR_NEC(); //红外线解码(解NEC编码) // //***************************************************************/ #ifndef __IR_NEC_H__ #define __IR_NEC_H__ //【用户必填项:USER_H、USER_L、Check_EN、CPU_Fosc、IR】 #define USER_H 0x80 //用户码高8位 #define USER_L 0x7F
发表于 2015-07-15
一个红外线发射+解码程序+仿真文件
基于51红外线遥控解码人流量统计系统设计基底
#include<reg52.h> #define uchar unsigned char #define uint unsigned int unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; unsigned char code smg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78}; uchar irtime; uchar startflag; uchar irdata[33];
发表于 2015-07-08
STM8控制4位LED数码管显示数字
[1],LEDArray[1],LEDArray[1],LEDArray[0x0c]);  //显示111C}                                                LED数码管原理(1)产品封装图(2)电路原理图
发表于 2019-09-21
STM8控制4位LED数码管显示数字
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved