久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

用51單片機(jī)做的小旋磁美容儀

作者:51hei   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2009年08月19日   【字體:

  給大家發(fā)一個(gè)用單片機(jī)做的小旋磁美容儀的c語(yǔ)言代碼。99分鐘可調(diào)倒計(jì)顯示控制關(guān)機(jī)設(shè)置,同時(shí),有蜂鳴器倒數(shù)十秒蜂叫及按鍵時(shí)鳴叫,時(shí)間顯示數(shù)碼管里有小數(shù)點(diǎn)按一秒周期閃爍的程序控制,按鍵為P1端中的P1。0及P1。1做為行線,P1。2~P1。5為列線,按鍵分別為開(kāi)關(guān)機(jī),時(shí)間加減,占空比調(diào)節(jié)加減鍵兩組共四個(gè)按鍵,有兩路實(shí)際輸出占空比端口,標(biāo)號(hào)為:hotout  和 xuanout 兩個(gè)引腳,為數(shù)碼管顯示檔位狀態(tài),控制時(shí)以外部硬件低電平時(shí)間長(zhǎng)使輸出功率大的基準(zhǔn)而進(jìn)行調(diào)節(jié),0檔時(shí)輸出為高電平,8檔(最高檔)時(shí)輸出為低電平低,其它從1~7檔時(shí),以占空比為準(zhǔn)。且每一檔的增量不是線性的,只為配合外部硬件的啟動(dòng)電平要求,低幾檔導(dǎo)通量較大些。本程序?yàn)閱纹瑱C(jī)網(wǎng)http://www.zg4o1577.cn 會(huì)員“狼圖騰”嘔心瀝血的的原創(chuàng)作品,所有的c語(yǔ)言代碼都已經(jīng)測(cè)試通過(guò),并且做成了成品投入到了實(shí)際的使用中,希望能對(duì)大家有所幫助有問(wèn)題可聯(lián)系作者幫忙處理的。
#include < reg51.H>
#define uint unsigned int
#define uchar unsigned char
#define duan P0
#define ton 2
#define t 20
uchar code tab[]={0x09,0x5f,0x2a,0x1a,0x5c,0x98,0x88,0x1f,0x08,0x18};
sbit xsd_display=P0^3;//小數(shù)點(diǎn)的位顯示,根據(jù)實(shí)際情況決定
sbit shila=P2^4;
sbit gela=P2^5;
sbit hotla=P2^6;
sbit xuanla=P2^7;
sbit hotout=P2^0;
sbit xuanout=P2^1;
sbit fmqbit=P2^2;
bit openbit,xsd;//開(kāi)關(guān)機(jī)、小數(shù)點(diǎn)、加熱、旋轉(zhuǎn)標(biāo)志位
uchar time;      //分鐘值
uint d;                //計(jì)分鐘變量
bit fmq;
uchar hot,hot1,hotoff,hotoff1,hotled; //加熱波形處理相關(guān)變量
uchar xuan,xuan1,xuanoff,xuanoff1,xuanled; //旋轉(zhuǎn)相關(guān)變量
bit biaobit0,biaobit1,biaobit2,biaobit3;// 控制波形占空時(shí)的循環(huán)條件標(biāo)志位//以下為延時(shí)子程序
void delay(uint a)
{
uchar c,d;
for(c=a;c>0;c--)
  for(d=80;d>0;d--);
}
//以下為顯示函數(shù)
void display(uchar x,uchar y,uchar k)
{
uchar ge,shi;  //對(duì)傳遞時(shí)間函數(shù)進(jìn)行分解
shi=x/10;
ge=x%10; duan=tab[shi];
shila=0;
delay(2);
shila=1; duan=tab[ge];
gela=0;
xsd_display=xsd;
delay(2);
gela=1; duan=tab[y];
hotla=0;
delay(2);
hotla=1; duan=tab[k];
xuanla=0;
delay(2);
xuanla=1;//  duan_display=0xff;
}//以下為變量改變處理程序
void bianlian(uchar xy)
{
switch(xy)
  {
   case 2: d=0;  //有按鍵按動(dòng)時(shí)即使計(jì)數(shù)值初始為0
     if(time!=99)
     {
      time++;
     }
     break;   case 3: d=0;   //有按鍵按動(dòng)時(shí)即使計(jì)數(shù)值初始為0
     if(time!=0)
     {
      time--;
     }
     break;   case 4: if(hotled!=8)
     {
      hotled++;
      if(hotled==8)
      biaobit0=1;
      else
      biaobit0=0;
      if(hotled==0)
      biaobit1=1;
      else
      biaobit1=0;
       if(hotled<5)
      {
       hot=hot+3;
      }
      else
      {
       hot=hot+ton;
      }      hot1=hot;
      hotoff=t-hot;
      hotoff1=hotoff;
     }
     break;   case 5:if(hotled!=0)
     {  
      hotled--;      if(hotled==8)
      biaobit0=1;
      else
      biaobit0=0;      if(hotled==0)
      biaobit1=1;
      else
      biaobit1=0;      if(hotled<4)
      {
       hot=hot-3;
      }
      else
      {
       hot=hot-ton;
      }      hot1=hot;
      hotoff=t-hot;
      hotoff1=hotoff;
           }
     break;
   case 6:
       if(xuanled!=8)
     {
      xuanled++;      if(xuanled==8)
      biaobit2=1;
      else
      biaobit2=0;
      if(xuanled==0)
      biaobit3=1;
      else
      biaobit3=0;      if(xuanled==1)
      xuan=xuan+6;
      else
      xuan=xuan+ton;      xuan1=xuan;
      xuanoff=t-xuan;
      xuanoff1=xuanoff;
     }
     break;
   case 7:
     if(xuanled!=0)
     {      if(xuanled==1)
      xuan=xuan-6;
      else
      xuan=xuan-ton;      xuan1=xuan;
      xuanoff=t-xuan;
      xuanoff1=xuanoff;
      xuanled--;      if(xuanled==8)
      biaobit2=1;
      else
      biaobit2=0;
      if(xuanled==0)
      biaobit3=1;
      else
      biaobit3=0;     }
   default:break;
  }
}
//以下為按鍵檢測(cè)子程序
void key(void)
{
uchar num,num1=0;
uint a;
P1=0xfc;
num=P1;
if(num!=0xfc)
  {   fmqbit=0;    //檢測(cè)按鍵有輸入鍵值時(shí)使蜂鳴器鳴叫
   if(openbit!=0)
   {
   
    for(a=17;a>0;a--)
     {
      display(time,hotled,xuanled);
     }
   }
   else
   {
    for(a=200;a>0;a--)
    {
     duan=0xfe;   //此處隨便加入值
     shila=0;
     gela=0;
     hotla=0;
     xuanla=0;//打開(kāi)四路數(shù)碼管位顯示控制
     delay(1);
    }
     hotla=1;
     shila=1;
     gela=1;
     xuanla=1;//關(guān)閉四路數(shù)碼管位顯示控制
   }
   P1=0xfc;
   num=P1;
   if(num!=0xfc)
    {     P1=0xfe;
     num=P1;
     if(num!=0xfe)
      {
       switch(num)
        {
         case 0xfa: num1=7; break;//旋轉(zhuǎn)減
         case 0xf6: num1=5; break;//hot 減
         case 0xee: num1=3; break;//時(shí)間減
         case 0xde:
            if(openbit!=0)
             {
              for(a=40;a>0;a--)
              display(time,hotled,xuanled);
            }
            else
             {
              for(a=400;a>0;a--)
               {
                duan=0xfe;   //此處隨便加入值
                hotla=0;
                shila=0;
                gela=0;
                xuanla=0;//打開(kāi)四路數(shù)碼管位顯示控制
                delay(2);
               }
              hotla=1;
              shila=1;
              gela=1;
              xuanla=1;//關(guān)閉四路數(shù)碼管位顯示控制
             }
             openbit=~openbit;//改變開(kāi)關(guān)機(jī)標(biāo)志位                  
                default:break;
        }
     
      }
     else
      {
       P1=0xfd;
       num=P1;
       switch(num)   
        {
         case 0xf9: num1=6; break;
         case 0xf5: num1=4; break;
         case 0xed: num1=2; break;
         default: break;
        }       }
     if(openbit!=0)
     bianlian(num1);//開(kāi)機(jī)即可改變相關(guān)變量值,條件為開(kāi)機(jī)后使能    }
  }   P1=0xfc;
}//以下為定時(shí)0中斷程序,定時(shí)時(shí)間為50MS
void time0_int(void) interrupt 1
{
TH0=0x3c;
TL0=0xb0; //進(jìn)入裝初值
d++;
fmq=~fmq;
if(d%10==0)
xsd=~xsd;
if(d==1200)
  {
   d=0;
   if(time!=0)
   time--;          //此處停機(jī)變量處理已OK了。
   else
   openbit=0;
  
  }
}//以下為定時(shí)1中斷程序,定時(shí)時(shí)間為1000US
void time1_int(void) interrupt 3
{
TH1=0xff;
TL1=0xe0;//進(jìn)入裝初值if(openbit!=0)
  {
  
    if(hot1)
  {
   hot1--;
   if(hot1==0)
     {
      hotoff1=hotoff;
      if(biaobit0!=0)
      hotout=0;
      else hotout=1;
     }
  }
  if(hotoff1)
  {
   hotoff1--;
   if(hotoff1==0)
    {
     hot1=hot;
     if(biaobit1!=0)
     hotout=1;
     else hotout=0;
    }
  }  if(xuan1)
  {
   xuan1--;
    if(xuan1==0)
     {
      xuanoff1=xuanoff;
      if(biaobit2!=0)
      xuanout=0;
      else xuanout=1;
     }
  }
 
if(xuanoff1)
  {
   xuanoff1--;
    if(xuanoff1==0)
     {
      xuan1=xuan;
      if(biaobit3!=0)
      xuanout=1;
      else xuanout=0;
     }
  }
  
 
   
}
}
void main(void)
{
P1=0xfc;
openbit=0;//使起始狀態(tài)為停機(jī)等待狀態(tài)
TMOD=0x11;  //定義定時(shí)器工作模式
IP=0x08;   //定時(shí)器1設(shè)置為最高中斷級(jí)別
TH0=0x3c;
TL0=0xb0; //進(jìn)入裝初值
TH1=0xff;
TL1=0xe0;//進(jìn)入裝初值
ET0=1;
ET1=1;
EA=1; //定時(shí)中斷至此全部打開(kāi)開(kāi)始運(yùn)作。
while(1)
{
  hotout=1;
  xuanout=1;//將輸出都置為0輸出狀態(tài),待機(jī)狀態(tài)  TR0=0;
  TR1=0;//將返回的定時(shí)器全部關(guān)閉,避免不必要的誤動(dòng)作
  duan=0xfe;   //待機(jī)時(shí)顯示的筆段控制
  hotla=0;
  shila=0;
  gela=0;
  xuanla=0;//打開(kāi)四路數(shù)碼管位顯示控制
  delay(1);  //顯示維持時(shí)間設(shè)定
  hotla=1;
  shila=1;
  gela=1;
  xuanla=1;//關(guān)閉四路數(shù)碼管位顯示控制

  if(P1!=0xfc)
  fmqbit=0;
  else fmqbit=1;    //對(duì)按鍵掃描進(jìn)行檢測(cè),得出判斷蜂鳴器的鳴叫結(jié)果。  key();       //按鍵檢測(cè)函數(shù)調(diào)用
   if(openbit!=0)
   {
   
    d=0;       //秒鐘計(jì)時(shí)值置0狀態(tài)
    TR0=1;
    TR1=1;
    hot=0;
    hot1=hot;
    hotoff=t-hot;
    hotoff1=hotoff;  //將熱控制的初值給予設(shè)定       xuan=0;
    xuan1=xuan;
    xuanoff=t-xuan;
    xuanoff1=xuanoff;  //將旋轉(zhuǎn)控制的初值給予設(shè)定    biaobit0=0;
    biaobit1=1;
    biaobit2=0;
    biaobit3=1;    hotled=0;   //將熱輸出顯示值及狀態(tài)設(shè)置為0狀態(tài)
    xuanled=0;   //旋轉(zhuǎn),效果同上    time=30;   //時(shí)間初值設(shè)置為30分鐘整
    while(openbit!=0)
     {
           key(); //按鍵檢測(cè)函數(shù)
      if((time==0)&&(d>=1000))
      {fmqbit=xsd;}     //倒計(jì)至最后10秒時(shí)進(jìn)行鳴叫
      else
      {
       if(P1==0xfc)
       fmqbit=1;
       else fmqbit=0;    //對(duì)按鍵掃描進(jìn)行檢測(cè),得出判斷蜂鳴器的鳴叫結(jié)果。
      }
      display(time,hotled,xuanled);//調(diào)用顯示函數(shù)
     }
   }
}}
  與hotandxuan10區(qū)別于bing1 和bing0兩個(gè)變量取消,同時(shí)定時(shí)中斷1的程序體全部加以代碼優(yōu)化,解決掉原程序執(zhí)行過(guò)程中中斷停留時(shí)間過(guò)長(zhǎng),影響數(shù)碼管顯示,閃爍的問(wèn)題,同時(shí)處理掉按鍵在開(kāi)至最高檔時(shí)檢測(cè)靈敏度下降問(wèn)題.

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 精品成人在线视频 | 99精品久久久久久中文字幕 | 99久久精品免费看国产免费软件 | 综合网中文字幕 | 亚洲成人国产综合 | 少妇久久久久 | 日日夜夜精品 | 美国黄色一级片 | 亚洲福利在线观看 | 午夜影晥| 久久免费精品 | 久久国产精品偷 | 一区二区福利视频 | 中文av在线播放 | 成人在线视频网站 | 91精品成人久久 | 在线一区二区三区 | 国产精品一二区 | 欧美一二区 | 国产精品久久久久久一区二区三区 | 日韩欧美在线免费观看 | 成人免费看片网 | 亚洲视频免费在线 | 国产欧美在线 | 欧美中文字幕一区 | 精品国产一区二区三区久久久蜜月 | 成人免费观看男女羞羞视频 | 国产aⅴ| 成人精品啪啪欧美成 | 欧美一区2区三区4区公司 | 日本精品一区二区三区在线观看 | 久久这里只有精品首页 | 网色| 毛片一区| 亚洲欧美在线观看 | 日韩一区二区三区在线视频 | 久久精品亚洲精品国产欧美kt∨ | 精品国产一级 | 精品蜜桃一区二区三区 | 日韩在线日韩 | 欧美视频在线一区 |