基于ARM的流水灯仿真示例(第一次修改)

发布者:cyzcee最新更新时间:2020-01-28 来源: eefocus关键字:ARM  流水灯  仿真示例 手机看文章 扫描二维码
随时随地手机看文章

本次设计在上一篇(《基于ARM的流水灯仿真示例》)的基础上,加了晶振电路,并且改变和与LED灯相连的电阻的接法。在原来的设计中,所有的LED灯都和一个电阻相连,虽然仿真没有出现问题,但在现实电路中这样的接法很可能导致该电阻烧坏,所以本设计分别给每个LED灯接了一个电阻。整体电路的连接如下图所示。

经过修改之后的电路图

修改之前的电路图


程序部分并没有做出任何修改,程序代码如下: 



  1 #include "config.h"

  2 

  3  int DelayTime=60;    //延时参数

  4  int ModeSel=0;        //流水灯控制

  5 

  6  //延时函数原型声明

  7  void delay(int dly);

  8 

  9  //中断服务程序原型声明

 10  void __irq IRQ_Eint0(void);

 11  void __irq IRQ_Eint1(void);

 12 void __irq IRQ_Eint2(void);

 13 void __irq IRQ_Eint3(void);

 14 

 15 //流水灯工作模式定义

 16 int LED_Mode[2][8]=

 17 {

 18     {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f},

 19     {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}

 20 };

 21 

 22 int ModeIndex;        //工作模式索引

 23 

 24 //*****************************************************************************************************

 25 

 26 ***

 27 //主函数

 28 int main (void)

 29 {

 30     //配置引脚功能

 31     PINSEL0=0x000cc0cc; 

 32     PINSEL1=0x00000000;        

 33     

 34     IO1DIR=0xff<<16;    //设P1.16-P1.23为输出

 35 

 36     EXTMODE=0x00;        //设置外部中断为电平触发

 37     

 38     IRQEnable();        //使能IRQ中断

 39     

 40     VICIntSelect=0x00000000;    //设置所有分配为IRQ中断

 41     

 42     VICVectCntl0=0x20|0x0e;        //分配外部中断0到向量中断0

 43     VICVectCntl1=0x20|0x0f;        //分配外部中断1到向量中断0

 44     VICVectCntl2=0x20|0x10;        //分配外部中断2到向量中断0

 45     VICVectCntl3=0x20|0x11;        //分配外部中断3到向量中断0

 46     

 47     

 48     //设置中断服务程序地址

 49     VICVectAddr0=(uint32)IRQ_Eint0;

 50     VICVectAddr1=(uint32)IRQ_Eint1;

 51     VICVectAddr2=(uint32)IRQ_Eint2;

 52     VICVectAddr3=(uint32)IRQ_Eint3;

 53     

 54     EXTINT=0x0f;    //清除所有外部中断标志

 55     

 56     VICIntEnable=(1<<0x0e)|(1<<0x0f)|(1<<0x10)|(1<<0x11);    //使能外部中断

 57     

 58     while(1)

 59     {

 60         for(ModeIndex=0; ModeIndex<8; ModeIndex++)

 61         {

 62             IO1SET=LED_Mode[ModeSel][ModeIndex]<<16;    //点亮LED灯

 63             delay(DelayTime);                //延时

 64             IO1CLR=LED_Mode[ModeSel][ModeIndex]<<16;    //熄灭LED灯

 65         }

 66     }

 67     return 0;

 68 }

 69 

 70 //*****************************************************************************************************

 71 

 72 ***

 73 //延时函数

 74 void delay(int dly)

 75 {

 76     int i,j;

 77     for(i=0; i 78         for(j=0; j<25000; j++);

 79         

 80 }

 81 

 82 //*****************************************************************************************************

 83 

 84 ***

 85 //外部中断0服务程序

 86 void __irq IRQ_Eint0(void)

 87 {

 88     ModeSel=0;            //设置LED工作模式

 89     while((EXTINT&0x01)!=0)

 90     {

 91         EXTINT=0x01;    //清除中断标志

 92     }

 93     VICVectAddr=0;

 94 }

 95 

 96 //*****************************************************************************************************

 97 

 98 ***

 99 //外部中断1服务程序

100 void __irq IRQ_Eint1(void)

101 {

102     ModeSel=1;            //设置LED工作模式

103     while((EXTINT&0x02)!=0)

104     {

105         EXTINT=0x02;    //清除中断标志

106     }

107     VICVectAddr=0;

108 }

109 

110 //*****************************************************************************************************

111 

112 ***

113 //外部中断2服务程序

114 void __irq IRQ_Eint2(void)

115 {

116     if(DelayTime>20)

117         DelayTime=DelayTime-20;        //减少延时

118     

119     while((EXTINT&0x04)!=0)

120     {

121         EXTINT=0x04;            //清除中断标志

122     }

123     VICVectAddr=0;

124 }

125 

126 //*****************************************************************************************************

127 

128 ***

129 //外部中断3服务程序

130 void __irq IRQ_Eint3(void)

131 {

132     if(DelayTime<100)

133         DelayTime=DelayTime+20;        //增加延时

134     

135     while((EXTINT&0x08)!=0)

136     {

137         EXTINT=0x08;            //清除中断标志

138     }

139     VICVectAddr=0;

140 }

141 

142 /******************************************************************************************************

143 

144 ***

145 **                            End Of File

146 *******************************************************************************************************

147 

148 */


关键字:ARM  流水灯  仿真示例 引用地址:基于ARM的流水灯仿真示例(第一次修改)

上一篇:ADS分散加载文件使用总结(lpc23xx)
下一篇:基于ARM的流水灯仿真示例

推荐阅读最新更新时间:2024-10-24 12:30

基于ARM流水灯仿真示例
本设计使用的仿真工具是Proteus 7.4,IDE是ADS 1.2,芯片是LPC2134 在Proteus中的电路图如下图所示: 本设计使用的是周立功的LPC2131的工程模板。LPC2131的RAM为8K,而LPC2134的为16K,因此在使用工程模板时必须修改mem_a.scf、mem_b.scf和men_c.scf文件中的RAM最高端地址,即把“0x40002000”改为“0x40004000”。 本设计中的四个按钮对应着四个外部中断,用于控制流水灯的工作方式。 PS:本设计中的电路图只限用于仿真,在实际应用中还应加上晶振、复位电路等 。 源代码及注释如下: 1 #include config.
[单片机]
基于<font color='red'>ARM</font>的<font color='red'>流水灯</font><font color='red'>仿真</font><font color='red'>示例</font>
基于ARM流水灯仿真示例(第一次修改)
本次设计在上一篇(《基于ARM的流水灯仿真示例》)的基础上,加了晶振电路,并且改变和与LED灯相连的电阻的接法。在原来的设计中,所有的LED灯都和一个电阻相连,虽然仿真没有出现问题,但在现实电路中这样的接法很可能导致该电阻烧坏,所以本设计分别给每个LED灯接了一个电阻。整体电路的连接如下图所示。 经过修改之后的电路图 修改之前的电路图 程序部分并没有做出任何修改,程序代码如下: 1 #include config.h 2 3 int DelayTime=60; //延时参数 4 int ModeSel=0; //流水灯控制 5 6 //延时函数原型声明 7 void delay(in
[单片机]
基于<font color='red'>ARM</font>的<font color='red'>流水灯</font><font color='red'>仿真</font><font color='red'>示例</font>(第一次修改)
PIC16F628A LED流水灯示例程序
#include p IC .h __CONFIG(0x3f38); //看门狗关,内部RC震荡,RA6/RA7做I/O //----------------------------------- //延时函数 void delay() { int i; //定义循环变量 for(i=5000;i 0;i--) //循环次数控制 { NOP(); //消耗一个指令 周期 的时间 NOP(); } } //---------------------------------- //初始化函数 void init() { T
[单片机]
proteus仿真51流水灯(汇编)
本文为《proteus仿真51流水灯和点阵(心形)》的后续文章,上文链接:https://www.cnblogs.com/xing-2/p/11147890.html 流水灯的原理图同上文 汇编代码如下: ORG 0000H MOV R1,#01H LCALL movbit delay: MOV R7,#00H delayloop: DJNZ R7,delayloop DJNZ R6,delayloop RET movbit: MOV A,R1 RL A MOV R1,A MOV P1,R1 MOV R6,#0FFH LCALL delay LCALL mo
[单片机]
proteus仿真51流水灯和点阵(心形)
使用SDCC,不能简单套用keil环境下的语法,以下是SDCC中8051.h头文件与keil环境下reg51.h头文件的区别: 关于如何在proteus上调用在codeblocks上编写好的C51代码: 在proteus上双击51单片机或右击51单片机点击编辑属性 浏览到codeblocks编译后的hex文件即可。 现在开始流水灯: 原理图: 代码: #include mcs51/8051.h void delay() { for(int i=0;i 100;i++) for(int j=0;j 100;j++); } int main() { while(1) { for(
[单片机]
proteus<font color='red'>仿真</font>51<font color='red'>流水灯</font>和点阵(心形)
ISIS 7 Professional仿真——键控流水灯
功能:K1是总开关,当K1首次按下时,流水灯由下往上流动;当K2按下时停止流动,且全部灯灭,当K3按下时使灯由上往下流动,K4则使灯由下往上流动。 LED灯循环速度可以调整延时函数的整型调用参数值来改变。 void delay (unsigned char time){ unsigned int j = 12000; for(; time 0; time--) // 延时函数 for(; j 0; j--); } 实现流水灯向 ↓移动 for(i = 0; i = 3; i++){ P2 = led ; delay(300); } 实现流水灯向↑移动 for(i = 3;
[单片机]
ISIS 7 Professional<font color='red'>仿真</font>——键控<font color='red'>流水灯</font>
基于msp430f2491的proteus仿真(实现流水灯
实现P2口的流水灯 主函数 #include msp430x24x.h #define LED8PORT P2OUT //P2接8个LED灯 #define LED8SEL P2SEL //P2接8个LED灯 #define LED8DIR P2DIR //P2接8个LED灯 #define uchar unsigned char #define uint unsigned int //IAR软件的延时函数 #define CPU_F ((double)8000000)//8M #define delay_us(x) __dela
[单片机]
基于msp430f2491的proteus<font color='red'>仿真</font>(实现<font color='red'>流水灯</font>)
单片机(AT89C51)的仿真实验——流水灯和逐一闪烁灯(输入与输出)
在进行仿真实验前必须先装了软件,一个是单片机仿真软件(ISIS 7 Professional)和单片机写程序的软件(Keil uVision4),一个写程序一个烧程序。如果没装的可以私聊我。 流水灯的实现(正向的流水灯): 原理: P1初始值是:1111 1111和temp(0000 0001)异或等于以后 P1=1111 1110使得第一个灯亮着, 进入循环0000 0001左移一位得到0000 0010,然后再和P1(1111 1110)异或等于以后 P1=1111 1100使得第一个灯和第二个灯都亮着,下面也是如此往复的循环,一盏一盏的连着点亮就实现了流水灯,然后一盏接着一盏的灭掉。 #include reg51
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
    做任何事情之前,一定要想好目标。没有目标的事情是做不好的,也做不成。我的目标就是学习ARM开发,当然是深入的学习。目标如下 :1、学习A ...
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
  • 学习ARM开发(7)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved