專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

單片機制作媚眼激活儀的c代碼

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2009年09月01日   【字體:

這是一個完整的用51系列單片機做的媚眼激活儀的代碼,有這方面需要的朋友可以看看,代碼已經(jīng)測試成功。
/*
項目名稱:單片機媚眼激活儀器
相關(guān)知識點:單片機驅(qū)動發(fā)熱器件,數(shù)碼管顯示,按鍵操作等。
程序開發(fā):http://www.torrancerestoration.com單片機教程網(wǎng)。
*/
#include < reg51.H>
#define uint unsigned int
#define uchar unsigned char
#define duan P0  //將P1口段顯示定義為duan標(biāo)號
#define keyio P3 //將P3口設(shè)為按鍵檢測的端口

uchar time,guannum,guantime1,guantime2;//time為分鐘值,光顯示時間值
uint b;     //50MS為1次,則1分鐘為1200次即可
bit xsd,onandoff;  //小數(shù)點閃爍位變量,開關(guān)機變量標(biāo)志位

sbit xuanled=P2^3;
sbit guanled=P2^5;
sbit rfled=P2^7;//三個指示燈位控制
sbit xsdbit=P0^6;// 小數(shù)點實際硬件輸出引腳定義
sbit gewela=P2^0;//個位數(shù)碼管位控制
sbit shiwela=P2^1;//十位數(shù)碼管鎖定位控制
sbit guanout=P1^0;//光譜輸出
sbit rfout=P1^1;    //RF發(fā)熱頭輸驅(qū)動
sbit xuanout=P1^2;  //旋磁輸出
sbit fmqout=P1^3;


uchar code tab[]={0x48,0xee,0x54,0x64,0xe2,0x61,0x41,0xec,0x40,0x60,0xf7};//數(shù)碼管段顯示編碼0~9,待編寫
void chushi(void);   //進入主函數(shù)時初始化
void key(void);      //按鍵檢測
void display(uchar time);//數(shù)碼管顯示處理程序
void chushi1(void);  //進行大循環(huán)函數(shù)初始化處理

void delay(uchar num)//延時模塊程序
{
  uchar c,d;
   for(c=num;c>0;c--)
     for(d=40;d>0;d--);
}


void main()           //主函數(shù)程序體
{
  uchar a;
  chushi();
 
  while(1)
   {
     chushi1();
     key();      //按鍵檢測
  if(keyio!=0xff)
  fmqout=0;
  else fmqout=1;
  if(onandoff!=0)
   {
     for(a=100;a>0;a--)
     {
      duan=tab[10];  //開段顯示,顯示中間筆段
      gewela=0;
      shiwela=0;
      delay(10);
      gewela=1;
      shiwela=1;
     }
    
           while(onandoff!=0)
         {
           display(time);
           key();
        if(time==0&&b>=1000)
       fmqout=xsd;
        else if(keyio==0xff)
         fmqout=1;
          else fmqout=0;
    
          }
      for(a=200;a>0;a--)
      display(time);
   }
   }
   
}

void time0() interrupt 1
{
  TH0=0x3c;
  TL0=0xb0;
  b++;
  if(b==1200)
   {
   b=0;
   if(time!=0)
    time--;
   else onandoff=0;   //置零標(biāo)志位
  }

     if(b%10==0)
  xsd=~xsd;        //小數(shù)點的位變量按1S的周期進行變化
  if(guannum==2||guannum==3)
   {
    guantime2--;
     if(guantime2==0)
      {
       guantime2=guantime1;
       guanout=~guanout;
      }
   }
}

void chushi(void) //進主MAIN函數(shù)體時直接初始化
{
  TMOD=0x01;  //定時器定時模式
  TH0=0x3c;
  TL0=0xb0;
  ET0=1;
  EA=1;
  TR0=1;
  xuanled=1;
  guanled=1;
  rfled=1;   
}

void chushi1(void) //對大循環(huán)的初始化
{
 time=30;    //開機時時間初值為30分鐘

  guanout=0;   //光譜輸出為低電平
 rfout=0;      //RF發(fā)熱頭輸驅(qū)動為低電平
 xuanout=0;    //旋磁輸出低電平
 guannum=0;   //待機時,光譜為0狀態(tài)

  xuanled=1;
  guanled=1;
  rfled=1;   

    
 duan=tab[10];  //開段顯示,顯示中間筆段
 gewela=0;
 shiwela=0;
 delay(2);
 gewela=1;
 shiwela=1;
}


void key(void)  //按鍵檢測模塊
{
 uchar a,num1;
 keyio=0xff;
 if(keyio!=0xff)
  {
 fmqout=0;
   if(onandoff!=0)
    {
     for(a=100;a>0;a--)
     display(time);
    }
   else
    {  for(a=20;a>0;a--)
        {
         duan=tab[10];  //開段顯示,顯示中間筆段
        gewela=0;
        shiwela=0;
        delay(2);
        gewela=1;
        shiwela=1;
        }
    }
   if(keyio!=0xff)
    {
     num1=keyio;
     switch(num1)
      {
       case 0xfe: onandoff=~onandoff;       //開關(guān)機
          break;

       case 0xfd: b=0;
          if((onandoff!=0)&&(time!=99)) //時間加
           time++;
          break;

       case 0xfb: b=0;
          if((onandoff!=0)&&(time!=0))  //時間減
           time--;
          break;
      
       case 0xf7: if(onandoff!=0)
           {
            xuanout=~xuanout;         //旋磁轉(zhuǎn)動變量變化
            if(xuanout!=0)
             xuanled=0;
            else xuanled=1;
           }
          break;

       case 0xef: if(onandoff!=0)      //光譜輸出變量變化
           {
            guannum++;
            if(guannum==4)
            guannum=0;

            if(guannum!=0)
             guanled=0;
            else guanled=1;
          
   if(guannum==1)
    guanout=1;
     else if(guannum==2)
      guantime1=guantime2=15;
       else if(guannum==3)
        guantime1=guantime2=8;
         else guanout=0;

   }
          break;
       case 0xdf: if(onandoff!=0)       //RF發(fā)熱變量變化
           {
            rfout=~rfout;
            if(rfout!=0)
             rfled=0;
             else rfled=1;
           }
          break;
       default:break;


      }    
    }
   
  }
}


void display(uchar min)//數(shù)碼管顯示模塊
{
 uchar ge,shi;
 shi=min/10;
 ge=min%10;

 duan=tab[shi];
 shiwela=0;
 delay(5);
 shiwela=1;

 duan=tab[ge];
 xsdbit=xsd;
 gewela=0;
 delay(5);
 gewela=1;  
}
 

關(guān)閉窗口

相關(guān)文章