求红外解码并通过数码管显示出来的C语言程序?大侠们,请帮帮忙

作者&投稿:岛养 (若有异议请与网页底部的电邮联系)
如何用C语言编程将红外传感器的返回值在数码管上用0和1显示?~

#include
sbit wei1=P3^0;
sbit wei2=P3^1;
unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char Data[8]; //存储显示值的全局变量
void Delay(unsigned int t); //函数声明
main()
{
unsigned char num=0;
unsigned int j;
while(1)
{
Data[1]=DuanMa[num/10];
Data[0]=DuanMa[num%10];
num++;
if(num==100) //用于显示0~99
num=0;
for(j=0;j<5;j++)
{ wei1=0;
wei2=1;
P2=Data[1];
Delay(5000);
wei1=1;
wei2=0;
P2=Data[0];
Delay(5000);
}
}
}
void Delay(unsigned int t)
{
while(--t);
}
用的共阴极数码管,p2口接数码管数据输入端,p3.0和p3.1接使能端
我用proteus仿真了一下,个位总是闪,很是郁闷,不知是何原因,但你可以参考一下,找到原因了可以告诉我一声,谢谢!

参考一下吧
#include #define c(x) (x*120000/120000) sbit Ir_Pin=P3^2;//接红外sbit beep=P3^6;unsigned char code Led_Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82, 0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //共阳极数码显示码0-F.unsigned char code Led_Sel[]={0x00,0x01,0x02,0x03};unsigned char Led_Buf[4]; //显示缓冲区char Led_Index;//位选 unsigned char Ir_Buf[4]; //用于保存解码结果void delay_50ms(unsigned int t){ unsigned int j; for(;t>0;t--) for(j=6245;j>0;j--) {;}}//==============================================================//数码管扫描timer0() interrupt 1 using 1{TL0=65536-1000; TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描 P0=0xff; P2=Led_Sel[Led_Index]; //位选 P0=Led_Tab[Led_Buf[Led_Index]]; //段选if(++Led_Index>3) Led_Index=0; //四个扫描完了,到第一个数码管 }//==============================================================unsigned int Ir_Get_Low(){TL1=0; TH1=0; TR1=1; while(!Ir_Pin && (TH1&0x80)==0); TR1=0; return TH1*256+TL1;}//============================================================= unsigned int Ir_Get_High() {TL1=0; TH1=0; TR1=1; while(Ir_Pin && (TH1&0x80)==0); TR1=0; return TH1*256+TL1; }//============================================================== main(){unsigned int temp; char i,j; Led_Index=1; TMOD=0x11; TL0=65536-1000; TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描 EA=1; ET0=1; TR0=1;Led_Buf[0]=0;Led_Buf[1]=0;Led_Buf[2]=0;Led_Buf[3]=0; //显示区设成0do{ restart: while(Ir_Pin); temp=Ir_Get_Low(); if(tempc(9500)) continue;//引导脉冲低电平9000 temp=Ir_Get_High(); if(tempc(5000)) continue;//引导脉冲高电平4500 for(i=0;ic(800)) goto restart; temp=Ir_Get_High(); if(tempc(2000)) goto restart; Ir_Buf[i]>>=1; if(temp>c(1120)) Ir_Buf[i]|=0x80; } Led_Buf[0]=Ir_Buf[2]&0xf; Led_Buf[1]=(Ir_Buf[2]/16)&0xf; Led_Buf[2]=Ir_Buf[3]&0xf; Led_Buf[3]=(Ir_Buf[3]/16)&0xf; //显示结果 P1=Ir_Buf[2]; beep=0; delay_50ms(2); beep=1; } while(1); }希望能帮助你,望采纳。

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit IR=P3^2; //红外接口标志
#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^2;//定义锁存使能端口 段锁存
sbit LATCH2=P2^3;// 位锁存
/*------------------------------------------------
全局变量声明
------------------------------------------------*/
unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char irtime;//红外用全局变量
bit irpro_ok,irok;
unsigned char IRcord[4];
unsigned char irdata[33];
/*------------------------------------------------
函数声明
------------------------------------------------*/
void Ir_work(void);
void Ircordpro(void);
/*------------------------------------------------
定时器0中断处理
------------------------------------------------*/
void tim0_isr (void) interrupt 1 using 1
{
irtime++; //用于计数2个下降沿之间的时间
}
/*------------------------------------------------
外部中断0中断处理
------------------------------------------------*/
void EX0_ISR (void) interrupt 0 //外部中断0服务函数
{
static unsigned char i; //接收红外信号处理
static bit startflag; //是否开始处理标志位
if(startflag)
{
if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms
i=0;
irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}
else
{
irtime=0;
startflag=1;
}
}
/*------------------------------------------------
定时器0初始化
------------------------------------------------*/
void TIM0init(void)//定时器0初始化
{
TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
TH0=0x00; //重载值
TL0=0x00; //初始化值
ET0=1; //开中断
TR0=1;
}
/*------------------------------------------------
外部中断0初始化
------------------------------------------------*/
void EX0init(void)
{
IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)
EX0 = 1; //使能外部中断
EA = 1; //开总中断
}
/*------------------------------------------------
键值处理
------------------------------------------------*/
void Ir_work(void)//红外键值散转程序
{
switch(IRcord[2])//判断第三个数码值
{
case 0x0c:DataPort=dofly_DuanMa[1];break;//1 显示相应的按键值
case 0x18:DataPort=dofly_DuanMa[2];break;//2
case 0x5e:DataPort=dofly_DuanMa[3];break;//3
case 0x08:DataPort=dofly_DuanMa[4];break;//4
case 0x1c:DataPort=dofly_DuanMa[5];break;//5
case 0x5a:DataPort=dofly_DuanMa[6];break;//6
case 0x42:DataPort=dofly_DuanMa[7];break;//7
case 0x52:DataPort=dofly_DuanMa[8];break;//8
case 0x4a:DataPort=dofly_DuanMa[9];break;//9
default:break;
}
irpro_ok=0;//处理完成标志
}
/*------------------------------------------------
红外码值处理
------------------------------------------------*/
void Ircordpro(void)//红外码值处理函数
{
unsigned char i, j, k;
unsigned char cord,value;
k=1;
for(i=0;i<4;i++) //处理4个字节
{
for(j=1;j<=8;j++) //处理1个字节8位
{
cord=irdata[k];
if(cord>7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差
value|=0x80;
if(j<8)
{
value>>=1;
}
k++;
}
IRcord[i]=value;
value=0;
}
irpro_ok=1;//处理完毕标志位置1
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main(void)
{
EX0init(); //初始化外部中断
TIM0init();//初始化定时器
DataPort=0xfe; //取位码 第一位数码管选通,即二进制1111 1110
LATCH2=1; //位锁存
LATCH2=0;
while(1)//主循环
{
if(irok) //如果接收好了进行红外处理
{
Ircordpro();
irok=0;
}
if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
{
Ir_work();
}
}
}

你邮箱多少?我可以给你发过去。


这是一个红外接收遥控开关的仿真图,有8个按键,由数码管显示个数。
两个数码管,怎么不一样?一个共阳,一个共阴。接数码管是的是译码器吗?是什么?接8个按键的,那是什么单片机吗,字太小了,看不清楚。按键不用加上拉电阻,可以简化。仿真图,三极管直接控制继电器,不用光耦,可以简化。按键的单片机,发送信号吗,下面的单片机怎么接收的,那个红外接收器与上面的...

求51单片机红外摇控接收c程序,并在数码管上显示键值出来?
include<reg51.h> include <intrins.h> define uchar unsigned char define uint unsigned int define ulong unsigned long define Nop() {_nop_(); _nop_(); _nop_(); _nop_(); _nop_();} volatile ulong IRcode=0x00000000; \/\/32位的键代码 volatile ulong Irdcode=0x00000000;vol...

51单片机红外解码C程序
单片机采用外部中断P3.3管脚和红外接收头的信号线相连,中断方式为边沿触发方式。并用定时器0计算中断的间隔时间,来区分前导码、二进制的“1”、“0”码。并将8位操作码提取出来在数码管上显示。\/\/ 解码值在Im[2]中,当IrOK=1时解码有效。 \/* 51单片机红外遥控解码程序 *\/ \/\/用遥控器...

求单独的红外发射和接收程序,独立按键的值经过发射到另外的一个单片机上...
双机通信,最简单的方法是利用串口。

红外线遥控器解码C语言程序代码 SM0038接受头
\/\/\/ \/\/晶振频率为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 ...

谁能介绍一下红外线解码c51遥控程序
\/\/数码管显示表 unsigned char code tableduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};unsigned char code tablewei[]= {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};void display();void main(){ ir=1;\/\/开外部...

能不能用数码管显示热释电红外传感探测到的人数,数码管接单片机,探测到...
除非是在一个狭窄通道中,人体以一定的间隔依次通过,这样才可以统计出一定时间内所经过的人数,否则,这种检测方法不能确定在一个区域中同时有一个或多个人.如果用普通的热释电红外传感器自己搭电路而不配合适当的算法,那么即使位于有效范围内的人体不移动,传感器也是有信号的....

红外光纤的工作原理
键盘用于输入指令, 51单片机检测键盘上按键的状态,并对红外信号进行调制,发光二极管产生红外线,数码管用来显示发送的键值。红外接收部分由51单片机、一体化红外接收头HS0038和7段数码管组成。51单片机检测HS0038,并对HS0038接收到的数据解码,通过数码管显示接收到的键值。

遥控器是什么原理?
众所周知,任何红外线的信号都是可以由一串二进制编码翻译表达出来的,手机通过外设或内部遥控模块电压信号都可以传递出一串含有二进制编码信息,转化为红外遥控器的红外线发射出来。 本课题旨在通过智能手机的软件支持,配合一个外接硬件红外发射模块内转化为红外线输出,达到各种电器遥控器合为一体的目的,力求为使用者带来方...

如何用C语言编程将红外传感器的返回值在数码管上用0和1显示?
;wei1=1;wei2=0;P2=Data[0];Delay(5000);} } } void Delay(unsigned int t){ while(--t);} 用的共阴极数码管,p2口接数码管数据输入端,p3.0和p3.1接使能端 我用proteus仿真了一下,个位总是闪,很是郁闷,不知是何原因,但你可以参考一下,找到原因了可以告诉我一声,谢谢!

诸暨市18465266248: 本人是单片机初学求C语言红外遥控解码程序并用数码管显示带注悉
虞柔思美: #include &lt;reg51.h&gt; #include &lt;intrins.h&gt; #define uchar unsigned char #define uint unsigned int sbit IRIN = P3^2; //遥控输入脚 sbit BEEP = P3^7; //蜂鸣器 sbit RELAY= P3^6; //继电器 uchar IR_buf[4]={0x00,0x00,0x00,0x00};//IR_buf[0]...

诸暨市18465266248: 求红外解码并通过数码管显示出来的C语言程序?大侠们,请帮帮忙 -
虞柔思美: #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit IR=P3^2; //红外7a686964616fe59b9ee7ad9431333330346531接口标志#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit ...

诸暨市18465266248: 如何用C语言编程将红外传感器的返回值在数码管上用0和1显示? -
虞柔思美: #include<reg52.h> sbit wei1=P3^0; sbit wei2=P3^1; unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9 unsigned char Data[8]; //存储显示值的全局变量 void Delay(unsigned int t); //函数声...

诸暨市18465266248: 求51单片机红外遥控器(电视遥控或者其他的红外遥控器)解码C程序!要数码管显示键码值的!
虞柔思美: 主函数 #include &lt;reg51.h&gt; #include &lt;intrins.h&gt; #define NOP() _nop_() /* 定义空指令 */ //译码器管脚定义 sbit LS138A=P2^2; //管脚定义 sbit LS138B=P2^3; sbit LS138C=P2^4; //此表为 LED 的字模, 共阴数码管 0-9 - unsigned ...

诸暨市18465266248: 求红外解码c程序带详细解释 -
虞柔思美: #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit IR=P3^2; //红外接口标志#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^6;//定义锁存使能端口 段锁存 ...

诸暨市18465266248: 求红外解码c程序带详细解释
虞柔思美: #include&lt;reg52.h&gt; //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit IR=P3^2; //红外接口标志 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^6;//定义锁存使能端口 段...

诸暨市18465266248: 在单片机中,红外接受分成:用户码,用户码,数据码和数据反码.我想得到它的数据码,并在数字管上显示出来的程序 -
虞柔思美: 红外解码 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit IR=P3^2; //红外接口标志 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口 ...

诸暨市18465266248: 急求红外线解码编程(C语言)有电路图,求大神指点!! -
虞柔思美: ////////////////////////////////////////晶振频率为6MHz 一个机器周期2us ////实现按键地址码、指令码的数码管显示////2010-06-01 ////////////////////////////////////////#include#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;bit overflag,...

诸暨市18465266248: C语言怎么写红外程序?实现遥控控制八个led.求程序和详细解释. -
虞柔思美: 下面是一个用C写的遥控器程序.能在数码管上显示键码.#include <reg52.h>#define c(x) (x*110592/120000) sbit Ir_Pin=P3^3; unsigned char code Led_Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}...

诸暨市18465266248: 急求红外发射与解码的c程序 -
虞柔思美: (1)发送程序 #include <reg52.h> static bit OP; //红外发射管的亮灭 static unsigned int count; //延时计数器 static unsigned int endcount; //终止延时计数 static unsigned int temp; //按键 static unsigned char flag; //红外发送标志 static unsigned ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网