历史上的今天
今天是:2025年01月28日(星期二)
2020年01月28日 | 基于ARM的流水灯仿真示例
2020-01-28 来源:eefocus
本设计使用的仿真工具是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.h"
2
3 int DelayTime=50; //延时参数
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
19 {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f},
20 {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}
21 };
22
23 int ModeIndex; //工作模式索引
24
25 //********************************************************************************************************
26 //主函数
27 int main (void)
28 {
29 //配置引脚功能
30 PINSEL0=0x000cc0cc;
31 PINSEL1=0x00000000;
32
33 IO1DIR=0xff<<16; //设P1.16-P1.23为输出
34
35 EXTMODE=0x00; //设置外部中断为电平触发
36
37 IRQEnable(); //使能IRQ中断
38
39 VICIntSelect=0x00000000; //设置所有分配为IRQ中断
40
41 VICVectCntl0=0x20|0x0e; //分配外部中断0到向量中断0
42 VICVectCntl1=0x20|0x0f; //分配外部中断1到向量中断0
43 VICVectCntl2=0x20|0x10; //分配外部中断2到向量中断0
44 VICVectCntl3=0x20|0x11; //分配外部中断3到向量中断0
45
46
47 //设置中断服务程序地址
48 VICVectAddr0=(uint32)IRQ_Eint0;
49 VICVectAddr1=(uint32)IRQ_Eint1;
50 VICVectAddr2=(uint32)IRQ_Eint2;
51 VICVectAddr3=(uint32)IRQ_Eint3;
52
53 EXTINT=0x0f; //清除所有外部中断标志
54
55 VICIntEnable=(1<<0x0e)|(1<<0x0f)|(1<<0x10)|(1<<0x11); //使能外部中断
56
57 while(1)
58 {
59 for(ModeIndex=0; ModeIndex<8; ModeIndex++)
60 {
61 IO1SET=LED_Mode[ModeSel][ModeIndex]<<16; //点亮LED灯
62 delay(DelayTime); //延时
63 IO1CLR=LED_Mode[ModeSel][ModeIndex]<<16; //熄灭LED灯
64 }
65 }
66 return 0;
67 }
68
69 //********************************************************************************************************
70 //延时函数
71 void delay(int dly)
72 {
73 int i,j;
74 for(i=0; i 76 77 } 78 79 //******************************************************************************************************** 80 //外部中断0服务程序 81 void __irq IRQ_Eint0(void) 82 { 83 ModeSel=0; //设置LED工作模式 84 while((EXTINT&0x01)!=0) 85 { 86 EXTINT=0x01; //清除中断标志 87 } 88 VICVectAddr=0; 89 } 90 91 //******************************************************************************************************** 92 //外部中断1服务程序 93 void __irq IRQ_Eint1(void) 94 { 95 ModeSel=1; //设置LED工作模式 96 while((EXTINT&0x02)!=0) 97 { 98 EXTINT=0x02; //清除中断标志 99 } 100 VICVectAddr=0; 101 } 102 103 //******************************************************************************************************** 104 //外部中断2服务程序 105 void __irq IRQ_Eint2(void) 106 { 107 if(DelayTime>30) 108 DelayTime=DelayTime-10; //减少延时 109 110 while((EXTINT&0x04)!=0) 111 { 112 EXTINT=0x04; //清除中断标志 113 } 114 VICVectAddr=0; 115 } 116 117 //******************************************************************************************************** 118 //外部中断3服务程序 119 void __irq IRQ_Eint3(void) 120 { 121 if(DelayTime<80) 122 DelayTime=DelayTime+10; //增加延时 123 124 while((EXTINT&0x08)!=0) 125 { 126 EXTINT=0x08; //清除中断标志 127 } 128 VICVectAddr=0; 129 } 130 131
下一篇:ARM与X86 CPU架构区别
史海拾趣
|
万年历不知那里错了,,写入1302里的程序,读出来数码管显示的不是数字,只有见到秒数那里在跳动,请大家帮手看看那里错了。。谢谢 SCLK EQU P3.2 IO EQU P3.3 RST EQU P3.4 YEAR DATA 66H ...… 查看全部问答> |
|
恳求各位前辈帮忙 从12864读数据,用现有的子程序调试,若给某地址(如0x80)写数据,下面一句紧跟着读数据的话,可以读出刚写数据的ASCII码(我把读回的数据用P1口LED灯显示)。但如果是先在不同地址写出多个数据,再对某一地址进行读数据操作,结 ...… 查看全部问答> |
|
最近小弟写了一个基于s3c2440的裸机i2c驱动可是怎么都不好使,调试时能写入但是不能读出为什么 编译环境keil uvion 4.01b 代码 这个是ii2.h #include \"S3C2440.h\" //引脚配置+电源配置+频率配置+iic配置 //函数iic写一个数据 iic读一个数据 ii ...… 查看全部问答> |
|
求一CE5.0下有开发经验的师傅一名,帮助小弟开发一个简单程序.重分相谢....急 小弟碰一项目,用pda扫描rfid. 小弟有程序开发经验.脑袋还算灵活 现求一高人在开发中指点一二. 重分相谢 留下QQ联系方式..谢谢.. 急,很急… 查看全部问答> |
|
有几个问题没懂: 1-TouchScreenCallbackSet(WidgetpointMessage); 2-WidgetMessageQueuePrecess(); 这个两句到底是传递的什么? 讨论下 ...… 查看全部问答> |
|
replyreload += \',\' + 1325359;今天是端午节放假第一天,正好有时间,就把LaunchPaD的题答了。刚把三个级别的题都答完。答题过程连猜带查资料,选择题都对了。不知道那几个填空题怎么样。 幸好是不限时,不然好多题肯定就做不对了。通过答题,觉 ...… 查看全部问答> |
|
大家好,我最近在学习boost电路,我有点不太明白,就是电感的两个峰值电流I1和I2,他们的平均电流IL到底是和输入电流相等,还是和输出电流相等啊?有的资料上是和输入,有的是和输出,希望大家帮忙指教。谢谢了……! 还有一个问题就是boost电路的 ...… 查看全部问答> |
|
请教STM32F103ZET FSMC 访问MT9076失败 E:/9076时序.jpg --------------FSMC 总线 存储器参数配置------------------------------*/ p.FSMC_AddressSetupTime =0x0F; //地址建立时间  ...… 查看全部问答> |




