找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机之控制红外传感器

[复制链接]
跳转到指定楼层
楼主
ID:243524 发表于 2017-10-27 20:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<intrins.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
#define led P2

sbit buzz=P1^5;
sbit lsa=P2^2;
sbit lsb=P2^3;
sbit lsc=P2^4;
sbit key1=P3^2;
sbit key2=P3^3;
sbit led1=P2^1;

uchar code tab_duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f/*,0x77,0x7c,0x39,0x5e,0x79,0x71*/};
uchar  display[8];

uint i,t0,t1,t2;//time
int count1,count2,flag_led;//infrared
void display_();
void display_pros();
void infrared_control();
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

void timer_init()
{
TMOD=0x11;
TH0=0x3c;//(65536-50000)/256;
TL0=0xb0;//(65536-50000)%256;
ET0=1;
TR0=1;
}
void ex_init()
{
EX0=1;
IT0=1;

EX1=1;
IT1=1;
}
void init()
{
EA=1;
led=0xff;
}

void main()
{   
timer_init();
ex_init();
init();
while(1)
  {  
   infrared_control();
   
//   display_pros();
//   display_();
   
  }
}
void infrared_control()
{
if(flag_led>0)
  {
   led=0x00;
  }
if(flag_led<=0)
  {
   led=0xff;
  }
}
void int0() interrupt 0
{
   count1++;
   flag_led++;
   if(count1==60)
    {
     count1=0;
    }
   buzz=~buzz;
   delay(1);
}
void int1() interrupt 2
{
   count1--;
   flag_led--;
   buzz=~buzz;
   delay(1);
   
}
void timer0() interrupt 1
{
  TH0=0x3c;//(65536-50000)/256;
TL0=0xb0;//(65536-50000)%256;
i++;
if(i==20)
  {
   i=0;
   t0++;
   if(t0==60)
    {
     t0=0;
     t1++;
     if(t1==60)
      {
       t1=0;
       t2++;
       if(t2==24)
        {
         t2=0;
        }
      }
   
    }
  }
  
}






void display_()
{
uchar j;
for(j=0;j<8;j++)
{
switch(j)
  {
case 0:
      lsc=0;lsb=0;lsa=0;break;
//  P0=tab_duan[count1%10];
  case 1:
    lsc=0;lsb=0;lsa=1;break;
//  P0=tab_duan[count1/10];
  case 2:
    lsc=0;lsb=1;lsa=0; break;
//  P0=tab_duan[t0%10];
  case 3:
    lsc=0;lsb=1;lsa=1;break;
//  P0=tab_duan[t0/10];
  case 4:
    lsc=1;lsb=0;lsa=0;break;
//  P0=tab_duan[t1%10];
  case 5:
    lsc=1;lsb=0;lsa=1;break;
//  P0=tab_duan[t1/10];

  case 6:
    lsc=1;lsb=1;lsa=0;break;
//  P0=tab_duan[t2%10];
  case 7:
    lsc=1;lsb=1;lsa=1;break;
///  P0=tab_duan[t2/10];
   }
   P0=display[j];
   delay(1);
   P0=0x00;
  }
}
void display_pros()
{
display[0]=tab_duan[count1%10];
display[1]=tab_duan[count1/10];
display[2]=tab_duan[t0%10];
display[3]=tab_duan[t0/10];
display[4]=tab_duan[t1%10];
display[5]=tab_duan[t1/10];
display[6]=tab_duan[t2%10];
display[7]=tab_duan[t2%10];
}








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

使用道具 举报

沙发
ID:392319 发表于 2018-9-1 14:39 | 只看该作者
你好楼主,请问这个程序具体是什么流程
回复

使用道具 举报

板凳
ID:701637 发表于 2020-5-6 22:00 | 只看该作者
我的管脚都不是接外部中断的。。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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