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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7110|回復: 5
收起左側

C51單片機控制40w調光電源C語言程序

[復制鏈接]
ID:51707 發表于 2013-7-11 02:04 | 顯示全部樓層 |閱讀模式
C51單片機控制40w調光電源C語言程序,12M晶振,500Hz 2ms,1000Hz 1ms,300Hz 3.3ms,330Hz 3ms 。3ms為一個周期,30us中斷一次,共可以有100次中斷, 中斷次數n即占空比D,調光分3檔,33% 66% 100%。
#include <REG51.H>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

/************* 1、紅外遙控 *****************/
uchar code table_duan[16]=
{
0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x7C,0x39,0x5E,0x79,0x71
};

uchar code table_wei[8]=
{
0xE3,0xE7,0xEB,0xEF,
0xF3,0xF7,0xFB,0xFF
};

#define Imax  14000
#define Imin  8000
#define Inum1 1450
#define Inum2 700
#define Inum3 3000

uchar Im[4]={0x00,0x00,0x00,0x00};
uchar show[2]={0,0};
ulong mm,Tc;
uchar IrOK;
uchar ff;
uchar t_display;

/************* 1、紅外遙控 *****************/

uchar aa,bb,cc,ss;

#define D33  3     //調光等級
#define D66  7
#define D100 16

uchar D,n,pwmoff,njk,jkdelay,spkn,spkxx,spkm,spkopen,spkclose;
sbit pwm1=P3^0;//外部中斷0 P3.2  IR
sbit pwm2=P3^4;
sbit jk4=P3^7; //大
sbit jk3=P1^0; //中
sbit jk2=P1^5; //小
sbit jk1=P1^7; //ON/OFF
sbit spk1=P3^1;
void delay(uint z)
{   
  uint x,y; //x,y為局部變量,只在當前函數出現并有效
  for(x=z;x>0;x--)
      for(y=200;y>0;y--);
}

//外部中斷解碼程序
void IR_code(void)interrupt 0 using 1     //P3^2 外部中斷0
{
Tc=TH0*256+TL0;    //提取中斷時間間隔長
TH0=0;
TL0=0;
if(Tc>Imin&&Tc<Imax) //Imin=8000  Imax=14000;
{
mm=0;
ff=1;
return; //直接跳出中斷,無返回值 (不執行下個if)
}
if(ff==1) //ff=1找到啟始碼
{
if(Tc>Inum1&&Tc<Inum3) //Inum1=1450  Inum3=3000;
{
Im[mm/8]=Im[mm/8]>>1|0x80;    // | 按位“或” 0x80=10000000
mm++;   
}
if(Tc>Inum2&&Tc<Inum1) //Inum2=700  Inum1=1450;
{
Im[mm/8]=Im[mm/8]>>1; //取碼
mm++;   
}
     if(mm==32)
{
mm=0;
ff=0;
if(Im[2]==~Im[3])
{
IrOK=1;
}
else {IrOK=0;} //取完碼后判斷讀碼是否正確
}
///////準備讀下一碼
}
}

//定時中斷1
void timer1() interrupt 3 using 2    //定時器1中斷
{
     TH1=(65536-200)/256;
TL1=(65536-200)%256;
t_display++;
n++;
if(n==16)   
n=0; //n=16時周期約3.3ms,300Hz   

if(spkopen==1)    //開蜂鳴器
       {
    spk1=0;
    spkn++;
if(spkn==150)     //響一次
{
      spkn=0;
spk1=1;    //關蜂鳴器
spkm--;    //響的次數spkm
     if(spkm==0)
  {
spkopen=0;
     spkclose=0;   
  }
else {spkopen=0; spkclose=1; }
}
  }
   
if(spkclose==1)     
       {
         spkn++;
if(spkn==150)
{
spkopen=1;    //開蜂鳴器
spkclose=0;   
}

  }     

if(jkdelay==1)
{
njk++;
       if(njk==150)
{
njk=0; //n=150時約30ms,繼電器安全動作時間   
     switch (spkxx)
{
case 0x1c:jkdelay=0;jk2=0;jk1=0;
       break;
case 0x0d:jkdelay=0;jk3=0;jk1=0;
       break;
case 0x0e:jkdelay=0;jk4=0;jk1=0;
       break;
default:
break;
   }
}     }

if(aa==1)
bb++; //第二步,去抖計數。
}

void start()
{
t_display=0;

aa=0;
bb=0;
cc=0;
ss=0;
}

void pwm()
{
if(pwmoff==0)
{
if(n<=D)
{
     pwm1=0;
pwm2=0;
}
if(n>D)
{
     pwm1=1;
pwm2=1;
}
}
}


void main()
{
    delay(100);
pwm1=1;//
pwm2=1;//
jk4=1; //大
jk3=1; //中
jk2=1; //小
jk1=1; //ON/OFF
spk1=1;
D=D100;

start();
mm=0;
ff=0;
IT0=1; //外部中斷0下降沿觸發
EX0=1; //開外部中斷0 P3^2 外部中斷0    ,P3^3 外部中斷1
EA=1;  //開總中斷
TMOD=0x11; //0x11=00010001 設置T0、T1為16位定時器
TH0=0;
TL0=0;
TR0=1; //開T0計時

TH1=(65536-100)/256;
TL1=(65536-100)%256;
ET1=1;
TR1=1;

while(1)
{
if(IrOK==1)
{
show[1]=Im[2]&0x0f;     //取鍵碼的低四位 0x0f=00001111;
show[0]=Im[2]>>4;     //取鍵碼的高四位
if(Im[2]==spkxx)  
                      {spkm=2;}     //設置蜂鳴器響的次數
else {spkm=1;}
      
switch (Im[2])
{
case 0x04:spkopen=1;pwmoff=1;pwm1=1;pwm2=1;    //關燈
break;
case 0x10:spkopen=1;pwmoff=0;D=D33;
break;
case 0x0a:spkopen=1;pwmoff=0;D=D66;
break;
case 0x03:spkopen=1;pwmoff=0;D=D100;
       break;
case 0x48:spkopen=1;jk1=1;    //關電機   其實3個繼電器就能搞定了jk2=0;jk3=0;jk4=0;
       break;   
case 0x1c:spkopen=1;jkdelay=1;jk2=1;jk3=1;jk4=1;
       break;
case 0x0d:spkopen=1;jkdelay=1;jk2=1;jk3=1;jk4=1;
       break;
case 0x0e:spkopen=1;jkdelay=1;jk2=1;jk3=1;jk4=1;
       break;
default:
break;
   }
IrOK=0;
                spkxx=Im[2];
Im[2]=0xff;   
}
pwm();
           }   

}
回復

使用道具 舉報

ID:55601 發表于 2013-10-3 16:56 | 顯示全部樓層
好東東,學習中
回復

使用道具 舉報

ID:61326 發表于 2014-5-4 14:17 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:61869 發表于 2014-5-16 09:29 | 顯示全部樓層
回復

使用道具 舉報

ID:75280 發表于 2016-7-16 08:38 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:272625 發表于 2018-1-24 09:16 | 顯示全部樓層
好資料,樓主有仿真圖嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产资源在线播放 | 午夜影院在线观看视频 | 久久综合伊人 | 超碰av免费| 久久成人免费视频 | 在线永久看片免费的视频 | 日日干夜夜干 | 欧美a级成人淫片免费看 | 精品国产一级 | 成人午夜电影网 | 国产亚洲精品综合一区 | 午夜影院在线 | 古装人性做爰av网站 | 国产精久久久久久久妇剪断 | 国产成人免费在线 | 国产精品99久久久久久大便 | 男女污污动态图 | 日本在线视频中文字幕 | 国产一区二区三区四区三区四 | 日韩在线国产 | 久久精品网| 男人天堂免费在线 | 日本在线视频不卡 | 99re6在线视频精品免费 | 成人欧美一区二区三区在线播放 | 欧美一区二区 | 一级黄色影片在线观看 | 全免费a级毛片免费看视频免 | 成人免费黄视频 | 午夜手机在线 | 91久色| 久久99精品久久久 | 蜜桃一区二区三区 | 国产成人久久精品一区二区三区 | 最新中文字幕在线 | 一区二区三区国产精品 | 亚洲高清在线观看 | av在线一区二区三区 | 亚卅毛片 | 在线观看深夜视频 | 成人小视频在线观看 |