完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#define uchar unsigned char #define uint unsigned int ***it output = P1^0; ***it KEY1=P3^0; ***it KEY2=P3^1; ***it KEY3=P3^2; ***it KEY4=P3^3; static bit OP; //红外发射管的亮灭 static unsigned int count; //延时计数器 static unsigned int endcount; //终止延时计数 static unsigned char flag; //红外发送标志 void SendIRdata(char p_irdata1,char p_irdata2,char p_irdata3,char p_irdata4,char p_irdata5); void delay(); uchar KEY(); void Delay(uint del) { uint i,j; for(i=0; i ; } void main(void) { uchar t; count = 0; flag = 0; OP = 0; output = 0; EA = 1; //允许CPU中断 TMOD = 0x11; //设定时器0和1为16位模式1 ET0 = 1; //定时器0中断允许 TH0 = 0xFF; TL0 = 0xE8; //设定时值0为38K 也就是每隔26us中断一次 ,晶振11.0592M TR0 = 1;//开始计数 do{ t=KEY(); switch(t) { case 0: break; case 1: SendIRdata(25,2,224,80,4); // 1900e0514 break; case 2: SendIRdata(17,0,160,80,4); // break; case 3: SendIRdata(25,1,224,80,4); // break; case 4: SendIRdata(25,2,224,80,4); // break; } }while(1); } //定时器0中断处理 void timeint(void) interrupt 1 { TH0=0xFF; TL0=0xE8; //设定时值为38K 也就是每隔26us中断一次 count++; if (flag==1) { OP=~OP; } else { OP = 0; } output = OP; } void SendIRdata(char p_irdata1,char p_irdata2,char p_irdata3,char p_irdata4,char p_irdata5) { int i; char irdata; //发送9ms的起始码 endcount=250; flag=1; count=0; do{}while(count //发送4.5ms的结果码 endcount=117; flag=0; count=0; do{}while(count //发送十六位地址的前八位 irdata=p_irdata1; for(i=0;i<8;i++) { //先发送0.56ms的38KHZ红外波(即编码中0.56ms的高电平) endcount=12; flag=1; count=0; do{}while(count //停止发送红外信号(即编码中的高电平) if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0 { endcount=45; //1为宽的低电平 } else { endcount=15; //0为窄的低电平 } flag=0; count=0; do{}while(count irdata=irdata>>1; } //发送十六位地址的后八位 irdata=p_irdata2; for(i=0;i<8;i++) { endcount=12; flag=1; count=0; do{}while(count if(irdata-(irdata/2)*2) { endcount=45; } else { endcount=15; } flag=0; count=0; do{}while(count irdata=irdata>>1; } //发送八位数据 irdata=p_irdata3; for(i=0;i<8;i++) { endcount=12; flag=1; count=0; do{}while(count if(irdata-(irdata/2)*2) { endcount=45; } else { endcount=15; } flag=0; count=0; do{}while(count irdata=irdata>>1; } //发送八位数据2 irdata=p_irdata4; for(i=0;i<8;i++) { endcount=12; flag=1; count=0; do{}while(count if(irdata-(irdata/2)*2) { endcount=45; } else { endcount=15; } flag=0; count=0; do{}while(count irdata=irdata>>1; } //发送35位数据中最后三位数据 irdata=p_irdata5; irdata=irdata>>1; //因为从低位开始发 for(i=0;i<3;i++) { endcount=12; flag=1; count=0; do{}while(count if(irdata-(irdata/2)*2) { endcount=45; } else { endcount=15; } flag=0; count=0; do{}while(count irdata=irdata>>1; } endcount=12; flag=1; count=0; do{}while(count flag=0; } void delay() { int i,j; for(i = 0; i < 400; i++){ for(j = 0; j < 200; j++){ } } } uchar KEY() { if(KEY1 == 0 || KEY2 == 0 || KEY3 == 0 || KEY4 == 0) { Delay(2); if(KEY1 == 0) { while(1) { if(KEY1 == 1) { Delay(2); if(KEY1 == 1) { break; } } } return 1; } if(KEY2 == 0) { while(1) { if(KEY2 == 1) { Delay(2); if(KEY2 == 1) { break; } } } return 2; } if(KEY3 == 0) { while(1) { if(KEY3 == 1) { Delay(2); if(KEY3 == 1) { break; } } } return 3; } if(KEY4 == 0) { while(1) { if(KEY4 == 1) { Delay(2); if(KEY4 == 1) { break; } } } return 4; } } return 0; } |
|
相关推荐
3个回答
|
|
路过,看看,看看
|
|
|
|
卡卡卡卡卡卡卡卡卡卡卡卡
|
|
|
|
路过,看看,楼主加油
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
852 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
592 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
705 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
926 浏览 2 评论
657 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12009 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 01:40 , Processed in 0.756051 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号