完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
//采用芯片为:PIC16F877A
//实现LED灯的顺启逆停与急停 #include #define uchar unsigned char #define uint unsigned int #define IN 4 //定义进去时间为4s #define OUT 3 //定义3s后出来 #define DOWN 6 //定义下压时间为6s __CONFIG(0X3F32); uchar LEIJIA,SEC; //声明变量;累加,秒 void delay(uint x) { uint i,j; for(i=x;i>0;i--) for(j=123;j>0;j--); } void init_IO() { TRISB = 0xFF; //按键为输入 TRISC = 0X00; //RC口输出为LED // TRISE = 0X00; RC1 = 0; RC2 = 1; } void init_timer0() { GIE = 1; PEIE = 0; T0IE = 0; T0IF = 0; T0CS = 0; T0SE = 0; PSA = 0; PS2 = 1;PS1 = 1;PS0 = 1; LEIJIA = 0; } void start_timer0() { GIE = 1; PEIE = 1; T0IE = 1; T0IF = 0; } void stop_timer0() { T0IE = 0; T0IF = 0; TMR0 = 0X00; LEIJIA = 0; } void interrupt ISR() { TMR0 = 70; if(T0IF == 1) T0IF = 0; LEIJIA ++; if(LEIJIA == 20) //定时到1s { LEIJIA = 0; SEC--; } } void key_scan() { if((RB0) == 0) //按下按钮1(启动) { delay(2); if((RB0) == 0) { while(!RB0); RC1 = 0; //LED1----亮 SEC = IN; //亮4s start_timer0(); while(!(SEC == 0)); stop_timer0(); RC2 = 0; //LED2----亮 SEC = DOWN; //亮6s start_timer0(); while(!(SEC == 0)); stop_timer0(); RC1 = 1; //LED1----灭 SEC = OUT; //亮3s start_timer0(); while(!(SEC == 0)); stop_timer0(); RC2 = 1; //LED2----灭 if(RB1 == 0) //按下按钮2(急停) { delay(10); if(RB1 == 0) { while(!RB1); RC1 = 1; //LED1----灭 RC2 = 1; //LED2----灭 } } } } } void main() { init_IO(); init_timer0(); start_timer0(); stop_timer0(); while(1) { key_scan(); } } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2084 浏览 1 评论
3629 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2336 浏览 2 评论
2763 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4027 浏览 5 评论
972浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6359浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-3 08:44 , Processed in 0.652439 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号