?? led8.c
字號(hào):
//--------------------------------------------------
//
// 作者:閔運(yùn)華
// 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表示門己關(guān)著了
#define Tab00014 0
#define Tab00015 1
//遙控區(qū)
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;
//函數(shù)聲明
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;
//初始化遙控結(jié)構(gòu)的值
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
}
}
//延時(shí)子程序
void Tab000371Tab00038(void)
{
Tab00012 = 0;
while(Tab00012 < 5000);
}
//延時(shí)子程序
void Tab00039(void)
{
Tab00012 = 0;
while(Tab00012 < 2500);
}
//延時(shí)子程序
void Tab0003710Tab00028(void)
{
Tab00012 = 0;
while(Tab00012 < 50);
}
void Init_Sys()
{
TH0 = (0xffff - 2500)/256;//定時(shí)中斷為2.5ms
TL0 = (0xffff - 2500)%256;
TMOD = 0x01;// t0為十六位計(jì)數(shù)器
TR0 = 1; //允許時(shí)間零中斷
ET0 = 1;
TH1 = 55;
TL1 = 55;
TMOD |= 0x20;//時(shí)間計(jì)數(shù)器1的工作模式為八位自動(dòng)重裝
TR1 = 1; //允許時(shí)間零中斷
ET1 = 1;
IE0 = 1; //開外部中斷零
EX0 = 1;
IT0 = 1;// INT0低電平觸發(fā)(為1則為下降沿觸發(fā)
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;//定時(shí)中斷為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++;
//如果過了一百一十毫秒證明沒有遙控信號(hào)
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; //開總中斷
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -