51_外部中断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | /**********************51单片机学习例程************************ * 平台:Keil U4 + STC89C52 * 名称:Key1按下LED左循环,Key2按下LED变右循环 * 编写:Tony * 日期:2022-2-10 * QQ : 674749794 * 晶体:12MHZ * 变更记录:无 ******************************************************************/ #include<reg51.h> #include<intrins.h> #define GPIO_LED P1 //外部中断的IO sbit Key1=P3^2; sbit Key2=P3^3; void IntConfiguration(); void Delay(unsigned int n); unsigned char KeyValue=0; /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main( void ) { GPIO_LED=0X01; IntConfiguration(); while (1) { if (KeyValue) GPIO_LED=_crol_(GPIO_LED,1); else GPIO_LED=_cror_(GPIO_LED,1); Delay(2000); } } /******************************************************************************* * 函 数 名 : IntConfiguration() * 函数功能 : 设置外部中断 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void IntConfiguration() { //设置INT0 IT0=1; //跳变沿出发方式(下降沿);IT0=0--->低电平触发中断 EX0=1; //打开INT0的中断允许。 //设置INT1 IT1=1; EX1=1; EA=1; //打开总中断 } /******************************************************************************* * 函 数 名 : Delay(unsigned int n) * 函数功能 : 延时 * 输 入 : n * 输 出 : 无 *******************************************************************************/ void Delay(unsigned int n) //延时50us误差 0us { unsigned char a,b; for (;n>0;n--) { for (b=1;b>0;b--) for (a=22;a>0;a--); } } /******************************************************************************* * 函 数 名 : Int0() interrupt 0 * 函数功能 : 外部中断0的中断函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Int0() interrupt 0 //外部中断0的中断函数 { Delay(1); //延时消抖 if (Key1==0) KeyValue=1; IE0=0; //中断请求标志位 } /******************************************************************************* * 函 数 名 : Int1() interrupt 2 * 函数功能 : 外部中断1的中断函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Int1() interrupt 2 //外部中断1的中断函数 { Delay(1); //延时消抖 if (Key2==0) KeyValue=0; IE1=0; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律