亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
制作定時插座單片機源程序
[打印本頁]
作者:
tyftyh
時間:
2017-12-28 17:55
標題:
制作定時插座單片機源程序
/***
**項目名稱:制作定時插座
**編寫時間:2017.11.26
**使用芯片:stc12c5608ad
**時鐘頻率:使用外部時鐘頻率11.0592MHz
**簡要說明:可以定時關(guān)閉插座電源
***/
#include <stc12c5630ad.h>
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
code uint8_t TABLE_NUM[11] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
#define DefaultTiming 60
uint8_t PowerON = 0; //電源:0-關(guān)、1-開
uint8_t TimingON = 0; //定時:0-關(guān)、1-開
uint8_t Show_Update_Flag = 0; //更新數(shù)碼管顯示:0-不更新、1-需更新
uint8_t KeyScan_Update_Flag = 0; //更新按鍵值:0-沒更新、1-有更新
uint16_t Timing = 0; //定時時間
uint8_t KeyValue = 0; //按鍵值
uint8_t ShowWei = 0; //數(shù)碼管顯示位
void Timer0_Config();
void Timer1_Config();
void TurnOnPower();
void TurnOffPower();
void TurnOnTiming();
void TurnOffTiming();
void BUZZER(uint8_t type);
void Delay50ms();
void Delay500ms();
void main()
{
P1 = 0xff;
P2 = 0xf0;
P3 = 0;
Timer0_Config();
Timer1_Config();
ET0 = 1;
ET1 = 1;
EA = 1;
TurnOnPower();
while(1)
{
//按鍵處理
if(KeyScan_Update_Flag)
{
KeyScan_Update_Flag = 0;
switch(KeyValue)
{
case 1:
BUZZER(0);
if(PowerON) TurnOffPower();
else TurnOnPower();
break;
case 2:
if(Timing > 10 && TimingON) Timing -= 10;
break;
case 3:
if(TimingON) TurnOffTiming();
else if(PowerON) TurnOnTiming();
break;
case 4:
if(Timing <= 230 && TimingON) Timing += 10;
break;
}
}
//數(shù)碼管顯示
if(Show_Update_Flag)
{
Show_Update_Flag = 0;
P1 = 0xff; //斷碼
P20 = P21 = P22 = 0; //位碼
switch(ShowWei)
{
case 0:
if(TimingON) P1 = TABLE_NUM[(Timing / 100) % 10];
else P1 = TABLE_NUM[10];
P20 = 1;
break;
case 1:
if(TimingON) P1 = TABLE_NUM[(Timing / 10) % 10];
else P1 = TABLE_NUM[10];
P21 = 1;
break;
case 2:
if(TimingON) P1 = TABLE_NUM[Timing % 10];
else P1 = TABLE_NUM[10];
P22 = 1;
break;
}
}
}
}
/***TIM0配置:為數(shù)碼管顯示和鍵盤掃描提供時間間隔5ms***/
void Timer0_Config()
{
AUXR &= 0x7F; //定時器時鐘12T模式
TMOD &= 0xF0; //設(shè)置定時器模式
TMOD |= 0x01; //設(shè)置定時器模式
TL0 = 0x00; //設(shè)置定時初值
TH0 = 0xEE; //設(shè)置定時初值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0開始計時
}
/***TIM1配置:提供定時基準,每次50ms***/
void Timer1_Config()
{
AUXR &= 0xBF; //定時器時鐘12T模式
TMOD &= 0x0F; //設(shè)置定時器模式
TMOD |= 0x10; //設(shè)置定時器模式
TL1 = 0x00; //設(shè)置定時初值
TH1 = 0x4C; //設(shè)置定時初值
TF1 = 0; //清除TF1標志
TR1 = 0; //定時器1開始計時
}
/***按鍵和數(shù)碼管的掃描***/
void TIMER0() interrupt 1 using 1
{
static uint8_t _key_down = 0, _key_tempvalue = 0, _times = 0;
TL0 = 0x00;
TH0 = 0xEE;
//按鍵掃描 20ms一次
_times++;
if(_times == 4)
{
_times = 0;
if(!P24 || !P25 || !P26 || !P27)
{
if(_key_down)
{
if(!P24) _key_tempvalue = 1;
if(!P25) _key_tempvalue = 2;
if(!P26) _key_tempvalue = 3;
if(!P27) _key_tempvalue = 4;
}
else
{
_key_down = 1;
}
}
else
{
if(_key_down && _key_tempvalue) KeyValue = _key_tempvalue;
else KeyValue = 0;
if(_key_down) KeyScan_Update_Flag = 1;
_key_down = _key_tempvalue = 0;
}
}
//數(shù)碼管掃描
ShowWei = ++ShowWei > 2 ? 0 : ShowWei;
Show_Update_Flag = 1;
}
/***定時基準***/
void TIMER1() interrupt 3 using 1
{
static uint8_t _num = 0, _second_num = 0;
TL1 = 0x00;
TH1 = 0x4C;
//1秒鐘
_num++;
if(_num == 20)
{
_second_num++;
_num = 0;
}
//1分鐘
if(_second_num == 60)
{
Timing--;
_second_num = 0;
}
//定時時間到 關(guān)電關(guān)顯示關(guān)定時
if(Timing == 0)
{
TurnOffPower();
BUZZER(1);
}
}
/***開電源***/
void TurnOnPower()
{
P23 = 0;
PowerON = 1;
}
/***關(guān)電源***/
void TurnOffPower()
{
P23 = 1;
TurnOffTiming();
PowerON = 0;
}
/***開定時***/
void TurnOnTiming()
{
TR1 = 1;
Timing = DefaultTiming;
TimingON = 1;
}
/***關(guān)定時***/
void TurnOffTiming()
{
TR1 = 0;
TimingON = 0;
}
void Delay50ms() [url=]//@11.0592MHz[/url]
{
unsigned char i, j, k;
i = 3;
j = 26;
k = 223;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay500ms() [url=]//@11.0592MHz[/url]
{
unsigned char i, j, k;
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/***蜂鳴器***/
void BUZZER(uint8_t type)
{
switch(type)
{
case 0:
P34 = 1;
Delay50ms();
P34 = 0;
break;
case 1:
P1 = 0xff;
P34 = 1;
Delay500ms();
P34 = 0;
Delay500ms();
P34 = 1;
Delay500ms();
P34 = 0;
Delay500ms();
P34 = 1;
Delay500ms();
P34 = 0;
break;
}
}
復制代碼
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1