找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1598|回复: 0
打印 上一主题 下一主题
收起左侧

红外通信等51单片机c语言教程例程分享

[复制链接]
跳转到指定楼层
楼主
51单片机学习


单片机源程序如下:
  1. #include"reg52.h"
  2. sbit LSA=P2^2;
  3. sbit LSB=P2^3;
  4. sbit LSC=P2^4;
  5. sbit PPM=P3^2; //也是外部中断0的io
  6. typedef unsigned char u8;
  7. typedef unsigned int u16;
  8.     u8 TIME;
  9.     u8 text[4];
  10.     u8 digdisplay[3];
  11.     u8 code smgduan[17]={
  12.          0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  13.          0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X76};
  14.           //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、H的显示码

  15. void delay(u16 time){
  16.     while(time--);
  17. }
  18. void Display(){
  19.      u8 i;
  20.      for(i=0;i<3;i++){
  21.               switch(i){
  22.                  case 0:LSA=0,LSB=0,LSC=0;break;
  23.                  case 1:LSA=1,LSB=0,LSC=0;break;
  24.                  case 2:LSA=0,LSB=1,LSC=0;break;
  25.          }
  26.          P0=digdisplay[i];
  27.               delay(100);
  28.               P0=0x00;
  29.         }
  30. }

  31. void Irinit0(){
  32.    IT0=1;//选择下降沿有效
  33.    EX0=1; //开外部中断0
  34.    EA=1;  //开总中断

  35.    PPM=1; //初始化
  36. }
  37. void main(){
  38.        Irinit0();
  39.        while(1){
  40.           digdisplay[0]=smgduan[16];
  41.           digdisplay[1]=smgduan[text[2]%16];//低四位
  42.           digdisplay[2]=smgduan[text[2]/16];//高四位
  43.           Display();
  44.        }
  45. }
  46. void Ir_Read() interrupt 0
  47.       {
  48.       u16 i,j;
  49.       u8 err;
  50.       TIME=0;
  51.       delay(700);
  52.       if(PPM==0){
  53.               err=1000;
  54.         while(PPM==0&&err>0){
  55.             delay(1);
  56.             err--;
  57.         }      
  58.               if(PPM==1){             // 如果等到9ms后的高电平,在等4.5ms高电平过去
  59.              err=500;
  60.              while(PPM==1&&err>0)
  61.              delay(1);
  62.              err--;
  63.         }
  64.         for(i=0;i<4;i++){ //需要接收四针数据,用户码,用户码,数据码,数据反码
  65.              for(j=0;j<8;j++){
  66.                       err=60;
  67.                  while(PPM==0&&err>0){         //等待每一个字节前的0.56ms过去
  68.                  delay(1);
  69.                  err--;
  70.                  }
  71.                  TIME=0;
  72.                  err=100;         //防止等待时间太长
  73.                  while(PPM==1&&err>0){
  74.                       delay(10);//0.1ms
  75.                       TIME++;
  76.                       err--;
  77.                       if(TIME>30){
  78.                           return;
  79.                       }
  80.                  }
  81.                  text[i]>>=1;
  82.                  if(TIME>=8){
  83. ……………………

  84. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
c51复习.zip (378.43 KB, 下载次数: 17)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表