历史上的今天
今天是:2024年09月07日(星期六)
2020年09月07日 | PIC12F629单片机定时器1控制3个LED循环源程序,且时间可调
2020-09-07 来源:51hei
PIC12F629不用外振即可正常运行,低成本首选,原理如下:按键按一次LED1低亮,按两次LED2亮,按三次LED3亮,一直循环, 按键长按3秒松开则可以计入自动循环模式,再次长按3秒则退出,进入待机模式;2脚接轻触开关到地,可以做为设置键(原理图来自网上故VDD接﹢5V,漏画,SET设置键没有画,有时间修正下原理图),用来设置每个LED亮的时间,互不影响!源码已经编译通过,洞洞板做了一个PCB, 正常运行,新手贴勿喷。
单片机源程序如下:
/******************************************************************************
设计要求:按一次按键是打开第一个摄像头,按两次开第二个摄像头,按三次打开第三个摄像头,
长按3秒则开启循环模式,每次开启时间30秒,一直循环,直到按下按键为止.
* IC: PIC12F629 OSC: 片内4MHz
*****************************************************************************/
#include #define uchar unsigned char #define uint unsigned int #define LED1 GPIO0 #define LED2 GPIO1 #define LED3 GPIO2 #define KEY GPIO4 #define SET GPIO5 __CONFIG(FOSC_INTRCIO & WDTE_ON & PWRTE_ON & MCLRE_OFF & BOREN_ON); /********* 配置字 ************/ void interrupt ISR( void) ; void delay(uint x); void IOinit (void) ; void TMR1init(void) ; uint time = 0; uint t =0; uchar cnt =0; uchar cnt1 = 0; uchar cnt2 = 0; uchar i , k = 0; void IOinit (void) { PCON = 0X00; // 电源控制全关 CMCON = 0X07; //关模拟器 TRISIO = 0X38; // 00111000 GP<5:3>输入 GP<2:0>输出 GPIO = 0X3F; // 00111111 GP<2:0>输出高电平 WPU = 0X30; // GP<5:4>内部弱上拉开启 IOC = 0X30; //GP<5:4>端口电平变化中断使能 } void TMR1init (void) { OPTION_REG = 0X0F; // PSA =1, PS2:PS0 =111 开看门狗 预分频128 其余的关 INTCON = 0XC0 ; // GIE = 1 , PEIE = 1 开全局中断 开外设中断 其余的关 PIE1 = 0X01; // 外设中断使能 PIR1 = 0X00; // TMR1IF = 1 开TIMR1 外设中断标志位,需要软件清零 TMR1H = 0X3C; //TIMER1初值 溢出时间是50000(50ms) TMR1L = 0XB0; // 65536- 50000 = 15536 (0x3CB0) T1CON = 0X01; // 开TIMR1 } void main ( ) { IOinit () ; TMR1init() ; //主循环 while(1) { if(i==0 ) { if(SET==0) { delay(10); if(SET==0) { while(!SET); k=!k; cnt=0; cnt1=0; LED3=!LED3; } } } if(KEY == 0) //如果按键按下 { delay(20); if(KEY == 0) { time = 0; //延时标志位清零 while(!KEY); //等待按键被松开,由中断函数计数 if(time<40) //按下时间不足50ms*40=2000毫秒(2秒) { if (k==0) { cnt1++; //按键次数加1,改变工作状态 if(cnt1>3) cnt1 = 0; } else if( k==1) { cnt++; if (cnt>10) cnt=0; t=cnt*100; LED1 =0; delay(20); LED1 =1; } } if(time >= 40 && time < 100) //按住时间2秒到5秒之间 { i = !i; time =0; cnt2 =0; cnt1=0; } else if (time >=100) { break; } } } if (k==0 ) { if (i == 1) { switch (cnt2) { case 0: GPIO =0X3E; //00111110 开1号继电器 break;
史海拾趣
|
最近小弟在构思一个系统遇到了一些麻烦的问题,忘知者赐教。 系统有能耗要求,整个mcu处理单元(包括mcu外围)平均电流要限制在50ma以内。mcu目前占时还没有定下来,选择对象是stm32系列,atmel的xmega系列和avr32系列。系统需要大量的高速缓存, ...… 查看全部问答> |
|
我现在自己做了块6410的板子,现在的情况是这样的:在三星提供的BSP中,NK有三种速度,第一种是532MHz,133MHz,66.5MHz,第二种是600MHz,150MHz,75MHz,第三种是666MHz,133MHz,66.5MHz。我用第1和第3种运行NK运行都有问题,刚开始就会出再好多报错, ...… 查看全部问答> |
|
在看2410的头文件,发现其中有些寄存器用*(volatile unsigned char *) 来定义,而有一些用*(volatile unsigned *) 来定义,这是为什么呢?这两个有什么区别呢?… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 屏幕越大待机时间越短 已成消费者最大诟病 手机电池标准统一咋就这么难 中国消费者协会日前发布2009年全国手机消费者满意指数测评情况显示,消费者对手机电池待机时间短最为不满。 如果说待 ...… 查看全部问答> |
|
小弟做项目时用到DS18B20,随盘资料的例程有一处我总觉得有问题,大家帮我看看是不是。 unsigned char ID[5][8]; //ID[5][8]为检索到的地址 unsigned char TEMP_NUMBER; //温度传感器数量 unsigned int TEMP[5]; //温 ...… 查看全部问答> |
|
在银行自动提款时,都有语音提示,前几天农行的帅哥还把提示音换成了TOM猫的搞笑声音,我想问一下怎样将人声转换成c代码,然后利用DA输出至喇叭,实现语音提示。可是在网上没有找到转换软件。网上有蜂鸣器的代码转换软件,(http://download3.pudn. ...… 查看全部问答> |
|
传感器是能够受规定的被测量并按照一定的规律转换成可用输出信号的器件或装置的总称,通常由敏感元件和转换元件组成。当传感器的输出为规定的标准信号时,则称为变送器。 变送器的概念是将非标准电信号转换为标准电信号的仪器,传感器则是 ...… 查看全部问答> |




