標(biāo)題:
基于51單片機(jī)的航標(biāo)燈設(shè)計(jì)
[打印本頁]
作者:
ZB0717226
時(shí)間:
2018-6-25 01:08
標(biāo)題:
基于51單片機(jī)的航標(biāo)燈設(shè)計(jì)
基于51單片機(jī)的航標(biāo)燈
硬件部分
實(shí)驗(yàn)原理圖
示波器模擬波形
①第一種波形
Key1置’0’ Key0置’0’
②第二種波形
Key1置’0’ Key0置’1’
③第三種波形
Key1置’1’ Key0置’0’
④第四種波形
Key1置’1’ Key0置’1’
單片機(jī)源碼:
#include "reg51.h"
#define COUNT_50MS 500 //focs=12MHz T=1us 50ms gcd:50ms的倍數(shù)
#define D_OPEN 1 //開燈
#define D_CLOSE !D_OPEN //關(guān)燈
sbit D=P0^0; //燈輸出控制,高電平有效
sbit OPCON=P1^2;//光照檢測(cè) ,低電平有效(晚上)
sbit Key0=P1^0;
sbit Key1=P1^1;
//結(jié)構(gòu)體類型聲明1
struct IALA
{
unsigned char gcd; //各時(shí)間間隔最大公約數(shù)
unsigned char state[6]; //無符號(hào)字符型時(shí)間常數(shù)
};
unsigned int State[6];
//結(jié)構(gòu)體全局變量定義,code:常數(shù)
struct IALA code IALA4[4]={
{ 0,0,0,0,0,0,0},
{10,1,3,0,0,0,0},
{10,1,1,1,7,0,0},
{10,1,2,1,2,1,5}
};
//T0_初始化函數(shù)
void T0_Init(void)
{
TMOD=(TMOD&0xf0)|0x01;
TH0=(65536-COUNT_50MS)/256;
TL0=(65536-COUNT_50MS)%256;
ET0=1; //中斷使能
EA=1;
TR0=1; //T0啟動(dòng)
}
//T0_ISR程序
unsigned int it=0;
void T0_ISR(void) interrupt 1
{
unsigned char j;
TH0=(65536-COUNT_50MS)/256;
TL0=(65536-COUNT_50MS)%256;
if(OPCON==0)//黑夜、暗照度
{
it++;
for(j=0;j<6;j++)
{ if(it==State[j])
D=(j%2)?D_OPEN:D_CLOSE; //判斷是開燈還是關(guān)燈狀態(tài)
}
if(it>=State[5])
{
it=0;
}
}
else //白天、亮照度
{
D=D_CLOSE;
it = 0;
}
}
//按鍵判斷
unsigned char GetKey()
{
unsigned char key;
if(Key1==0&&Key0==0)
{
key=0;
}
else if(Key1==0&&Key0==1)
{
key=1;
}
else if(Key1==1&&Key0==0)
{
key=2;
}
else if(Key1==1&&Key0==1)
{
key=3;
}
return(key);
}
void main(void)
{
unsigned char key,pre_key=0,i;
unsigned int sum;
T0_Init();
D=0;
while(1)
{
key=GetKey(); //獲取key1、Key0特征碼
if(key!=pre_key) //若有新的按鍵,載入控?zé)魰r(shí)間
{
sum=0;
for(i=0;i<6;i++)
{
sum=sum+IALA4[key].gcd*IALA4[key].state[i];
State[i]=sum;
}
}
pre_key=key;
}
}
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
實(shí)驗(yàn)三 航標(biāo)燈.doc
(178.5 KB, 下載次數(shù): 19)
2018-6-25 01:07 上傳
點(diǎn)擊文件名下載附件
航標(biāo)燈
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1