历史上的今天
返回首页

历史上的今天

今天是:2024年11月07日(星期四)

正在发生

2019年11月07日 | M16单片机l红外线解码程序+led数码管显示

2019-11-07 来源:51hei

我自己用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_004==2)

                              {

                                       JS_004&=0;

                                //LED_DISPLAY_V1=10;

推荐阅读

史海拾趣

台湾义隆电子(ELAN)公司的发展小趣事

在产品多元化的基础上,义隆电子开始积极拓展国际市场。公司以台湾新竹科学园区为营运总部,在亚洲、美洲等多个国家和地区设立了分支机构和设计中心。通过与全球合作伙伴的紧密合作,义隆电子的产品逐渐进入欧洲、亚洲和美洲等市场,实现了全球布局。

Genesys Logic公司的发展小趣事

进入21世纪,“General Microcircuits”开始实施全球化战略,先后在美国、欧洲、亚洲等地建立研发中心和生产基地。通过全球化布局,公司不仅能够更快地响应不同地区的市场需求,还能充分利用各地的资源优势和技术优势,进一步提升产品的竞争力和市场占有率。同时,公司还加强了与国际知名电子制造商的战略合作,共同推动半导体技术的创新与发展。

FLEX LTD公司的发展小趣事

进入21世纪,“General Microcircuits”开始实施全球化战略,先后在美国、欧洲、亚洲等地建立研发中心和生产基地。通过全球化布局,公司不仅能够更快地响应不同地区的市场需求,还能充分利用各地的资源优势和技术优势,进一步提升产品的竞争力和市场占有率。同时,公司还加强了与国际知名电子制造商的战略合作,共同推动半导体技术的创新与发展。

Bourns公司的发展小趣事

随着公司的不断发展,Bourns在1952年取得了世界上第一个可调式电阻的专利,即TrimpotR。这一技术突破标志着Bourns在电子元器件领域的领先地位,也为公司的产品线增添了核心竞争力。可调电阻的广泛应用推动了Bourns在电子行业的快速发展。

中移物联网(Chinamobile)公司的发展小趣事

中移物联网在智能终端产品的创新方面也取得了显著成果。公司设计并生产了物联网专用模组和芯片,打造了智能组网、智能安防、智能家居、智能穿戴等行业终端。这些产品在市场上受到了广泛欢迎,特别是在智能家居和智能穿戴领域,中移物联网的产品凭借其高性能和稳定性,赢得了众多消费者的青睐。

Hendon Semiconductors公司的发展小趣事

Hendon Semiconductors以其强大的定制化集成电路设计能力而闻名。公司拥有一支经验丰富的设计团队,能够为客户提供从概念到量产的一站式解决方案。这种定制化服务不仅满足了客户对特殊功能和高性能的需求,也帮助Hendon Semiconductors在竞争激烈的市场中脱颖而出。通过不断积累成功案例和技术经验,Hendon Semiconductors逐渐在定制化集成电路设计领域建立了良好的口碑。

问答坊 | AI 解惑

混合动力电动汽车中电力电子技术应用综述

摘要:文章综述了混合动力电动汽车的发展和基本结构,在此基础上,结合丰田汽车公司的最新一代混合动力电动汽车Prius THS Ⅱ,介绍了电力电子技术在混合动力电动汽车上的具体应用情况。最后,结合混合动力电动汽车的实际情况,提出了需要重点解决的 ...…

查看全部问答>

求助~什么是高压发生电路?

快要毕业了,发现毕业设计完全搞不懂(感觉更像物理专业的人做的-_-|:( )。网上又找不到资料,老师又没什么帮助,我现在着急的很。希望这方面的达人给我些帮助,或者有这方面的资料的给我发一下。非常感谢 题目:CRT彩显高压产生原理及应用--对设 ...…

查看全部问答>

LPC1114 关于GPS模块的资料!!

有做这方面的 交流!!!…

查看全部问答>

高薪招聘硬件工程师

外资公司,工作地点:成都—一座来了就不想离开的城市 硬件工程师(10名): 工作职责(Job Description) : 1、手持设备数模系统的设计、开发与调试; 2、无线通讯终端基带电路的设计、开发与调试; 3、电子消费产品的硬件系统分析、功能定 ...…

查看全部问答>

贡献一个读GPS信息的串口程序!

通过这几天的摸索,我终于成功写出一个读取GPS信息的串口程序! 它基于windowsMobile5.0 ppc 程序  在多普达p800中测试通过。 在这里共享给大家! 如果大家有新的思路和方法,咱们也可以一起讨论和研究! 我的妹儿yunfeng83@163. ...…

查看全部问答>

linux与windowsCE的选择

大家好:     最近公司做个项目,需要其它公司提供手持终端,但就选择什么系统的手持终端机产生了疑惑。有的公司用的是linux系统的,有的是windowsCE。当然,设计人员各执己见了,说不同的系统有各自的弊端和优点。     所以 ...…

查看全部问答>

关于SSDT HOOK后通过事件通知应用程序问题

关于SSDT HOOK后通过事件通知应用程序问题 HOOK SSDT应该没有问题通过DbgPrint在自己的函数中显示被HOOK的信息一切正常但是通过事件通知应用程序时却有时候会蓝屏 驱动: 在列程序IRP_MJ_WRITE中 通过 RtlCopyMemory(&hEventApp,Irp->Associa ...…

查看全部问答>

杭州奇比电子产品有限公司诚聘

杭州奇比电子产品有限公司诚聘以下岗位:岗位名称:LED产品销售 区域经理(急)岗位职责:1、负责LED灯具和显示屏产品销售;2、制定区域市场营销计划并完成指标;3、收集和分析市场信息,进行客户分析、发展、建立良好的客户关系和客户档案;4、建 ...…

查看全部问答>

51单片机控制摄像头,发回图片存入sd卡,可行吗?求指教啊!!!

用的是stc12c5a60s2 ,摄像头能传回16进制数据,但是我用的晶振现在是12M的,sd卡是扇区存储,会不会出现自定义的缓冲区还没全部写入sd卡,摄像头就将缓冲区数据覆盖的情况啊?求指教啊!!!!…

查看全部问答>

CRC校验的问题

我用NXP810的CRC16例程做实验,发现 LPC_CRC->WR_DATA_WORD = 0x3534;     if (LPC_CRC->SUM != 0xD7D6) {                           &n ...…

查看全部问答>