历史上的今天
今天是:2025年06月25日(星期三)
2018年06月25日 | 单片机——红外遥控器——代码
2018-06-25 来源:eefocus
#include
#include
#include "./delay/delay.h"
#include "./lcd1602/lcd1602.h"
unsigned int irtime = 0;
bit startflag = 0;
unsigned char irdata[33];
unsigned char ircood[4];
bit irok = 0;
sbit IR = P3^2;
void timer0()
{
EA = 1;
TMOD |= 0x02;
TH0 = 0;
TL0 = 0;
ET0 = 1;
TR0 = 1;
}
void int0()
{
EA = 1;
IT0 = 1;
EX0 = 1;
}
void int0_isr() interrupt 0
{
static unsigned char bitnum = 0;
if(1 == startflag)
{
if((irtime > 40) && (irtime < 60))
{
bitnum = 0;
}
irdata[bitnum] = irtime;
bitnum++;
irtime = 0;
if(33 == bitnum)
{
irok = 1;
bitnum = 0;
startflag = 0;
}
}
else
{
startflag = 1;
irtime = 0;
}
}
void timer0_isr() interrupt 1
{
irtime++;
}
unsigned char irprocess()
{
unsigned char i,j,k;
unsigned char temp;
k = 1;
for(j = 0; j < 4; j++)
{
for(i = 0; i < 8; i++)
{
temp >>= 1;
if(irdata[k] > 6)
{
temp += 0x80;
}
k++;
}
ircood[j] = temp;
}
if((ircood[0] + ircood[1] == 0xff) && (ircood[2] + ircood[3] == 0xff))
{
switch(ircood[2])
{
case 0x16: return 0;
case 0x0c: return 1;
case 0x18: return 2;
case 0x5e: return 3;
case 0x08: return 4;
case 0x1c: return 5;
case 0x5a: return 6;
case 0x42: return 7;
case 0x52: return 8;
case 0x4a: return 9;
case 0x45: return 10;
case 0x46: return 11;
case 0x47: return 12;
case 0x44: return 13;
case 0x40: return 14;
case 0x43: return 15;
case 0x07: return 16;
case 0x15: return 17;
case 0x09: return 18;
case 0x19: return 19;
case 0x0d: return 20;
default: break;
}
}
return 0xff;
}
void display()
{
unsigned char high,low;
unsigned char i;
for(i = 0; i < 4; i++)
{
high = ircood[i]/16;
low = ircood[i]%16;
if(high > 9)
{
high += 0x37;
}
else
{
high += 0x30;
}
if(low > 9)
{
low += 0x37;
}
else
{
low += 0x30;
}
lcd_print(1, 2*i+1, high);
lcd_print(1, 2*i + 2, low);
}
}
void irdisplay(unsigned char num)
{
unsigned char high,low;
high = num/10 +0x30;
low = num%10 + 0x30;
lcd_print(2, 1, high);
lcd_print(2, 2, low);
}
void main()
{
unsigned char keynum;
lcd_init();
timer0();
int0();
while(1)
{
if(1 == irok)
{
irok = 0;
keynum = irprocess();
display();
if(keynum != 0xff)
{
irdisplay(keynum);
}
}
}
}
上一篇:单片机——ds18b20——代码
下一篇:单片机——ds1302代码
史海拾趣
|
配合Keil for ARM的ULINK,让ARM开发完全摆脱ADS1.2。 Keil ULINK USB接口仿真器,一款多功能ARM调试工具,可以通过JTAG或CODS接口连接到目标系统仿真或下载程序,目前已经成为国内主流的ARM开发工具。 Keil ULINK的软件环境为Keil uVi ...… 查看全部问答> |
|
现在提及嵌入式,就谈到了嵌入式操作系统。 难道大家不再关心下面硬件和底层的内容了么? 如果这样,嵌入式发展不是应该纳入软件门类?和我们硬件有什么关系呢?… 查看全部问答> |
|
观察了一些企业的产品技术情况,比较普遍的一个现象是:研发人员无一例外的同声谴责采购和工艺部门,对元器件控制不严,致使电路板入检合格率低、到客户现场后频频出毛病。 举几个简单例子: 一个电解电容 ...… 查看全部问答> |
|
1.这种接法的优点就是起振容易,适应频率范围比较宽。具体频率范围本人不记得了。 2.这种接法的优点接法简单,缺点是不那么容易起振,C1,C2要合适。 … 查看全部问答> |
|
公司一直是基于三星6410平台的Windows Mobile操作系统,之前是没有集成OpenGL的,现在为了显示效果,准备加上,会对目前的系统产生什么影响?… 查看全部问答> |
|
我用windows embedded studio制作了一个迷你型的xpe系统,请问我如何能从U盘启动整个系统呢?我在网络上找过相关的一些方法,但是都不能顺利的完成。… 查看全部问答> |
|
在DAVE中,自己建的工程能编译、下载,但是不能单步调试,这是怎么回事? 现在正在学习XMC1300,使用英飞凌官方的编译器DAVE,自己建了工程能编译、下载,是不能单步进行调试,这是怎么回事呢?求大神解? … 查看全部问答> |
|
最近在自学MSP430G2553的串行I2C 在软件I2C(不是硬件I2C)的编写的时候要不要在编写之前先吧I2C.c和I2C.H文件先包含进去再写发送接收字节和帧函数呢?还是不用 直接就写后面的函数?另外软件设置了CLK和DATA接在p1.6和p1. ...… 查看全部问答> |




