标题: 红外通信等51单片机c语言教程例程分享 [打印本页]

作者: liuwwe    时间: 2018-7-21 11:13
标题: 红外通信等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)







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1