📄 led8.c
字号:
//--------------------------------------------------
//
// 作者:闵运华
// qq:121758163
// Email:minyunhua163@163.com
//--------------------------------------------------
#define Support_18b20
#define Support_i2c
#define Support_led
#include <reg51.h>
#ifdef Support_led
#include <led.h>
#endif
#ifdef Support_18b20
#include <18b20.h>
#endif
#ifdef Support_i2c
#include <i2c.h>
#endif
sbit Tab00000 = P2^4;
sbit Tab00001 = P2^5;
sbit Tab00002 = P2^6;
sbit Tab00003 = P2^7;
sbit Tab00004 = P1^0;
sbit Tab00005 = P1^1;
sbit Tab00006 = P1^2;
sbit Tab00007 = P1^3;
sbit Tab00008 = P1^4;
sbit Tab00009 = P3^0;
sbit Tab00010 = P3^1;
unsigned char Tab00011;
unsigned int Tab00012;
bit Tab00013; //为1表示门己关着了
#define Tab00014 0
#define Tab00015 1
//遥控区
struct Tab00016nec{
unsigned char Tab00017;
unsigned char Tab00018;
unsigned char Tab00019;
unsigned int Tab00020;
unsigned int Tab00021;
unsigned char Tab00022;
unsigned char Tab00023;
};
struct Tab00016nec Tab00016;
#define Tab00024 (Tab00016.Tab00019 & 0x01)
#define Tab00025 Tab00016.Tab00019 &= 0x0fe;
#define Tab00026 Tab00016.Tab00019 |= 0x01;
#define Tab00027108Tab00028 (Tab00016.Tab00019 & 0x02)
#define Tab00029108Tab00028 Tab00016.Tab00019 &= 0x0fd;
#define Tab00030108Tab00028 Tab00016.Tab00019 |= 0x02;
#define Tab00031 (Tab00016.Tab00019&0x04)
#define Tab00032 Tab00016.Tab00019 &= 0x0fb;
#define Tab00033 Tab00016.Tab00019 |= 0x04;
#define Tab00034 (Tab00016.Tab00019 & 0x10)
#define Tab00035 Tab00016.Tab00019 &= 0x0ef;
#define Tab00036 Tab00016.Tab00019 |= 0x10;
//函数声明
void Tab000371Tab00038(void);
void Tab0003710Tab00028(void);
void Init_Sys();
void Tab00039(void);
void main(void)
{
unsigned char Tab00040 = 0;
Init_Sys();
Tab00041(0x1234);
Tab00011 = 0;
//初始化遥控结构的值
Tab00016.Tab00017 = 0;
Tab00016.Tab00018 = 0;
Tab00016.Tab00019 = 0;
Tab00016.Tab00020 = 0;
Tab00016.Tab00021 = 0;
Tab00016.Tab00022 = 0;
Tab00016.Tab00023 = 0;
while(1)
{
Tab00039();
#ifdef Support_18b20
//显示温度
if(Tab00016.Tab00019 == 0 )
{
Tab00044(Tab00045());
}
#endif
}
}
//延时子程序
void Tab000371Tab00038(void)
{
Tab00012 = 0;
while(Tab00012 < 5000);
}
//延时子程序
void Tab00039(void)
{
Tab00012 = 0;
while(Tab00012 < 2500);
}
//延时子程序
void Tab0003710Tab00028(void)
{
Tab00012 = 0;
while(Tab00012 < 50);
}
void Init_Sys()
{
TH0 = (0xffff - 2500)/256;//定时中断为2.5ms
TL0 = (0xffff - 2500)%256;
TMOD = 0x01;// t0为十六位计数器
TR0 = 1; //允许时间零中断
ET0 = 1;
TH1 = 55;
TL1 = 55;
TMOD |= 0x20;//时间计数器1的工作模式为八位自动重装
TR1 = 1; //允许时间零中断
ET1 = 1;
IE0 = 1; //开外部中断零
EX0 = 1;
IT0 = 1;// INT0低电平触发(为1则为下降沿触发
EA = 1; //开总中断
}
//外部中断零
void ex0_int(void) interrupt 0
{
//EA = 0; //
Tab00016.Tab00018 = 0;
if(Tab00024)
{
if(Tab00016.Tab00017 <= (9000 + 4500 + 1000)/200 && Tab00016.Tab00017 >= (9000 - 1000 )/200)
{
Tab00025;
Tab00033;
}
}
else if(Tab00031)
{
if(Tab00016.Tab00017 <= (2250 + 400)/200 && Tab00016.Tab00017 >= (1125 - 400)/200)
{
if(Tab00016.Tab00022 > 15)
Tab00016.Tab00021 >>= 1;
else
Tab00016.Tab00020 >>= 1;
if(Tab00016.Tab00017 >= (2250 + 1125)/200/2)
{
if(Tab00016.Tab00022 > 15)
Tab00016.Tab00021 |= 0x8000;
else
Tab00016.Tab00020 |= 0x8000;
}
Tab00016.Tab00022++;
if(Tab00016.Tab00022 == 32)
{
Tab00030108Tab00028;
Tab00032;
Tab00016.Tab00023 = 0;
Tab00041(((Tab00016.Tab00020 & 0xff)<< 8) | (Tab00016.Tab00021 &0xff));
Tab00016.Tab00022 = 0;
Tab00036;
}
}
else
{
Tab00016.Tab00019 = 0;
Tab00026;
Tab00016.Tab00022 = 0;
}
}
else if(Tab00027108Tab00028)
{
if(Tab00016.Tab00017 >= (9000 + 2250 - 1000)/200)
{
Tab00016.Tab00023++;
Tab00041(((Tab00016.Tab00020 & 0xff)<< 8) | (Tab00016.Tab00021 &0xff));
if(Tab00016.Tab00023 > 10)
{
Tab00016.Tab00023 = 0;
}
Tab00035;
}
else
{
Tab00016.Tab00019 = 0;
Tab00026;
Tab00016.Tab00022 = 0;
}
}
else
{
Tab00026;
}
Tab00016.Tab00017 = 0;
//EA = 1; //开总中断
}
//每2.5毫秒中断一次
void time0(void) interrupt 1
{
//EA = 0; //
TH0 = (0xffff - 2500)/256;//定时中断为2.5ms
TL0 = (0xffff - 2500)%256;
Tab00011++;
#if 1
Tab00000 = 0;
Tab00001 = 0;
Tab00002 = 0;
Tab00003 = 0;
P0=Tab00049[Tab00011-1];
switch(Tab00011)
{
case 1:
Tab00000 = 1;
break;
case 2:
Tab00001 = 1;
break;
case 3:
Tab00002 = 1;
break;
case 4:
Tab00003 = 1;
Tab00011 = 0;
break;
default:
break;
}
#endif
Tab00016.Tab00018++;
//如果过了一百一十毫秒证明没有遥控信号
if(Tab00016.Tab00018 > 50)
{
if(Tab00016.Tab00019)
Tab00016.Tab00019 = 0;
Tab00016.Tab00018 = 0;
}
//EA = 1; //开总中断
}
//每200us中断一次
void time1(void) interrupt 3
{
//EA = 0; //
Tab00016.Tab00017 ++;
Tab00012++;
//EA = 1; //开总中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -