欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
帶感應的小夜燈的PIC單片機源碼(可手動控制or自動控制)
[打印本頁]
作者:
libodianzi
時間:
2018-8-25 12:14
標題:
帶感應的小夜燈的PIC單片機源碼(可手動控制or自動控制)
基于pic16f616單片機 可以手動控制 也可自動控制(開啟感應開關)
單片機源程序如下:
#include<pic.h>
#define u16 unsigned int
#define u8 unsigned char
u8 second,fen=0,miao=0,key=0,mode;
u16 adval; //3v/5v*1024=614
u16 x1=512;
bit loop1,yy1;
int pwm;
__CONFIG(0xfd94); //fdd5 RA4可以輸出主頻率的4分頻
//const u8 table[]={160,130,101,90,80};
const u8 tab[]={150,100,60,30};
void init()
{//OSCTUNE=0x0f; //修改主頻率
ADCON0=0x9d;
ADCON1=0x20;
INTCON=0xd0; //開啟總中斷 外部中斷 外設中斷
INTEDG=1; // 設置觸發中斷的條件為電平從低到高觸發
PIE1=0x41; //允許Time1中斷
TMR1L=(65536-1000)%256;
TMR1H=(65536-1000)/256;
T1CON=0x01; //使能Time1
PR2=160; //周期計數
CCP1CON=0x3c; //0011 1100單輸出 P1A被調制 1011 1100半橋輸出 P1A P1B被調制
CCPR1L=40; //脈沖寬度計數
}
void delay500us(u16 x)
{
u16 a,b;
for(a=x;a>0;a--)
for(b=20;b>0;b--);
}
void delayms(u16 x)
{
u16 a,b;
for(a=x;a>0;a--)
for(b=220;b>0;b--);
}
void beep()
{
u8 i;
for(i=255;i>0;i--)
{
delay500us(8);
RA1=!RA1;
}
RA1=0;
}
void ledstate()
{ u8 i;
RC0=0;
loop1=1;
while(loop1)
{
for(i=3;i>0;i--)
{ beep();
RC0=!RC0;
delayms(1000);
}
loop1=0;
}
}
void KEY_Scan(void) //鍵值掃描
{
if((RC2==1) || (RC1=1) || (RA4==1) || (RA5==1))
{
delayms(50);//去抖動
if(RC2==1) //A led模式與開關
{
delayms(200);
delayms(200);
delayms(200);
delayms(200);
if(RC2==1) key=!key; //0 on 1 off
else mode=!mode; //0 手動模式 1 自動模式
while(RC2);
}
else if(RC1==1) //B 音頻開關
{
RC4=!RC4;
while(RC1!=0);
}
else if(RA4==1) //C 亮度加
{
if(mode==0)
{
pwm++;
if(pwm>=3){pwm=3;beep();}
while(RA4);
}
}
else if(RA5==1) //D 亮度減
{
if(mode==0)
{
pwm--;
if(pwm<1){pwm=0;beep();}
while(RA5);
}
}
}
}
void pwm_out()
{
T2CON=0x04;
CCP1CON=0x3c;
RC0=1;
RA0=0;
delayms(5);
CCPR1L=tab[pwm];
delayms(4);
}
void pwm_out1()
{
T2CON=0x04;
CCP1CON=0x3c;
RC0=1;
RA0=1;
delayms(5);
if(yy1)
{
CCPR1L=tab[3];
delayms(4);
}
else
{
CCPR1L=tab[0];
delayms(4);
}
}
void stopstate() // pwm 停止輸出
{
T2CON=0x00;
CCP1CON=0x00;
RC0=0;
RA0=0;
RC5=1;
}
void interrupt time1(void)
{
if(TMR1IE&&TMR1IF) //定時器1用于產生秒信號 定時時間為25ms
{
TMR1IF=0;
TMR1L=(65536-50000)%256;
TMR1H=(65536-50000)/256;
second++;
if(second>=40) //40*25ms =1000ms
{ second=0;
if(miao++>=60)
{ miao=0;
fen++;
if(fen>=60)
fen=0;
}
}
}
if(INTE&&INTF) ////外部中斷
{
while(RA2==1)
{
KEY_Scan();
}
INTF=0;
}
if(ADIE && ADIF)
{
ADIF=0; // A/D標志位清零
adval=ADRESH;//00000000 00000011
adval=adval<<8|ADRESL;//00000011 11111111
if(adval>x1) yy1=1;
else yy1=0;
GODONE=1;
}
}
void main()
{
TRISC=0x00;
TRISC|=0x0e;
TRISA=0x00;
TRISA|=0x34;
ANSEL=0x80;
RC0=0; //電源指示
RC4=0; //繼電器
RC5=0; //PWM
RA0=0; //手動自動指示
RA1=0; //警告音
ledstate();
init();
GODONE=1;
delayms(100);
while(1)
{
if(key==0)
{
switch(mode)
{
case 0:pwm_out();
break;
case 1:pwm_out1();
break;
}
}
else stopstate();
}
}
復制代碼
所有資料51hei提供下載:
xyd.rar
(52.5 KB, 下載次數: 70)
2018-8-25 12:12 上傳
點擊文件名下載附件
程序源碼
下載積分: 黑幣 -5
作者:
janson
時間:
2018-8-31 14:47
謝謝分享,很給力。
作者:
Yunuis
時間:
2019-6-6 14:30
正是需要的
作者:
waerdeng
時間:
2019-6-22 23:02
謝謝老司機分享!
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1