標(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ī)源碼:
  1. #include "reg51.h"
  2. #define COUNT_50MS 500 //focs=12MHz T=1us 50ms gcd:50ms的倍數(shù)
  3. #define D_OPEN  1      //開燈
  4. #define D_CLOSE !D_OPEN        //關(guān)燈
  5. sbit D=P0^0;  //燈輸出控制,高電平有效
  6. sbit OPCON=P1^2;//光照檢測(cè)  ,低電平有效(晚上)
  7. sbit Key0=P1^0;
  8. sbit Key1=P1^1;
  9. //結(jié)構(gòu)體類型聲明1
  10. struct IALA
  11. {
  12.         unsigned char gcd;        //各時(shí)間間隔最大公約數(shù)
  13.         unsigned char state[6]; //無符號(hào)字符型時(shí)間常數(shù)
  14. };
  15. unsigned int State[6];
  16. //結(jié)構(gòu)體全局變量定義,code:常數(shù)
  17. struct IALA code IALA4[4]={
  18.        
  19.         { 0,0,0,0,0,0,0},
  20.         {10,1,3,0,0,0,0},
  21.         {10,1,1,1,7,0,0},
  22.         {10,1,2,1,2,1,5}
  23. };
  24. //T0_初始化函數(shù)
  25. void T0_Init(void)
  26. {
  27.         TMOD=(TMOD&0xf0)|0x01;
  28.         TH0=(65536-COUNT_50MS)/256;
  29.         TL0=(65536-COUNT_50MS)%256;
  30.         ET0=1; //中斷使能
  31.         EA=1;
  32.         TR0=1; //T0啟動(dòng)       
  33. }
  34. //T0_ISR程序
  35. unsigned int it=0;
  36. void T0_ISR(void) interrupt 1
  37. {
  38.         unsigned char j;
  39.         TH0=(65536-COUNT_50MS)/256;
  40.         TL0=(65536-COUNT_50MS)%256;
  41.         if(OPCON==0)//黑夜、暗照度
  42.           {
  43.                 it++;                
  44.                 for(j=0;j<6;j++)
  45.                 { if(it==State[j])
  46.                         D=(j%2)?D_OPEN:D_CLOSE; //判斷是開燈還是關(guān)燈狀態(tài)        
  47.             }
  48.                 if(it>=State[5])
  49.                 {
  50.                   it=0;
  51.                 }         
  52.         }
  53.     else          //白天、亮照度
  54.           {
  55.            D=D_CLOSE;
  56.            it = 0;
  57.           }       

  58. }
  59. //按鍵判斷
  60. unsigned char GetKey()
  61. {                               
  62.         unsigned char key;
  63.         if(Key1==0&&Key0==0)
  64.         {
  65.                 key=0;
  66.         }
  67.         else if(Key1==0&&Key0==1)
  68.         {
  69.                 key=1;
  70.         }               
  71.         else if(Key1==1&&Key0==0)
  72.         {
  73.                 key=2;
  74.         }
  75.         else if(Key1==1&&Key0==1)
  76.         {
  77.                 key=3;       
  78.         }
  79.         return(key);
  80. }
  81. void main(void)
  82. {       
  83.         unsigned char key,pre_key=0,i;
  84.         unsigned int sum;
  85.         T0_Init();
  86.         D=0;
  87.         while(1)       
  88.         {
  89.             key=GetKey();                  //獲取key1、Key0特征碼
  90.                 if(key!=pre_key)        //若有新的按鍵,載入控?zé)魰r(shí)間
  91.                 {
  92.                           sum=0;
  93.                           for(i=0;i<6;i++)
  94.                           {       
  95.                                 sum=sum+IALA4[key].gcd*IALA4[key].state[i];
  96.                                 State[i]=sum;       
  97.                           }
  98.                 }               
  99.                 pre_key=key;
  100.         }
  101. }
復(fù)制代碼

完整的Word格式文檔51黑下載地址:
實(shí)驗(yàn)三 航標(biāo)燈.doc (178.5 KB, 下載次數(shù): 19)







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1