这是一次练习,用IO中断控制LED灯,模拟楼道灯。
程序中需要注意的就是配置IO中断配置,其他部分都是基本程序语句。
注释详细,程序容易上手,适合入门新手参考。
两个开关,任何一个按下亮,再按任何一个灭
端口中断配置过程
cc2530源程序如下:
- #include "iocc2530.h"
- #define S5 P0_4 //宏定义 P0_4 为 S5 的控制端口
- #define S6 P0_5 //宏定义 P0_5 为 S6 的控制端口
- #define KEY5 5 //宏定义按键 S5 的返回值为 5
- #define KEY6 6 //宏定义按键 S5 的返回值为 6
-
- #define KEY_UP 1 //宏定义按键松开为 1
- #define KEY_DOWN 0 //宏定义按键按下为 0
- #define LED1 P1_4 //定义 P1_4 为 LED1 的控制端口
- #define LED_MODE_ON 0 //定义 0 为 LED 灯打开
- #define LED_MODE_OFF 1 //定义 0 为 LED 灯关闭
- unsigned char flag=0;
- void led_init(void);
- void Delay_Ms(unsigned int xms);
- void irq_p0_init(void);
- /*************************************************
- 12. *
- 13. *函数名称:void LED_Init(void)
- 14. *功能描述:LED 灯相应 IO 口的配置
- 15. *参数说明:无
- 16. *
- 17. **************************************************/
- void Led_Init(void)
- {
- P1SEL &= ~0X10; //定义 P1_4 为普通 IO //0001 0000
- P1DIR |= 0X10; //定义 P1_4 为输出
- LED1 = LED_MODE_OFF;//LED1 灯默认为关闭状态
- }
- /*************************************************
- 25. *
- 26. *函数名称:void KEY_Init(void)
- 27. *功能描述:按键相应 IO 口的配置
- 70
-
- 28. *参数说明:无
- 29. *
- 30. **************************************************/
- void irq_p0_init(void)
- {
- P0SEL &=~ 0X30; //定义 P1_4 为普通 IO //0001 0000
- P0DIR |= 0X30;
- //P0中断标志清0
- P0IFG = 0x00;
- IRCON = 0x00;
- //P0DIR=0x00;
- //P0.4和P0.5有上拉、下拉能力
- //P0INP &= ~0X30;
- //P0.4和P0.5中断使能
- P0IEN |= 0x30;
- //P0.4和P0.5,下降沿触发
- PICTL &=~0x01;
- //开中P0端口中断使能寄存器
- IEN1 |= 0X20;
- //开启总中断
- EA=1;
-
- }
- void Delay_Ms(unsigned int xms)
- {
- unsigned int i,j;
- for(i=xms;i>0;i--)
- for(j=578;j>0;j--);
- }
- //中断程序代码
- #pragma vector = P0INT_VECTOR
- __interrupt void LED_IRQ (void)
- {
- if(P0IFG &0x30)
- {
- flag=1;
- }
- Delay_Ms(10);
- P0IFG=0x00;
- IRCON &=~ 0x20;
- }
- void main(void)
- {
- //unsigned char key=0;
-
- Led_Init();//初始化 LED 端口配置
- //Key_Init();//初始化 KEY 端口配置
- irq_p0_init();
-
- while(1)
- {
- if(flag)
- {
- LED1=~LED1;
- flag=0;
- }
- } ;
- }
复制代码
所有资料51hei提供下载:
楼道灯作业.rar
(21.9 KB, 下载次数: 13)
|