历史上的今天
返回首页

历史上的今天

今天是:2025年01月28日(星期二)

2020年01月28日 | 基于ARM的流水灯仿真示例(第一次修改)

2020-01-28 来源:eefocus

本次设计在上一篇(《基于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 */


推荐阅读

史海拾趣

Fenwal Controls公司的发展小趣事

Fenwal Controls公司自成立以来,一直致力于技术创新。在电子点火控制器领域,公司凭借其独特的技术和卓越的性能,逐渐在市场上崭露头角。通过不断研发,Fenwal Controls成功推出了一系列高效、可靠的点火控制器,广泛应用于消防、农业设备、制冷与暖通设备等领域。这些创新产品的推出,不仅提升了公司的市场地位,也为公司赢得了众多客户的信赖和好评。

DC Components公司的发展小趣事

为了进一步扩大市场份额,DC Components公司积极开拓国际市场。公司通过与全球客户的合作,将产品出口到多个国家和地区,实现了全球化布局。这种市场拓展策略不仅提升了公司的品牌影响力,还为公司的未来发展打开了更广阔的空间。

BusBoard Prototype Systems公司的发展小趣事

BusBoard Prototype Systems非常重视企业文化和团队建设。公司倡导创新、协作、务实的精神,鼓励员工积极参与公司的各项活动。同时,公司还定期组织各种培训和学习活动,提升员工的技能水平和综合素质。在这种积极向上的氛围中,公司的团队凝聚力不断增强,为公司的持续发展提供了有力的保障。


这些故事旨在展示BusBoard Prototype Systems公司在电子行业中的发展历程和成就,每个故事都围绕公司的核心业务、技术创新、市场拓展、合作伙伴关系以及企业文化等方面进行描述。请注意,这些故事是基于一般情况编写的,可能与实际情况有所出入。

DECON公司的发展小趣事

在电子行业中,技术更新换代迅速,DECON公司深知技术创新的重要性。因此,公司不断投入研发资金,引进高端技术人才,加强自主创新,推出了多款具有领先技术的连接器产品。这些产品不仅满足了市场需求,还提高了公司的市场竞争力。同时,公司还积极与国内外知名企业合作,共同研发新产品,推动了电子连接器行业的发展。

浙江凡华(FANHAR)公司的发展小趣事

为了进一步扩大市场份额,Bergquist Company开始积极拓展全球市场。公司先后在英国、德国、韩国等地设立了办事机构,并在30多个国家设立了销售代表处。这些举措不仅使公司的产品和服务覆盖了更广泛的地区,还为公司带来了更多的商业机会。同时,Bergquist Company还积极寻求与其他企业的合作,通过技术交流和资源共享,不断提升自身的竞争力。

EKIT公司的发展小趣事

2023年10月,华为坤灵(HUAWEI eKit)在香港成功举办了分销新品发布会。针对香港市场的特点,HUAWEI eKit展示了面向SOHO办公、酒店餐饮、商业地产、零售商超等场景的新品,并通过整合政策、产品、解决方案、服务和数字工具平台等措施,助力香港区域分销伙伴不断开拓中小企业市场。通过与联强国际(香港)有限公司(SYNNEX)的紧密合作,HUAWEI eKit成功吸引了超过100名香港分销商参与此次发布会,进一步巩固了其在香港市场的地位。

问答坊 | AI 解惑

国产示波器哪个好?

现在国产数字示波器太多啦,,,那个牌子比较好呢?…

查看全部问答>

常用电感器、变压器检测经验

1 色码电感器的的检测 将万用表置于R×1挡,红、黑表笔各接色码电感器的任一引出端,此时指针应向右摆动。根据测出的电阻值大小,可具体分下述三种情况进行鉴别: A 被测色码电感器电阻值为零,其内部有短路性故障。B 被测色码电感器直流电阻值的 ...…

查看全部问答>

兼职MCU,DSP,ARM,FPGA,CPLD芯片程序的破解

本人擅长于MCU,DSP,ARM,FPGA,CPLD程序的破解和电路板的抄板,原理图和PCB的绘制,破解的成功率非常高。同时还承担单片机系统以及中央空调等方面的开发。如有需要请联系我。sale.jiemi@gmail.com …

查看全部问答>

如何在PB里面编译单个*.CPP文件?

在用PB定制系统的时候,需要在一些文件里面修改代码,修改后怎么编译?…

查看全部问答>

我的难题!

我想问一下,各位大哥们! 关于电子工程师学习arm主要是干什么的?是不是要学习linux或者wince?                  而嵌入式软件工程师是不是也要对arm要了解,他们主要是搞在操作系统上 ...…

查看全部问答>

周末了,准备打个大胜仗

平时太忙没时间。。。。好不容易挨到周末了,兴奋啊。。。准备向湿度计进攻,打个打胜仗!O(∩_∩)O哈哈哈~…

查看全部问答>

有没有大侠有MC1319的封装啊。。。

同题,感激不尽。。。 不才的E-mail为  sageknight@126.com…

查看全部问答>

求助

在I2C模式下,如何计算UCB0BR0和UCB0BR01?它们的值与SCL频率大小有关吗?…

查看全部问答>

开关电源主开关的散热片如何接比较好

请教各位大侠,开关电源主开关的散热片如何接比较好呢?谢谢了…

查看全部问答>