历史上的今天
今天是:2025年08月21日(星期四)
2020年08月21日 | 单片机红外线发射接收电路
2020-08-21 来源:51hei


单片机源程序如下:
/***************************************************************
作品:红外线发射
单片机:STC89C52RC
晶振:12M
编译环境:Keil uVision4 V9.00
***************************************************************/
//
// 发射引脚(接PNP三极管b极)
// PNP三极管e极接2Ω电阻,c极接红外发射管
#include #include #define uchar unsigned char #define uint unsigned int #define SBM 0x80 //识别码 #define m9 (65536-9000) //约9mS #define m4_5 (65536-4500) //约4.5mS #define m1_6 (65536-1630) //约1.65mS #define m_65 (65536-580) //约0.65mS #define m_56 (65536-560) //约0.56mS #define m40 (65536-40000) //约40mS #define m56 (65536-56000) //56mS #define m2_25 (65536-2250) //约2.25mS sbit IR = P3^6; //定义发射引脚(接PNP三极管基极) sbit LED = P3^7; //发射指示灯 uchar KEY(void); void SanZhuan(void); void ZZ(uchar x); void Z0(uchar temp); void TT0(bit BT,uint x); void YS(uchar time); /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数功能:主函数 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void main(void) { TMOD = 0x01; //T0 16位工作方式 IR=1; //发射端口常态为高电平 while(1) { SanZhuan(); } } /*************************************************************** 函数功能: 4×4矩阵键盘 键值 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 │ │ │ │ │ │ │ │ ┃ │ │ │ └────13 14 15 16 ┃ │ │ └─────────9 10 11 12 ┃ │ └──────────────5 6 7 8 ┃ └────────────────────1 2 3 4 ┃ ***************************************************************/ uchar KEY(void) { uchar H,L; //行值,列值 H=0; L=0; P1 = 0xf0; //将键盘端口行值设为1,列值设为0 if(P1!= 0xf0) //检测是否有按键按下,如果有则hangval必不为0x0f { YS(10); //按键去抖动,延时10毫秒 if(P1!=0xf0) //确实有按键按下 { H = P1&0xf0; //按键后得到按键的行标志位,将行标志位赋值给hangval P1 = 0x0f; //翻转键盘接口输出 L = P1&0x0f; //得到列标志位 } return (H+L); } return 0; } /*************************************************************** 函数功能:散转程序 入口参数:v // // 13 14 15 16 // 9 10 11 12 // 5 6 7 8 // 1 2 3 4 ***************************************************************/ void SanZhuan(void) { uchar v; v = KEY(); switch(v) { case 0x77:ZZ(0x01);v=0;break; //" " case 0xb7:ZZ(0x02);v=0;break; //" " case 0xd7:ZZ(0x03);v=0;break; //" " case 0xe7:ZZ(0x04);v=0;break; //" " case 0x7b:ZZ(0x05);v=0;break; //" " case 0xbb:ZZ(0x06);v=0;break; //" " case 0xdb:ZZ(0x07);v=0;break; //" " case 0xeb:ZZ(0x08);v=0;break; //" " case 0x7d:ZZ(0x09);v=0;break; //" " case 0xbd:ZZ(0x10);v=0;break; //" " case 0xdd:ZZ(0x11);v=0;break; //" " case 0xed:ZZ(0x12);v=0;break; //" " case 0x7e:ZZ(0x13);v=0;break; //" " case 0xbe:ZZ(0x14);v=0;break; //" " case 0xde:ZZ(0x15);v=0;break; //" " case 0xee:ZZ(0x16);v=0;break; //" " default:v=0; } } /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数功能:发送主程序 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void ZZ(uchar x) { TT0(1,m9); //高电平9mS TT0(0,m4_5); //低电平4.5mS /*┈ 发送4帧数据 ┈*/ Z0(SBM); Z0(~SBM); Z0(x); Z0(~x); /*┈┈ 结束码 ┈┈*/ TT0(1,m_65); TT0(0,m40); /*┈┈ 重复码 ┈┈*/ while(KEY()) { TT0(1,m9); TT0(0,m2_25); TT0(1,m_56); TT0(0,m40); TT0(0,m56); LED = !LED; //指示灯 } LED = 1; } /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数功能:单帧发送程序 入口参数:1帧数据 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void Z0(uchar temp) { uchar v; for (v=0;v<8;v++) //循环8次移位 { TT0(1,m_65); //高电平0.65mS if(temp&0x01) TT0(0,m1_6); //发送最低位 else TT0(0,m_56); temp >>= 1; //右移一位 } } /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数功能:38KHz脉冲发射 + 延时程序 入口参数:(是否发射脉冲,延时约 x (uS)) ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void TT0(bit BT,uint x) { TH0 = x>>8; //输入T0初始值 TL0 = x; TF0=0; //清0 TR0=1; //启动定时器0 if(BT == 0) while(!TF0); //BT=0时不发射38KHz脉冲只延时;BT=1发射38KHz脉冲且延时; else while(1) //38KHz脉冲,占空比5:26 { IR = 0; if(TF0)break; if(TF0)break; IR = 1; if(TF0)break; if(TF0)break; ……………………
下一篇:51单片机水塔原理图与源程序
史海拾趣
|
全球10大半导体厂商排名: 1.英特尔(Intel) 2.三星(Samsung) 3.德州仪器(TI) 4.东芝(Toshiba) 5.台积电(TSMC) 6.意法半导体会(ST) 7.瑞萨科技(Renesas) 8.海力士(Hynix) 9.索尼(Sony) 10.高通(Qualcomm) 1.美国英特尔(Intel)公司,以 ...… 查看全部问答> |
|
DC-DC电路PCB设计要求: 在设计印刷线路板时,设计工程师都会仔细思考铜线的走线方式和元器件的放置问题。如果没有充分考虑这两点,印刷线路板的效率、最大输出电流、输出纹波及其它特性都将会受到影响。 ...… 查看全部问答> |
|
VS2005开发的程序在wince5.0上不能直接运行,需要什么DLL? 我使用c#,写了一段代码,在wince上运行,发现一个问题,就是生成的EXE不可以在wince上直接运行,必须在使用VS开发环境来运行(只要使用开发环境运行一次,后面几次就可以直接运行我的EXE了),我觉得是VS在下载EXE的同时也在wince上安装了所需要的 ...… 查看全部问答> |
|
我在S3C6410上做VGA,同样一款显示器,如果分辨率为800x600显示非常正常; 如果我把分辨率改为1024x768时,就有问题。问题如下: 右键刷新时,屏幕会黑下屏,黑1秒左右又正常; 放视频或电影时,每当切换画面比较大 ...… 查看全部问答> |
|
如题,我加载了汉王手写输入法到系统中,能正常手写,识别效果也还满意。 但是当用触笔点击任务栏上的隐藏按钮的时候,它一直以为我是在写字,要很长时间才可以 隐藏。 同样的程序同事在他的目标机上很正常,不知道我的是怎么了。。。 是不是屏 ...… 查看全部问答> |
|
请高手指点,企图自己创建一个新的数据库,并输入要创建的表名,但是以出入的名字做表名时出错。 代码如下: SqlCeEngine Engine = new SqlCeEngine(\"DataSource = \\\\\" + t ...… 查看全部问答> |
|
(高价)(高价)(高价)诚激高手开发:sock5全自动代理自助管理系统,有技术者加QQ详谈,99040008 (高价)(高价)(高价)诚激高手开发:sock5全自动代理自助管理系统,有技术者加QQ详谈,99040008… 查看全部问答> |
|
C语言的编译器带有的debugger,如何对它进行测试呢?测试debugger的行为时,因为test case的不同会有很大差异,包括各寄存器的值都会发生变化。 请问有经验的前辈如何测试的?谢谢咯… 查看全部问答> |




