红外线遥控器解码C语言程序代码 SM0038接受头

红外线遥控器解码C语言程序代码 SM0038接受头,第1张

//////////////////////////////////////

//晶振频率为6MHz 一个机器周期2us //

//实现按键地址码、指令码的数码管显示//

//2010-06-01 //

//////////////////////////////////////

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit dula=P2^6

sbit wela=P2^7

bit overflag,dataover//开始接收数据,数据处理完毕

uchar timedata//定时器0溢出次数

uchar chubus[33]//33Byte数据 timedata组成的数组

uchar jieguos[4]//地址码,地址反码,数据码,数据反码;

void initial()//初始化

{

IT0=1EX0=1//负边沿触发

TMOD=0x01ET0=1TR0=1//模式1,十六位定时器

TH0=0xffTL0=0x06//0.5ms溢出

EA=1//开总中断

}

void time0() interrupt 1//定时器0中断

{TH0=0xffTL0=0x06

timedata++

}

void ex0() interrupt 0//外部中断0,接收数据

{

static bit startflag//开始接收

static uchar i

if(startflag)

{

if(timedata<32&&timedata>=16) i=0

chubus[i]=timedata

timedata=0

i++

if(i==33){overflag=1i=0}

}

else

{

startflag=1

timedata=0

}

}

void chulidata()

{

uchar chubu//初步数据

uchar jieguo//结果数据

uchar x,y,z=1

for(x=0x<4x++)//处理四组数据

{

for(y=1y<=8y++)//处理一组数据8Byte

{

chubu=chubus[z]

jieguo=jieguo>>1

if(chubu>3) jieguo=jieguo|0x80//大于1.5mS为1

z++

}

jieguos[x]=jieguo

jieguo=0

}

dataover=1

}

void delay(uint z)

{

uint x ,y

for(x=zx>0x--)

for(y=110y>0y--)

}

void display()

{

uchar gao,gao1

uchar di,di1

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71}

gao1=table[jieguos[0]/16]

di1=table[jieguos[0]%16]

gao=table[jieguos[2]/16]

di=table[jieguos[2]%16]

dula=1

P0=gao1

dula=0

P0=0xff

wela=1

P0=0x7e

wela=0

delay(2)

dula=1

P0=di1

dula=0

P0=0xff

wela=1

P0=0xfd

wela=0

delay(2)//地址码

dula=1

P0=gao

dula=0

P0=0xff

wela=1

P0=0x77

wela=0

delay(2)

dula=1

P0=di

dula=0

P0=0xff

wela=1

P0=0x6f

wela=0

delay(2)//指令码

}

void main()

{

initial()//初始化

while(1)

{

if(overflag)//数据接收完毕

{

chulidata()//处理数据,完成标志dataover

overflag=0

}

if(dataover)

{

display()//数码管显示

}

}

}

此为 B站up:江科大自动协 课程的12-2程序,学习用

跟着老师敲出来

main.c

Delay.h

Delay.c

Int0.h

Int0.c

LCD1602.h

LCD1602.c

Timer0.h

Timer0.c

IR.h

IR.c

1,首先确定下,你的接收头是不是有问题,有多的换个试试就行。

2,你用什么片子,如果够快的话,可以不用中断的,改下程序结构。

3,你自己焊的板子,还是好好检查下,可能有隐蔽错误!

4,软件对这种故障要有保护机制。。。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11775116.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存