完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
初学51单片机,团队安排我写一个程序:用按键控制led,但是用中断,去除消抖过程。我用外部中断实现了led的亮灭。我想用定时器中断代替延时函数。结果出错了。求教大神,前辈,指点一下。程序如下
#include #define LED P1 ***it KEY=P3^2; #define uchar unsigned char //定义unsigned char 为 uchar uchar cCounter; //记录外部中断次数的变量 uchar i; int j; uchar code Dis_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /*******************中断初始化*********************/ void Open_Out0() { EA=1; //打开总中断 EX0=1; //打开外部中断0中断 IT0=0; //电平触发 PT0=1; //定时器中断高优先级 PX0=0; //外部中断低优先级 } /**********延时函数*********/ /*void Delay10ms(unsigned int c) { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } }*/ /********************定时器中断0中断***********************/ void timer() interrupt 0 { j=0; if(j<1000) //计时作用,代替延时函数 { j++; TH0=(65536-50000)/256; //再装值 TL0=(65536-50000)%256; } } /*****************外部中断0中断*******************/ void Out_interrupt() interrupt 0 { EX0=0; //关闭外部中断 TMOD|= 0x00; //定时器方式0 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 TH0=(65536-50000)/256; //初装值 TL0=(65536-50000)%256; i=cCounter%2; cCounter++; //Delay10ms(20); switch(i) { case 0: LED=0x00; break; case 1: LED=0xff; break; } EA=1; } /********************主函数*******************/ void main() { cCounter=2; Open_Out0(); LED=0xff; while(1) { } } 如果大神单独指教,我学会了发红包表示感谢 |
|
相关推荐 |
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
2027 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1209 浏览 0 评论
2786 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2557 浏览 3 评论
5240 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 02:42 , Processed in 0.294779 second(s), Total 35, Slave 29 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号