历史上的今天
今天是:2024年10月25日(星期五)
2019年10月25日 | 带感应的小夜灯的PIC单片机源码(可手动控制or自动控制)
2019-10-25 来源:51hei
#include #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(); } }
史海拾趣
|
请教高手一个关于驱动自动安装的问题: 我的驱动程序以及inf文件利用系统的安装向导可以安装成功,但是现在我需要做一个驱动自动安装包,在插上我的usb设备的时候我的驱动可以安装成功,但是当我不插上设备的时候安装时,最后程序在调用UpdateDriv ...… 查看全部问答> |
|
☼☼合作招募中:有基于数据采集器和无线网络系统集成经验的朋友,请进!☼☼ 有基于RFID、条码和无线网络集成应用的成熟产品,比如仓储无线作业系统、MES采集系统,生产追溯系统等等,希望将产品推向市场的,请联系我,我们一起合作,最好是在深圳或者广东地区的朋友。QQ:151600588,请注明\"系统合作\"!Email:skyone_yao@163. ...… 查看全部问答> |
|
毕业设计做基于zigbee的太阳能照明系统,但是现在完全不知道zigbee怎么入门 什么cc2430、协议、网络呀一头雾水 请教各位大大zigbee入门步骤(最好列一个顺序表如步骤一:……步骤二:……),本人只懂得单片机的C语言编 ...… 查看全部问答> |
|
fpga能配置出8个以上的串口(usart)吗? 有没有什么限制呢? 我对fpga不是很了解,所以希望大家帮帮忙。谢谢了。 [ 本帖最后由 j12211221 于 2012-11-15 14:29 编辑 ]… 查看全部问答> |
|
五、定时器 定时器是MSP430应用系统中经常要用到的重要部分。 (一)、可以实现的功能有: 1、定时引起中断 2、延迟 3、提供串口比特率 4、信号产生 5、信号检测 (捕获模式下) 6、频率测量 7、脉宽测量 (二)、一般来说,MSP430所需要 ...… 查看全部问答> |
|
最近弄这个,发现网上的资料自己显示不出来,只好自己来了。 4位传输,p2.0 p2.1 接en rs 。 rw 接地。p1 高4位数据口。 动态显示。 [ 本帖最后由 sunnie 于 2013-2-8 13:29 编辑 ]… 查看全部问答> |




