嵌入式——按键灯控制
来源:互联网 发布:二维坐标转换矩阵 编辑:程序博客网 时间:2024/05/22 01:50
实验结果:按左键led灯向左亮,按右键led灯向右亮
void __irq int_int(void); //声明中断服务函数 int flag=0; //定义一个标志位void led_Y(void) //小灯自左向右依次亮灭{int i,nOut;nOut = 0xF0;rCPLDLEDADDR = nOut | 0x0F;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0x07; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0x03; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0x01; for(i = 0; i < 100000; i++);nOut = 0xFF;rCPLDLEDADDR = nOut & 0xF0;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut & 0xF8; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut & 0xFC; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut & 0xFE; for(i = 0; i < 100000; i++);}void led_Z(void) //小灯自右向左依次亮灭{int i,nOut;nOut = 0xFF;rCPLDLEDADDR = nOut & 0xFE;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut & 0xFC; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut & 0xF8; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut & 0xF0; for(i = 0; i < 100000; i++);nOut = 0xF0;rCPLDLEDADDR = nOut | 0x01;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0x03; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0x07; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0x0F; for(i = 0; i < 100000; i++);}void led_m(void){int i;rCPLDLEDADDR = 0xFF;for(i = 0; i < 100000; i++);}中断程序 void __irq int_int(void){ unsigned char Status;Status = rCPLDIntStatus; //中断状态是低有效Status = ~(Status & 0x6); //将状态取反 if(Status & 0x2) //查询键和控制处理{flag=0;uart_printf(" Eint0 interrupt occurred.\n");rCPLDIntControl |= (1<<1);rCPLDIntControl &= ~(1<<1);}else if(Status & 0x4){flag=1;uart_printf(" EINT1 interrupt occurred.\n");rCPLDIntControl |= (1<<2);rCPLDIntControl &= ~(1<<2);} rEINTPEND=(1<<9); //禁止外部中断EINT8 ClearPending(BIT_EINT8_23);}按键初始化void int_init(void) { rSRCPND = rSRCPND; // Clear all interrupt rINTPND = rINTPND; // Clear all interrupt // nIntMode='3'; rGPGCON |= (0xf<<0); rGPGCON &= (0xa<<0);rCPLDIntControl = 0xFF; //控制寄存器 中断允许控制rCPLDIntControl = 0xF9;pISR_EINT8_23=(UINT32T)int_int; //中断服务地址填到中断向量表rEINTPEND = 0xffffff; //外部中断请求设置全1rSRCPND = BIT_EINT8_23; // Clear the previous pending statesrINTPND = BIT_EINT8_23; //记录CPU正在处理的中断源rEXTINT1 &= ~((0x7<<4)|(0x7<<0)); //电平 控制EINT8为下降沿触发rEXTINT1 |= ((0x2<<4)|(0x2<<0));rEINTMASK &= ~(3<<8); //外部中断屏蔽寄存器,允许EINT8,9rINTMSK &= ~(BIT_EINT8_23);}主程序void int_test(void){uart_printf("\n External Interrupt Test Example\n");int_init();while(1) //等待中断,循环{if(flag==0) //标志位为0,灯向左亮;为1,灯向右亮led_Z();elseled_Y();}}
阅读全文
0 0
- 嵌入式——按键灯控制
- 嵌入式按键LED灯
- 初学MSP430——按键中断控制小灯翻转
- ARM裸机程序开发——按键控制LED灯
- arduino学习系列——按键控制LED灯
- STM32按键控制灯
- 按键控制灯
- 中断——按键控制LED状态
- <备战蓝桥杯之嵌入式>——BUTTON按键实验
- 嵌入式系统学习——STM32之按键输入
- 5.0 按键控制LED灯
- 独立按键控制led灯
- 中断-按键控制LED灯
- ARM裸机——FS2410按键控制LED灯(查询方式)
- TQ210_裸机编程(二)——按键控制LED灯
- STM32F407学习笔记——GPIO_按键控制LED亮灭
- fl2440——按键控制madplay音乐播放器
- madplay播放器——用按键控制音量
- Git
- Linux 下编译安装软件,找不到共享库 xx.so 的解决办法
- 【SCM( SVN)】
- Python
- Docker
- 嵌入式——按键灯控制
- Linux
- C++标识符的命名规则
- 图片压缩工具:uci
- Linux
- Python中*args 和**kwargs的用法
- Docker
- Tools
- Unity——退出程序代码