完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛
|
第四十七节:单片机中的战斗机switch---利用定时中断实现LED闪烁
开场白: Switch语句是单片机中的战斗机,是整个程序的灵魂,这句话一点都不夸张。我们只要以Switch语句为支点,再复杂再繁琐的程序都可以轻松地编写出来。 在鸿哥的编程体系中,Switch括号里面的全局变量就是最核心的变量,鸿哥把它定义为步骤变量,后缀统一用_step命名。我们只要根据实际情况灵活控制步骤变量,就可以演绎出无穷的单片机程序。接下来,我将会专门花几个章节来讲switch语句的实战用法。 (1) 功能需求: 让一个LED灯闪烁。 (2) 硬件原理: 利用单片机的一个IO口引脚连接到LED灯的负极,LED的正极串接一个510欧的电阻,电阻的另一端连接到电源VCC上。一般来说,单片机IO口的灌电流比输出的驱动电流要大,所以驱动LED灯的时候,我喜欢用IO口接LED灯的负极,正极经过限流电阻后直接连VCC。 (3) 源码适合的单片机: PIC16F73,晶振为3.579545MHz。 (4)单片机的C语言源代码讲解: #include //补充说明:吴坚鸿程序风格是这样的,凡是输出IO后缀都是_dr,凡是输入的IO后缀都是_sr #define led_dr RC3 //控制发光二极管 #define const_led_on_time 1000 //控制led灯的亮的时间长短,这个数值读者根据实际情况改动,我没验证过这个大小 #define const_led_off_time 2000 //控制led灯的灭的时间长短,这个数值读者根据实际情况改动,我没验证过这个大小 unsigned long led_cnt=0; //延时计数器 unsigned char run_step=0; //这就是鸿哥传说中的步骤变量,单片机程序的核心 main() //主程序 { ADCON0=0x41; //设置AD模式 ADCON1=0x04; //RA0作为AD输入通道,本程序中没有用到AD,不用管它 TRISC3=0; //LED灯的IO口设置成输出 T1CON=0x24; //定时中断配置 TMR1H=0xFE; TMR1L=0xEF; INTCON=0xC0; TMR1IF=0; TMR1IE=1; PEIE=1; //外围中断允许 GIE=1; //开总中断 TMR1ON=1; //启动定时器中断 while(1) { CLRWDT(); //喂单片机内部自带的看门狗,大家可以不管它 switch(run_step) { case 0: led_dr=1; //发光二极管灭 led_cnt=0; //延时计数器清零 run_step=1; //这就是鸿哥传说中的怎样灵活控制步骤变量 break; case 1: if(led_cnt>const_led_off_time) //LED灯灭的延时时间 { led_dr=0; //LED灯亮 led_cnt=0; //延时计数器清零 run_step=2; //这就是鸿哥传说中的怎样灵活控制步骤变量 } break; case 2: if(led_cnt>const_led_on_time) //LED灯亮的延时时间 { led_dr=1; //LED灯灭 led_cnt=0; //延时计数器清零 run_step=1; //这就是鸿哥传说中的怎样灵活控制步骤变量 } break; } } } void interrupt timer1rbint(void) //中断程序入口 { if(TMR1IE==1&&TMR1IF==1) //定时中断程序 { TMR1IF=0; TMR1ON=0; led_cnt++; //延时计数器 TMR1H=0xFF; TMR1L=0xC8; TMR1ON=1; } } (5)下集预告: 单片机中的战斗机switch---利用主函数循环实现跑马灯。 (未完待续,下节更精彩,不要走开哦!) |
|
|
|
|
|
|
|
|
鸿哥V5鸿哥V5鸿哥V5鸿哥V5鸿哥V5鸿哥V5
|
|
|
|
|
|
|
|
|
战斗机很好用,不知大家用没有,反正我用了,呵呵。 开着战斗机打江山。 ![]() |
|
|
|
|
|
|
|
|
哈哈。我跟你一样,一直开着战斗机打江山。 自从我学会了开战斗机,嘿,我腰也不疼了,胃也不酸了,腿也不抽筋了,吃嘛嘛香,走路也不费劲了。 |
|
|
|
|
|
|
|
|
这个帖得顶起,自己稍作整理了一下第一节的流程。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
本帖最后由 chengpt 于 2013-8-26 09:18 编辑
再次顶,希望吴总在这段时间忙过了,能多多更新,看完吴总的这些PIC单片机程序风格,必然内功大增,q1an9棒会舞了,内力增加,方能成为高手 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这个要你自己根据自己的实际情况自己拿主意,我指点不了。 |
|
|
|
|
|
|
|
|
感谢楼主分享!收藏慢慢看
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2382 浏览 1 评论
4242 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2619 浏览 2 评论
3118 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4577 浏览 5 评论
有套STM32与西门子200程序需要代写,有兴趣的工程师与有联系!
2491浏览 1评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6801浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-17 20:56 , Processed in 1.133374 second(s), Total 86, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖