【原创】基于ARM的流水灯仿真示例(第一次修改)
2010-05-14 19:25
211 查看
本次设计在上一篇(《基于ARM的流水灯仿真示例》)的基础上,加了晶振电路,并且改变和与LED灯相连的电阻的接法。在原来的设计中,所有的LED灯都和一个电阻相连,虽然仿真没有出现问题,但在现实电路中这样的接法很可能导致该电阻烧坏,所以本设计分别给每个LED灯接了一个电阻。整体电路的连接如下图所示。
经过修改之后的电路图
修改之前的电路图
程序部分并没有做出任何修改,程序代码如下:
本设计源程序、电路图及HEX文件
LED.7z
经过修改之后的电路图
修改之前的电路图
程序部分并没有做出任何修改,程序代码如下:
#include "config.h" int DelayTime=60; //延时参数 int ModeSel=0; //流水灯控制 //延时函数原型声明 void delay(int dly); //中断服务程序原型声明 void __irq IRQ_Eint0(void); void __irq IRQ_Eint1(void); void __irq IRQ_Eint2(void); void __irq IRQ_Eint3(void); //流水灯工作模式定义 int LED_Mode[2][8]= { {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}, {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe} }; int ModeIndex; //工作模式索引 //***************************************************************************************************** *** //主函数 int main (void) { //配置引脚功能 PINSEL0=0x000cc0cc; PINSEL1=0x00000000; IO1DIR=0xff<<16; //设P1.16-P1.23为输出 EXTMODE=0x00; //设置外部中断为电平触发 IRQEnable(); //使能IRQ中断 VICIntSelect=0x00000000; //设置所有分配为IRQ中断 VICVectCntl0=0x20|0x0e; //分配外部中断0到向量中断0 VICVectCntl1=0x20|0x0f; //分配外部中断1到向量中断0 VICVectCntl2=0x20|0x10; //分配外部中断2到向量中断0 VICVectCntl3=0x20|0x11; //分配外部中断3到向量中断0 //设置中断服务程序地址 VICVectAddr0=(uint32)IRQ_Eint0; VICVectAddr1=(uint32)IRQ_Eint1; VICVectAddr2=(uint32)IRQ_Eint2; VICVectAddr3=(uint32)IRQ_Eint3; EXTINT=0x0f; //清除所有外部中断标志 VICIntEnable=(1<<0x0e)|(1<<0x0f)|(1<<0x10)|(1<<0x11); //使能外部中断 while(1) { for(ModeIndex=0; ModeIndex<8; ModeIndex++) { IO1SET=LED_Mode[ModeSel][ModeIndex]<<16; //点亮LED灯 delay(DelayTime); //延时 IO1CLR=LED_Mode[ModeSel][ModeIndex]<<16; //熄灭LED灯 } } return 0; } //***************************************************************************************************** *** //延时函数 void delay(int dly) { int i,j; for(i=0; i<dly; i++) for(j=0; j<25000; j++); } //***************************************************************************************************** *** //外部中断0服务程序 void __irq IRQ_Eint0(void) { ModeSel=0; //设置LED工作模式 while((EXTINT&0x01)!=0) { EXTINT=0x01; //清除中断标志 } VICVectAddr=0; } //***************************************************************************************************** *** //外部中断1服务程序 void __irq IRQ_Eint1(void) { ModeSel=1; //设置LED工作模式 while((EXTINT&0x02)!=0) { EXTINT=0x02; //清除中断标志 } VICVectAddr=0; } //***************************************************************************************************** *** //外部中断2服务程序 void __irq IRQ_Eint2(void) { if(DelayTime>20) DelayTime=DelayTime-20; //减少延时 while((EXTINT&0x04)!=0) { EXTINT=0x04; //清除中断标志 } VICVectAddr=0; } //***************************************************************************************************** *** //外部中断3服务程序 void __irq IRQ_Eint3(void) { if(DelayTime<100) DelayTime=DelayTime+20; //增加延时 while((EXTINT&0x08)!=0) { EXTINT=0x08; //清除中断标志 } VICVectAddr=0; } /****************************************************************************************************** *** ** End Of File ******************************************************************************************************* */
本设计源程序、电路图及HEX文件
LED.7z
相关文章推荐
- 【原创】基于ARM的流水灯仿真示例(第二次修改)
- 【原创】基于ARM的流水灯仿真示例
- 【原创】基于ARM的步进电机控制示例(串口方式+中断方式)
- 基于arm的fast models的架构仿真和linux kernel 开发
- ARM-Linux 内核移植--基于FL2440开发板(修改为Linux单系统)
- ROS(indigo)国外开源示例包括多机器人控制等基于V-Rep和Gazebo的仿真
- JS基于FileSaver.js插件实现文件保存功能示例[原创]_javascript技巧_脚本之家
- 【原创】基于FPGA的数码管的动态显示--ILOVEFPGA--动态流水般飘过
- Python基于scapy实现修改IP发送请求的方法示例
- ROS(indigo)国外开源示例包括多机器人控制等基于V-Rep和Gazebo的仿真
- 微信小程序基于slider组件动态修改标签透明度的方法示例
- 基于51单片机的花样流水灯仿真(代码)
- 【原创】基于部署映像服务和管理(DISM)修改映象解决WIN7 USB3.0安装时报错
- 基于proteus的51单片机仿真实例五十一、基于P2口的流水灯
- 基于proteus的51单片机仿真实例十一、51单片机的P0口控制实例--流水灯
- 基于docker的caffe环境搭建与使用示例(根据自己的情况稍作修改)
- ARM-Linux 内核移植--基于FL2440开发板(修改为Linux单系统)
- (原创)LEON3入门教程(三):基于LEON3的SOPC设计以及HELLOWORLD和流水灯
- (原创)构建基于aemb的sopc系统(四)--修改setup文件
- 【原创】初学者怎样才能更轻松的进入嵌入式行业(基于ARM核开发板)