通过hx1838遥控数码管显示对应数字的程序


```c
#include<reg52.h>
sbit IR=P3^2;
#define DATA P0
sbit wei1=P2^4;
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;
unsigned char code duanma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0123456789
unsigned char irtime;//红外用全局变量
bit irpro_ok,irok;
unsigned char ircord[4];  //客户码1+客户码2+操作码+操作反码
unsigned char irdata[33];  //1+8+8+8+8=33                                                                      /*函数定义*/
void tim0init(void)        //定时器t0初始化
{TMOD=0x02;              //t0工作方式2(自动重装)TH0=0X00;TL0=0X00;ET0=1;TR0=1;                    //计时器开
}void EX0init(void)                  //外部中断初始化
{IT0=1;                          //下降沿触发EX0=1;EA=1;
}void ir_work(void)                  //红外键值散转程序
{switch(ircord[2])                 //判断第三个数码值{  case 0x19:DATA=duanma[0];    //注意,每个遥控器对应键值不一样,需要自己用led灯把每个键的键值试探出来break;    case 0x45:DATA=duanma[1];break;case 0x46:DATA=duanma[2];break;    case 0x47:DATA=duanma[3];break;case 0x44:DATA=duanma[4];break;case 0x40:DATA=duanma[5];break;case 0x43:DATA=duanma[6];break;case 0x07:DATA=duanma[7];break;case 0x15:DATA=duanma[8];break;case 0x09:DATA=duanma[9];break;default:break;}
}void ircordpro(void)
{unsigned char i,j,k;unsigned char cord,value;    //value默认值为0k=1;                       //因为第一位引导码不需要,所以直接从客户码传入for(i=0;i<4;i++){    for(j=1;j<=8;j++){cord=irdata[k];if(cord>7)          //两次下降沿间隔大于1.9msvalue|=0x80;   //将真值的第一位置1if(j<8){value>>=1;      //向右移位}k++;}ircord[i]=value;         //将数字信号重新录入到新数组value=0;}irpro_ok=1;                   //允许进入下一个函数
}
/*主函数*/
void main()
{                                                         //1.计时器打开,中断允许EX0init();       //初始化外部中断                       2. 数码管打开tim0init();     //初始化定时器                            3.引导码进入触发中断wei1=1;                                             //  4.电平记录在irdata里wei2=1;wei3=1;wei4=1;while(1){if(irok){ircordpro();irok=0;}if(irpro_ok){ir_work();}}
}/*中断处理*/
void tim0_isr(void) interrupt 1 using 1
{irtime++;         //用于计数2个下降沿之间的时间,一次中断236us
}
void EX0_ISR(void) interrupt 0
{static unsigned char i;        //接收红外信号处理static bit startflag;  //是否开始处理标志位,默认值为0if(startflag){if(irtime<50&&irtime>=33)//引导码头码,判断引导码时长在9~17.5ms之间i=0;                   //开始计数irdata[i]=irtime;//irdata存储每个电平的持续时间,用于判断是0还是1irtime=0;        //重新计时i++;             //下一个电平if(i==33)           //1+8+8+8+8=33{irok=1;           //红外码接收中止i=0;}}else{irtime=0;startflag=1;}
}
**红外遥控程序中要注意的事项**1. 要先测出遥控器每个键的十六进制键值,可在此程序的基础上稍加更改(将switch函数替换)测出2. 测量引导码的时间范围不唯一,这里只选定了稍微合适的范围,但只要能把引导码的时间长度与0,1区分即可3. 最后需要的只有操作码,不需要客户码和操作反码4. hx1838接线,“+“接5v,”-“接gnd,剩下一个接P3.2

通过hx1838遥控数码管显示对应数字的程序及问题相关推荐

  1. 基于6位数码管显示的数字钟

    //基于6位数码管显示的数字钟 #include<reg51.h> sbit no_off = P1^0; //该按键用于暂停计时,设置时间 sbit select = P1^1; //该 ...

  2. 8255控制四个双色灯C语言,汇编语言实现通过8255A和4个开关控制实现8个LED灯和8个7位数码管显示指定数字全亮、全灭、从左至右、从右至左跑马灯式点亮...

    最后改进代码: .MODELTINY .STACK100 .DATA ledshow DB 11111110B ;数据段定义变量按"变量名 数据类型 数据";DB为字节型 seve ...

  3. 数码管显示倒计时c语言程序,1~99秒倒计时数码管显示C程序+Proteus仿真

    1~99秒倒计时数码管显示C程序+Proteus仿真文件. 优化了程序,使用51单片机内部定时器,可以实现1-99秒内倒计时. 仿真效果为: 源程序为: /* 调试环境:Proteus 7.8AT89 ...

  4. 89c51,8255,6个led数码管显示时钟的汇编语言程序,汇编语言要求编写一个时钟程序 用八位数码管实现时分秒的计时功能...

    我以前做的一个6位数码管的时钟程序,你可以看看,其实6位足够了. KEYVALEQU 30H KEYTMEQU 31H KEYSCANEQU 32H DATEQU 33H SCANLEDEQU 39H ...

  5. 51单片机数码管滚动显示学号_单片机数码管显示0到9程序代码

    /* 名称:单只数码管循环显示 0~9 说明:主程序中的循环语句反复将 0~9 的段码送至 P0 口,使数字 0~9 循环显示 */ #include #include #define uchar u ...

  6. 数码管显示实验一 编写程序让8只数码管同时显示零

    编写程序让数码管同时显示零 此实验是共阳极写法 程序: #include <reg51.h> unsigned char segment[]= {0xff,0x7f,0xbf,0xdf,0 ...

  7. python数码管倒计时程序_树莓派Python编程用1位数码管显示数字倒计时

    用1位数码管显示数字倒计时 概述 上一篇 我们学习了使用 PWM 来控制 LED 的亮度,这次我们学习使用1位数码管显示个位数字倒计时. 通过本节课,我们能学习到: 1位数码管的显示原理 所需硬件 树 ...

  8. FPGA基础知识极简教程(9)七段数码管显示的Verilog简单设计

    博文目录 写在前面 正文 七段数码管原理 七段数码管译码表 单个七段数码管显示verilog设计 多个数码管动态扫描显示 参考资料 交个朋友 写在前面 作为FPGA的基础知识教程怎么能少得了这个简单的 ...

  9. stm32数码管显示实时时间并有闹钟功能

    stm32数码管显示实时时间并有闹钟功能 功能描述 数码管介绍 数码管芯片 段选与位选 驱动数码管显示代码 实验思路 完整代码 Led.h Led.c Key.h Key.c beep.h beep. ...

  10. FPGA学习汇总(六)----数码管显示(1)

    目录 概念 单个数码管显示单个数字 操作 代码 现象 分析 四个数码管定时单个显示数字 分析 代码 四个数码管同时显示 分析 代码 现象 四个数码管同时显示定时转换 分析 代码 概念 我们要搞懂数码管 ...

最新文章

  1. Exchange 2007 配置POP3
  2. 视频驱动V4L2子系统驱动架构 - ioctl
  3. Linux输入法的几点补充
  4. 再学 GDI+[60]: TGPGraphics.SetSmoothingMode - 绘图质量
  5. 使用Spring Security的多租户应用程序的无状态会话
  6. 上传书籍进度信息到服务器...,使用HttpWebRequest实现大文件上传资料.pdf
  7. python字符串startswith_Python 字符串 startswith() 使用方法及示例
  8. ClickHouse 源码阅读 —— SQL的前世今生
  9. python3 xlrd包的用法
  10. 提高网站打开速度的7大秘籍
  11. 中国各省份省会的坐标
  12. selenium模拟登录QQ空间
  13. sncr脱硝技术流程图_脱硝技术介绍(SCR和SNCR)
  14. ubuntu系统打开.chm文件方式
  15. 彻底搞清楚library cache lock的成因和解决方法(转)
  16. 物理层-计算机网络知识汇总(二)|Zam9036博客
  17. 程序员全职接单一个月的感触
  18. 微信如何设置延迟到账 | 微信到账时间设置在哪里设置 | 微信转账后24小时/2小时/立即到账怎么设置
  19. 成都百知教育:前4月阿拉山口口岸出口跨境电商包同比增长307%
  20. Kafka的生产者,消费者JavaApi操作实例

热门文章

  1. mysql操作 begin 命令_MySQL基础操作
  2. 百度地图矢量瓦片在线下载
  3. 黑马程序员 python 数据分析 代码_2020年最新版 5.0程序员 黑马python人工智能数据分析机器学习软件测试全栈开发...
  4. ug冲模标准件库_UG标准件库|标准件库下载|3DSource零件库|海量CAD模型
  5. node mysql 坑_菜鸟Node.js MySQL教程遇到的坑
  6. c语言所有逻辑符号大全,C语言中的逻辑取反是“~”符号吗逻辑或是“|”符号吗?...
  7. Android WebView优化
  8. 24张最新可视化大屏模板,各行业数据直接套用
  9. 阿里云发送短信验证码
  10. 点云数据实时在线浏览共享与逆向建模应用