ARM9控制LED流水灯程序设计
基于单片机AT89C51控制的键控流水灯课程设计报告
基于单片机AT89C51控制的键控流水灯课程设计报告————————————————————————————————作者:————————————————————————————————日期:宁波技师学院课程设计报告论文题目键控流水灯专业班级 ___学生姓名指导教师 _____宁波技师学院电气技术系二零一三9年21月摘要:单片机是一种集成电路芯片,采用超大规模技术,把具有数据处理能力的微处理器、随机存取数据存储器、只读程序存储器、输入输出电路、可能还包括定时计数器、串口通信口、显示驱动电路,脉宽调制电路、模拟多路转换器及A/D转换器等电路集成到一块芯片上,构成一个最小而完善的计算机系统.这些电路在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务.键控流水灯设计通过编写代码实现16个LED灯5种流水灯显示方式。
在设计中主要采用AT89C51这款芯片作为控制主体,用按钮来切换流水灯的发光方式来显示流水灯的发光模式。
系统通过P1口外接16个发光二极管,P3口接2个按键,一个按键进行方式选择,数码管显示方式编号;用一个键来控制流水灯流动的速度。
数码管接在AT89C51的P0和P2口上,而流水灯的发光二极管经过电阻接在P1口上。
设计中辅以简单的设备和必要的电路,设计了一款流水灯,最终达到预期的目的。
目录概述 .......................................................................................................... 错误!未定义书签。
1引言 ......................................................................................................... 错误!未定义书签。
2课题综述 .................................................................................................................... 错误!未定义书签。
ARM课程设计报告GPIO—流水灯
};
int main (void)
{
uint8 i;
//PINSEL1 = 0x00000000;//设置管脚连接GPIO
PINSEL2 = PINSEL2 & (~0x08);// P1[25:16]连接GPIO
图2
流水灯程序:
/
#include "config.h"
/* LED8~LED1 8个LED分别由P1.25~P1.18控制*/
const uint32 LEDS8 = (0xFF << 18);// P1[25:18]控制LED8~LED1,低电平点亮
/*
*********************************************************************************************************
SSPCR1 = (0x00 << 3) | // SOD从机输出禁能,1=禁止,0=允许
(0x00 << 2) | // MS主从选择,0=主机,1=从机
(0x01 << 1) | // SSE SSP使能,1=允许SSP与其它设备通信
(0x00 << 0); // LBM回写模式
SSPCPSR = 0x52; // PCLK分频值
一、设计目的………………………………………………3
二、设计原理
1、GPIO—流水灯……………………………………3
2、SPI…………………………………………………7
ARM9ARM11裸机开发笔记1之MDK开发环境和点亮LED
ARM9ARM11裸机开发笔记1之MDK开发环境和点亮LED很多从单片机或者从CM3转到ARM9/ARM11的时候,一开始就讲得是Uboot,Linux,然后就是什么QT等高级玩意,不像单片机有什么裸机开发的概念,的确,这些高级ARM本来就是用来跑系统,谁用来它做裸机开发呢。
但是如果我们要更好了解ARM的工作原理,,尤其是想进阶嵌入式中最难的一层,驱动层的话,甚至想把其它的非Linux系统移植到ARM9/ARM11上。
我们就无法避免要跟ARM跟底层的寄存器打交道,要了解ARM的内核,时钟,GPIO,SPI,等等外设的工作原理和配置。
通过裸机的一些实验,我们就可以像用STM32这样来写ARM9/ARM11代码,让我们更深入了解ARM的原理。
我之前因为在做把MF这个系统移植到S3C2416上,基本上都靠MDK来完成调试,对ARM9/ARM11的认识有了进一步的认识。
这里我就以S3C2416为例来讲怎么建立开发环境和点亮LED灯。
1、裸机开发必要条件:玩过ARM9之上同学都知道,ARM9之类的ARM是没有内部Flash的话,我们不能直接用开发软件来对烧写代码来调试硬件,这点跟我们开发单片机是最大的区别,也是导致很多人不知道怎么来进行ARM9的裸机开发。
有同学就说,没有Flash,还有RAM,没错S3C2416内部是有RAM,但是很小,S3C2416的内部RAM在用NAND启动时候,才8K而已,S3C2440的才4K,我们要在这8K的RAM既放存数据还要放代码,那我们写不了几行代码。
所以最好的方法就是用Uboot,先把芯片的时钟,SDRAM都初始化好,那我们就可以用SDRAM来调试代码,一般都有64M的SDRAM,对我们来完全足够用了。
这里我只在开发上烧写了Uboot,内核跟文件系统都没有烧,因为如果Uboot引导了Linux内核后,Linux内核接到CPU的控制权,Debug会被关掉,我们就无法再使用Jlink对开发进行调试。
ARM9无操作系统实验(一)LED部分
开始
设置 GPB5 为输出状态
置位 GPB5,LED0 熄灭
设置 GPB 端口禁止上拉
清零 GPB5,点亮 LED0
结束
将程序加载到开发板上,就可以看实验的结果了,其它 LED 灯的控制和 LED0 一样,只是 寄存器的设置值不同罢了。
实验二、流水灯 终于能点亮一个 LED 灯了,那么它有什么用呢?它的主要用途在于一些状态的显示上,
GPB5 LED0 GPB6 LED1 GPB8 LED2 GPB10 LED3 ********************************************/
/*---------地址声明----------*/
#include "2440addr.h"
注释:在本程序的开头,引入一个 2440addr.h 的头文件,该文件中定义了我们要常用的 寄存器的地址,以后的程序中,只需引入即可。引入的方法是将这个头文件直接放在 ADS 安装文件的 include 中就行了。
S3C2440 无操作系统实验——LED 部分
S3C2440 无操作系统实验(一)——LED 部分
小小达摩 2011-6-23
硬件:飞凌 FL2440 开发板 软件:ADS1.2
拿到 ARM 开发板,应该从哪儿开始学习呢?困扰了很多初学者,当然也正在困扰我, 因为我也是初学者。所以我想与其困惑,还不如先做些自己能做的,将会做的做熟悉了,也 许就找到学习的方向了吧。那么从哪儿入手呢,想来想去,那就从点亮一个 LED 灯作为学 习的起点。虽然很多人,不推荐用学习单片机的模式来学习 ARM,但是我感觉基础还是重 要的,再说高级的学习暂时也不会呀,呵呵。虽然这样学习会慢点,但是总比开发板落厚厚 一层灰要划得来吧(开发板买了快 2 年了,拿来玩的时间不超过 2 个月,也许很多朋友都有 这样的经历吧)。所以,把它拿出来,开始学习吧。
基于单片机的LED流水灯控制
课程设计说明书课程名称:单片机原理及应用设计题目:基于单片机的LED流水灯控制院系:信息技术学院专业:计算机科学与技术2013年1月10日基于单片机的LED流水灯控制摘要基于单片机的LED流水灯的应用十分广泛,由单片机作为的核心控制器,通过按键实现控制功能和数据输入是非常普遍的。
通常在所需按键数量不多时,系统常采用独立式按键。
这种按键的电路配置灵活,软件结构简单。
由于实际应用中,不同系统对按键的要求不同,因此,对按键程序的设计要考虑全面,以便更好地完成按键所设定的功能,简述了该系统中一些重要芯片的基本工作原理,着重论述了硬件线路各个模块的设计思想。
进而熟练掌握相关专业基础知识的综合应用,提高学生的实际动手和设计能力。
本系统是基于AT89C51系列单片机为核心的LED流水灯设计,实现8个LED灯变化方向和速度的可调。
关键词:单片机独立式按键 LED目录第一章绪论 (1)1. 设计背景 (1)1.1设计目的 (1)1.2可行性分析及相关现状 (1)1.3意义 (2)第二章系统设计 (3)2系统设计 (3)2.1整体设计 (3)2.2模块设计 (4)第三章系统实现 (7)3.1整体仿真电路图 (7)3.2各部分模块原理 (7)3.2.1单片机最小系统 (7)3.2.2外围电路 (8)第四章核心代码 (11)第五章调试 (14)第六章总结与致谢 (15)6.1总结 (15)6.2致谢 (15)第七章附录 (16)7.附录 (16)7.1源代码 (16)第一章绪论1.设计背景1.1设计目的通过本次课题设计,应用《单片机原理及应用》等所学相关知识及查阅资料完成简易LED流水灯系统设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。
1.2可行性分析及相关现状随着人们生活水平的提高,基于单片机的LED流水灯的应用越来越广泛,其中独立式键盘的扩展电路,该模块主要应用于仪器仪表、工业控制器、条形显示器、控制面板等实时性要求不太高的设备。
用单片机控制LED流水灯方案(电路程序全部给出)开关电源方案制作
用单片机控制的LED流水灯设计<电路、程序全部给出)开关电源设计制作学习园地»。
您尚未登录注册 | 社区服务 | 勋章中心 | 帮助 | 首页 | 无图版社区服务银行朋友圈开关电源设计制作学习园地 -> 好好学习-天天向上 -> 用单片机控制的LED流水灯设计<电路、程序全部给出) XML RSS2.0 WAP--> 本页主题: 用单片机控制的LED流水灯设计<电路、程序全部给出)加为IE收藏 | 收藏主题 | 上一主题 | 下一主题pwmdy级别: 电源-1级工程师精华: 0发帖: 212威望: 126 点金钱: 212 RMB贡献值: 0 点注册时间:2009-05-21最后登录:2009-11-22用单片机控制的LED流水灯设计<电路、程序全部给出)1.引言当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。
2.硬件组成按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。
AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。
单片机C语言LED灯点亮程序完全版
1例子1第二个灯亮#include<reg52.h>void main(){P1=0xfd;}#include<reg52.h>Sbit D1=P1^0;Void main(){D1=0}注意:稍微改程序时需重新hex化例子2第一个灯亮#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明void main() //主函数{led1=0; //将单片机P1.0口清零while(1); //程序停止在这里,在后面会讲到为什么这样写。
}例子3第一个灯亮#include<reg52.h> //52单片机头文件void main() //主函数{P1=0xfe; //将单片机P1口的8个口由高到低分别赋值为11111110 while(1); //程序停止在这里,在后面会讲到为什么这样写。
}2例子1第三个灯闪烁fir循环#include<reg52.h>sbit D2=P1^2;unsigned int a;void main(){D2=0;for(a=0;a<=10000;a++){};D2=1;for(a=0;a<=10000;a++){};}例子2第三个闪烁while循环#include<reg52.h>sbit D2=P1^2;unsigned int a;void main(){a=5000;D2=0;while(a--);a=5000;D2=1;while(a--);}2.#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明void main() //主函数{unsigned int i; //定义一个int型变量while(1){i=50000; //变量赋初值为50000led1=0; //点亮灯while(i--); //延时i=50000;led1=1; //熄灭灯while(i--);}}3例子1 3 5 7灯同时亮#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明sbit led3=P1^2; //单片机管脚位声明sbit led5=P1^4; //单片机管脚位声明sbit led7=P1^6; //单片机管脚位声明void main() //主函数{led1=0; //将单片机P1.0口清零led3=0; //将单片机P1.2口清零led5=0; //将单片机P1.4口清零led7=0; //将单片机P1.6口清零while(1); //程序停止在这里,在后面会讲到为什么这样写。
基于单片机编程的流水灯设计原理++含程序
1.引言当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。
2.硬件组成按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。
AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。
因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
其具体硬件组成如图1所示。
图1 流水灯硬件原理图从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。
因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。
在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。
用单片机控制的LED流水灯设计(电路、程序全部给出)
1.引言当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。
2.硬件组成按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。
AT89C51单片机是美国ATM EL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz 工作频率,使用AT89C51单片机时无须外扩存储器。
因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
其具体硬件组成如图1所示。
图1 流水灯硬件原理图从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。
因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。
在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。
arm实验报告——流水灯
实验六 ARM环境下汇编语言与C语言实验一、实验目的1 掌握基本的ARM汇编语言和C语言编程方法2 掌握ADS下C语言和汇编语言互相调用的方法3 深入理解ARM开发环境的体系结构4 初步掌握S3C2410的I/O口德操作方法5 巩固使用AXD和Multi-ICE调试的方法二、实验内容1 单独使用ARM汇编语言编写一个程序,在AXD下调试,观察结果。
2 采用内嵌汇编和C完成一个工程在AXD下调试,观察结果。
3 用C语言实现跑马灯功能。
三、实验设备1 硬件:DM2410B+实验系统PC机JTAG仿真器串口线2 软件:PC机操作系统ARM Developer Suiter v1.2Multi-ICE v2.2.5(Build1319)DNW2410(或超级终端)四、实验说明汇编语言程序实验程序程序代码如下:#include <string.h>#include "2410addr.h"#include "2410lib.h"//================================ //名称:Led_Test//功能:LED循环显示//参数: void//返回值: void//================================ void Led_Test(){unsigned long LED;Uart_Printf("Led_Test.\n");//GPBCON GPB10 [21:20] = 01 : Output//GPBCON GPB10 [19:18] = 01 : Output//GPBCON GPB10 [17:16] = 01 : Output//GPBCON GPB10 [15:14] = 01 : OutputrGPBCON &= (~(0x3<<20));rGPBCON |= ((0x1<<20));rGPBCON &= (~(0x3<<18));rGPBCON |= ((0x1<<18));rGPBCON &= (~(0x3<<16));rGPBCON |= ((0x1<<16));rGPBCON &= (~(0x3<<14));rGPBCON |= ((0x1<<14));//GPBDAT GPB[10:0] [10:0] : Output DatarGPBDAT = 0xf7f;Delay(100);Uart_Printf("PRESS ANY KEY TO STOP.");while (!Uart_GetKey()){LED = rGPBDAT;LED = (LED<<1); //下一个灯亮rGPBDAT = LED;Delay(200);if(!(rGPBDAT & 0x400)) //保证第四个LED点亮后重新点亮第一个LED;rGPBDAT=0xf7f;Delay(200);}Uart_Printf("\nTEST FINISHED.");}//============================//名称:delay//功能:延迟指定时间//参数: x//返回值: void//============================void delay(unsigned int x){unsigned int i,j,k;for(i=0;i<=x;i++)for(j=0;j<0xff;j++)for(k=0;k<0xff;k++);}六实验步骤第一大部分(目标机的连接):把开发板电源接口、Muilti-ICE Embeded接口连接好,如下图,然后打开开发板电源。
单片机AT89C51可控流水灯课程设计报告(汇编语言)参考模板
目录目录 (1)第一章课题的意义及应用 (2)第二章系统的总体设计 (3)2.1 设计方法 (3)2.2 数码管显示方案 (3)2.3 键盘输入方案 (4)第三章硬件电路设计 (4)3.1电路原理 (4)3.2单片机最小系统 (5)3.3系统工作流程 (5)第四章程序设计 (6)4.1系统总体结构框图 (6)4.2 系统流程图 (6)第五章调试 (7)5.1正常现象 (7)5.2出现的故障 (7)第六章心得体会 (9)参考文献 (9)附录1 (10)程序: (10)附录2 (19)仿真电路图: (19)实验箱接线图: (19)流程图: (20)第一章课题的意义及应用当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。
计算机作为一种快速通用的计算工具方便了用户的使用。
计算机可谓是我们最亲密的电子伙伴之一。
本设计着重在于分析计算机软件和开发过程中的环节和步骤,并从实践经验出发对计算机设计做了详细的分析和研究。
单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。
在工业生产中。
单片微型计算机是微型计算机称单片机,特别适用于控制领域,故又称为微控制器。
单片机的应用日益广泛,如应用在仪器仪表,家用电器和专卖装备的智能化以及过程控制等方面,单片机在人们的日常生活和工作中正扮演着越来越重要的角色。
本系统就是充分利用了AT89C51芯片的I/O引脚。
系统以采用MCS-51系列单片机为中心器件来设计LED流水灯系统,实现8个LED流水灯的各种显示方式,并实现循环的速度可调,暂停及复位功能。
通过本次课题设计,应用《单片机原理及接口技术》等所学相关知识及查阅资料,完成可控流水灯设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。
通过本次设计的训练,可以使我在基本思路和基本方法上对基于MCS-51单片机的嵌入式系统设计有一个比较感性的认识,并具备一定程度的设计能力。
单片机课程设计--基于单片机的LED流水灯系统设计
单片机课程设计报告项目名称:基于单片机的LED流水灯系统设计目录第一章绪论--------------------------------------------------------------------------- 21.1 课题简介 ----------------------------------------------------------------------------------- 2 1.2 设计目的 ----------------------------------------------------------------------------------- 2 1.3 设计任务 ----------------------------------------------------------------------------------- 2 1.4 设计方法 ----------------------------------------------------------------------------------- 3第二章设计内容与所用器件 ------------------------------------------------------- 4第三章方案论证与比较 ----------------------------------------------------------- 5 3.1循环移位法--------------------------------------------------------------------------------- 5 3.2查表法 -------------------------------------------------------------------------------------- 5 3.3位控法--------------------------------------------------------------------------------------- 5第四章硬件系统设计 ---------------------------------------------------------------- 7 4.1 键盘接口电路----------------------------------------------------------------------------- 7 4.2 7段LED数码管 -------------------------------------------------------------------------- 8 4.3 程序下载接口----------------------------------------------------------------------------- 8 4.4 数码管驱动芯片-------------------------------------------------------------------------- 8 4.5、单片机时钟电路 ------------------------------------------------------------------------ 8 4.6、单片机复位电路 ------------------------------------------------------------------------ 9第五章软件设计 ---------------------------------------------------------------------- 7 5.1 汇编语言和C语言的特点及选择 ---------------------------------------------------- 7 5.2 LED显示原理 ----------------------------------------------------------------------------- 8第六章系统调试与存在的问题 ---------------------------------------------------- 9 6.1 硬件调试 ----------------------------------------------------------------------------------- 9 6.2 软件调试 ----------------------------------------------------------------------------------- 9总结 ----------------------------------------------------------------------------------- 10参考文献------------------------------------------------------------------------------- 10附录------------------------------------------------------------------------------------16第一章绪论1.1 课题简介当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。
单片机控制LED灯点亮(C语言)
将0xfe赋给P1口,然后使用移位函数来改变P1口的值,达到流水灯的效果 移位函数: _crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回 。 _crol_,_cror_: c51中的intrins.h库函数
程序如下:
随后会弹出一个对话框,要求选择单片机的型号。在该对话框中显示了Vision2的器件数据库,从中可以根据使用的单片机来选择。
PART ONE
AT89S52
8051 based Full Static CMOS controller with Three-Level Program Memory Lock, 32 I/O lines, 3 Timers/Counters, 8 Interrupts Sources, Watchdog Timer, 2 DPTRs(DATA POINTER REGISTERS ), 8K Flash Memory, 256 Bytes On-chip RAM 基于8051全静态CMOS控制器、 三级加密程序存储器 、 32个I/O口 、三个定时器/计数器 、八个中断源 、看门狗定时器、2 个数据指针 寄存器、8k字节Flash,256字节片内RAM
十六进制整常数
十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。 以下各数是合法的十六进制整常数: 0X2A(十进制为42) 0XA0 (十进制为160) 0XFFFF (十进制为65535) 以下各数不是合法的十六进制整常数: 5A (无前缀0X) 0X3H (含有非十六进制数码)
各种进位制的对应关系
十进制
二进制
十六进制
十进制
二进制
十六进制
0
0
0
9
1001
嵌入式ARM9通过寄存器控制led灯
0x0
GPBDAT数据
0x56000014
读/写
此寄存器只使用了11位。每位对应一个引脚。
0=低电平(亮) 1=高电平
未定义
GPBUP
0x56000018
读/写
禁止b组上拉
0x0
保留
0x5600001c
-
保留
未定义
循环显示led灯
#define rGPBCON(*(int *)0x56000010)
rGPBDAT=reg;
}
void Delay(void)
{
int i;
for(i=0;i<0x200000;i++)
;
}
voidMain()
{
int reg;
InitLed();
while(1){
reg=rGPBDAT;
reg^=(0xf<<5);
rGPBDAT=reg;
Delay();
}
}
init.s代码
通过寄存器控制led灯。
cpu通过GPIO(通用输入输出)控制标准的输入输出。cpu一共有150根针与gpio连接。Gpio可以定义为输入,也可以定器。并且映射到0~4G的寻址空间中的某个固定的地址。Gpio中的寄存器管理GPIO中的引脚,管理到每一根引脚。
#define rGPBDAT(*(int *)0x56000014)
void InitLed(void)
{
int reg;
reg=rGPBCON;
reg&=~(0xff<<10);//也可用0x015400
reg|=(0x55<<10);
LED流水灯单片机的设计
LED流水灯单片机的设计引言:设计目标:设计一个能够实现LED流水灯效果的电路,使用单片机控制灯光的亮灭和流动速度,并通过按键控制流水灯的运行。
设计过程:1.硬件设计:1.1 选择LED:选择合适的LED灯珠,通常使用常见的5mm圆形LED 灯。
1.2连接方式:将多个LED按照串联或并联方式连接,以形成流水灯效果。
1.3电流限制:通过串联合适的电阻,将电流限制在每个LED的额定值以下。
2.单片机选型:2.1功能要求:选择具备足够的I/O管脚数量,用于控制LED的亮灭和流动速度,以及接受按键输入的单片机。
2.2仿真和编程支持:选择具备仿真和编程支持的单片机,以方便调试和开发。
3.单片机与LED的连接:3.1端口选择:选择合适的I/O口进行连接,根据LED连接方式决定使用串口或并口进行连接。
3.2串行或并行输出:设置相应的单片机端口为输出模式,并将其与LED连接。
4.软件设计:4.1初始化:对单片机进行初始化设置,包括设置I/O口状态和初始化计时器。
4.2流水灯特效:使用循环控制语句控制LED流动的方向和速度,并通过改变LED的亮灭状态实现不同的灯光效果。
4.3按键控制:使用中断或轮询方式检测按键输入,并通过控制流水灯的运行状态来实现按键控制功能。
5.测试和调试:5.1仿真调试:使用仿真软件对设计的电路和代码进行调试,确保运行正常。
5.2硬件调试:将设计的电路和程序烧入实际的单片机和电路板中,通过观察和测试,确保流水灯的特效和按键控制功能正常。
总结:LED流水灯单片机设计是一个简单且具有实践意义的项目,通过设计和控制LED流水灯,可以提高对单片机的理解和熟练程度。
本文介绍了设计流程和关键步骤,希望对读者有所帮助。
通过本项目的实践,可以进一步扩展其他LED灯光效果的设计和控制。
ARM流水灯课设
一.Cortex系列ARM核心及体系结构介绍众所周知,英国的ARM公司是嵌入式微处理器世界当中的佼佼者。
ARM一直以来都是自己研发微处理器内核架构,然后将这些架构的知识产权授权给各个芯片厂商,精简的CPU 架构,高效的处理能力以及成功的商业模式让ARM公司获得了巨大的成功,使他迅速占据了32位嵌入式微处理器的大部分市场份额,甚至现在,ARM芯片在上网本市场的也大有与INTEL的ATOM处理器一较高低的实力。
目前,随着对嵌入式系统的要求越来越高,作为其核心的嵌入式微处理器的综合性能也受到日益严峻的考验,最典型的例子就是伴随3G网络的推广,对手机的本地处理能力要求很高,现在一个高端的智能手机的处理能力几乎可以和几年前的笔记本电脑相当。
为了迎合市场的需求,ARM公司也在加紧研发他们最新的ARM架构,Cortex系列就是这样的产品。
在Cortex之前,ARM核都是以ARM为前缀命名的,从ARM1一直到ARM11,之后就是Cortex系列了。
Cortex在英语中有大脑皮层的意思,而大脑皮层正是人脑最核心的部分,估计ARM公司如此命名正有此含义吧。
发布于2005年,根据应用和需求划分成整套系列的完整解决方案Cortex-A:针对复杂OS和应用程序Cortex-R:针对实时系统的嵌入式处理器Cortex-M:针对价格敏感应用领域的嵌入式处理器ARM Cortex处理器系列都是基于ARMv7架构的产品,从尺寸和性能方而来看,既有少于33000个门电路的Cortex-M系列,也有高性能的Cortex-A系列。
其中,Cortex-A系列是针对日益增长的,运行包括Linux、Windows,CE和Symbian操作系统在内的消费娱乐和无线产品设计的;ARM Cortex-R系列针对的是需要运行实时操作系统来进行控制应用的系统,包括汽车电子、网络和影像系统;ARM Cortex-M系列则面向微控制器领域,为那些对开发费用非常敏感同时对性能要求不断增加的嵌入式应用所设计的。
单片机-流水灯的程序
void main() {
Led = 0xfe; while(1) { P2 = Led;
for(i=1;i<800;i++) for(j=1;j<800;j++); Led = Led << 1; if(P2 == 0x00 ) {Led = 0xfe; } } }
方法四:利用移位操作实现流水灯(8位二极管循环点亮)
假设机器字长为8位,变量a的值为16,将a左移二位,即 a=a<<2: 左移前 0001 0000
左移后 0100 0000
由此看出,左移一位相当于该数乘2,左移二位相当于乘4 ,即22,但这要以该数左移之后不“溢出”为前提。所谓“溢出 ”指该数已超过机器字长所能容纳的范围,如该例若继续左移二 位,该数为16× 24=256,超出了字长8位的表示范围(257),
void main() { while(1) {
led1=0; delay(120);
led2=0; delay(120);
led3=0; delay(120);
led4=0; delay(120);
led5=0 ; delay(120);
led6=0; delay(120);
led7=0; delay(120);
即产生了溢出。
二、按位右移
按位右移是将一个运算量的各位依次右移若干位, 低位被移出,高位对无符号数补0,对有符号数要按最 高符号位自身填补。
右移一位相当于该数除以2,但有可能带来误差。假设机器 字长为8位,变量a值为15,将a右移二位,即a=a>>2:
右移前 0000 1111
右移后 0000 0011
单片机-流水灯的程序
9.Cortex-A9LED汇编、C语言驱动编写
9.Cortex-A9LED汇编、C语言驱动编写0. 前言一般我们购买一个开发板,厂家都会给出对应的电路图文件,我们可以通过搜索对应名称来查找到对应的外设。
对于驱动工程师来说,我们只需要知道外设与SOC交互的一些数据线和信号线即可。
用主控芯片控制这些外设的一般步骤:1. 看电路原理图,弄明白主控芯片和外设是怎么连接的,对于驱动工程师来说,主要是看外设的一些clk、数据引脚、控制引脚是如何连接的;2. 外设一般都会连接到SOC的1个或者多个控制器上,比如i2c、spi、gpio等,有的是数据线有的是信号线,中断线等;3. 根据电路连接和需求对主控芯片进行设置,往往对外设的设置都是通过寄存器操作实现;4. 书写相应代码,实现功能,不同类型的外设,代码结构也不尽相同,比如按键,我们既可以通过轮询方式读取按键信息,也可以通过中断方式来读取。
下面我们就以华清远见的fs4412开发板为例来看如何编写led的裸机程序。
SOC exynos 4412 datahseet 下载地址自行搜索。
一、LED灯电路图通过后续的章节的一些常用外设的分析,相信大家会掌握如何查阅电路图。
首先看下led电路图:LED电路图1. 该板子有4个LED,是发光二极管,有电流是为蓝色;2. led都接了上拉电阻;3. 三极管的基极接了SOC的某个GPIO引脚;4. 比如GPX1_0,当该引脚为高电平是,三极管pn结导通,于是LED3两侧就有了电势差,LED3被点亮,如果该引脚为低电平,pn结截止,LED3两侧就没有了电势差,LED3熄灭。
下面是CPU核访问GPIO控制器的数据通路:1. AHB:高速总线2. APB Bridge:APB总线桥3. APB:外设总线,低速总线4. GPIO挂载在APB总线上由上图可知,cpu要访问GPIO的寄存器需要经过的路径。
二、GPIOGPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华东交通大学理工学院课程设计报告书课程名称嵌入式系统原理及应用题目ARM9 I/O口控制LED流水灯程序设计分院电信分院专业班级通信工程2008-2学号**************学生姓名骆玉春指导教师徐涢基2012年12月30 日华东交通大学理工学院课程设计任务书专业通信工程班级2008级2班姓名骆玉春一、课程设计题目ARM9 I/O口控制LED流水灯想设计二、课程设计工作:自2011 年12 月28 日起至2012 年 1 月 2 日止。
三、课程设计的内容要求:1.了解ARM9的I/O口的工作原理;2.基于arm920T的内核,在开发板或者实验箱上,实现LED的流水控制;3.了解I/O口怎么控制LED的输出;4.掌握设置I/O口的状态需要设置的寄存器GPB CON、GPBDAT、GPBUP;5.掌握在ADS环境下建立工程,用H-JTAG来调试程序,生成.HEX 文件;6.总结本次课程设计的知识点。
学生签名:201 年月日课程设计评阅意见评阅人职称20 年月日目录课程设计任务书 (2)第1章课程设计目的 (4)第2章S3C2440的I/O口配置 (5)第3章S3C2440的I/O口寄存器 (6)第4章课程设计过程 (9)4.1 设计步骤 (9)4.2 部分原理图 (9)4.3 源程序 (10)4.4 编译调试结果 (17)第8章课程设计心得 (19)参考文献 (20)第1章课程设计目的这学期开了嵌入式这门课程,之前就了解到嵌入式系统是当前最热门最有发展前途的IT 应用领域之一。
嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。
特别是随着消费家电的智能化,嵌入式更显重要。
像我们平常常见到的手机、可视电话、PDA、电子字典、VCD/DVD/MP3 Player、机顶盒(Set Top Box)、数字相机(DC)、数字摄像机(DV)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。
随着社会的发展,嵌入式在未来的应用会越来越广泛。
随着物联网的时代的到来,电器将会与互联网,移动电话成为一体,通过无线通信技术以及互联网技术将可以使人们在任何时候控制电器等的工作。
通过这次课程设计使我们了解基本的嵌入式编程方法以及培养我们对嵌入式编程的兴趣,与此同时,我们还能巩固一下C编程和汇编编程基础,为将来的嵌入式学习和工作做好充足的准备!第2章S3C2440的I/O口配置在S3C2440 的CPU中有130多个多功能的输入输出引脚,分为8个端口,如下所示:- Port A(GPA): 25-output port- Port B(GPB): 11-input/out port- Port C(GPC): 16-input/output port- Port D(GPD): 16-input/output port- Port E(GPE): 16-input/output port- Port F(GPF): 8-input/output port- Port G(GPG): 16-input/output port- Port H(GPH): 9-input/output port- Port J(GPJ): 13-input/output port每个端口可以很容易地通过软件配置,以满足不同的系统配置和设计要求。
如果引脚不用于复用功能,则引脚可配置为普通的I/O口。
它们的寄存器是相似的:GPxCON用于选择引脚功能,GPxDAT用于都/写引脚数据,GPxUP用于确定是否使用内部上拉电阻(x为A、B、..........、H、J,注意没有GPAUP)。
1.GPxCON中每两位控制一根引脚:00表示输入、01表示输出、10表示特殊功能、11保持不用。
其中GPBCON 中共有22位来管理GPB的功能设置,每两位来管理一个口的功能设置,两位共有四种状态,当GPB中的两位值为00时,配置为输入功能;配置为01时,是输出功能;10为复用功能;11为保留状态。
2.GPxDAT用于读/写引脚:当引脚设为输入时,读此寄存器可知相应引脚的状态是高是低。
当引脚设为输出时,写此寄存器相应位可令此引脚输出低电平或高电平。
3. GpxUPGPBUP宫11位,每一位代表一个管脚的上拉功能,某位为0时,相应引脚上拉功能被使能,为1时,相应引脚被禁止使用上拉功能。
第3章S3C2440的I/O口寄存器LED灯是接在某一个I/O上的,点亮或者熄灭LED灯其实就是对I/O寄存器的操作。
ARM的I/O口寄存器主要包括端口配置寄存器GPXCON、端口数据寄存器GPXDAT、端口上拉电阻使能寄存器GPXUP、MISCELLANEOUS控制寄存器和外部中断寄存器五种(其中X为芯片的I/O口字母)。
在这个课程设计我们只用前三个寄存器,下面就对着三个寄存器进行简单的介绍。
对于ARM芯片来说,它的寄存器很多,为了区分不同的寄存器,系统给每个寄存器都分配了一个固定的地址,地址就像每个人的身份证一样,是唯一的。
那么当你使用这个地址的时候ARM就知道你要使用哪个寄存器了,所以在编程的时候,首先要声明待操作的寄存器地址。
下表就是本次课程设计要用到的寄存器的地址和位定义:ARM芯片找到相应寄存器后,也先要设置端口配置寄存器GPBCON,也就是告诉寄存器做好接收数据或者输出数据或者响应外部中断的准备,下表为它的功能描述:ARM设置完I/O口状态后,就准备读/写数据了。
这个功能可以通过设置数据寄存器GPBDAT来实现。
下表即为它的功能描述:ARM设置完I/O口状态后,就准备读/写数据了。
这个功能可以通过设置数据寄存器GPBDAT来实现。
下表即为它的功能描述:设置完前两个寄存器后,还要设置上拉电阻使能寄存器GPBUP,顾名思义,它的作用就是告诉ARM这个端口要不要配置上拉电阻。
上拉电阻、下拉电阻的作用在于,当IO引脚处于第三态(即不是高电平,也不是低电平,而是高阻态,相当于没接芯片)时,它的电平状态由上拉电阻、下拉电阻确定。
下表为它的功能描述:当为0时,上拉电阻是允许的;反之,则上拉电阻是被禁止的。
到此,需要的寄存器就配置完成了,那么接下来介绍下LED在开发板上的电路原理图。
第4章课程设计过程4.1 设计步骤1.连接好实验环境,将仿真器的一端通过并口连接到PC机,将仿真器的另一端通过JTAG先连接到开发板JTAG接口。
2.将串口线一端接到PC机,另一端接到S3C2440的UART0接口;打开串口超级终端,设置串口属性为COM1,串口波特率(Baudrout)为115200,校验位无,数据位为8,停止位为1,检查连接是否可靠,可靠后,接入电源线,给系统上电,同时按住空格键,进入VIVI状态。
3.打开ADS codeWarrior,在ADS codeWarrior中创建工程编写代码,并对工程进行编译。
4.使用H-JTAG进行调试。
5.打开ARM的开发环境AXD Debugger,在AXD Debugger中加载可执行映像文件LED_TEXT.axf。
6.在ADS调试环境处下,全速运行映像文件,观察LED灯LED1、LED2、LED3、LED4的闪亮情况—轮流闪烁。
4.2部分原理图图a图b上图a、b是实验的部分原理图,可以看出我们通过GPB5、GPB6、GPB7、GPB8来分别控制LED1、LED2、LED3、LED4。
4.3源程序:1.main.c#define rGPBCON (*(volatile unsigned *))0x56000010) //prot B contorl#define rGPBDAT (*(volatile unsigned *))0x56000010) //prot B data#define rGPBUP (*(volatile unsigned *))0x56000010) //pull-up control B void xmain(void){ChangeClockDivider(3,1); //设置时钟分频比1:3:6ChangeMPllValue(127,2,1); //设置主时钟频405MHZPort_Init(); //端口初始化Isr_Init(); //中断初始化Uart_Init(0, 115200); //串口初始化Uart_Select(0);Uart_Printf("the main is running\n");//向超级终端打印"the main is running"rGPBCON = rGPBCON & (~(0xf<<10)) |( 1<< 10) |(1 << 12);//将GPB5[11:10] 两位设置为01---即output状态,GPB6[13:12] 两位设置为01---即output状态rGPBCON = rGPBCON & (~(0xf<<14)) |( 1<< 14) |(1 << 16);//将GPB7[15:14] 两位设置为01---即output状态,GPB8[17:16] 两位设置为01---即output状态rGPBUP = rGPBUP&(~(0xF<<5))|(0xF<<5);//将GPB5、GPB6、GPB7、GPB8上拉电阻设置为disabledwhile(1){rGPBDAT = (rGPBDAT|(0xF<<5))&(~(0x1<<5)); //点亮LED1Delay(10000000);//延时rGPBDAT =( rGPBDAT|(0xF<<5))&(~(0x2<<5)); //点亮LED2Delay(10000000);// 延时rGPBDAT = (rGPBDAT|(0xF<<5))&(~(0x4<<5)); //点亮LED3Delay(10000000);// 延时rGPBDAT =(rGPBDAT|(0xF<<5))&(~(0x8<<5)); //点亮LED4Delay(10000000);// 延时rGPBDAT = (rGPBDAT|(0xF<<5))&(~(0x4<<5)); //点亮LED3Delay(10000000);// 延时rGPBDAT =( rGPBDAT|(0xF<<5))&(~(0x2<<5)); //点亮LED2Delay(10000000);// 延时rGPBDAT = (rGPBDAT|(0xF<<5))&(~(0x1<<5)); //点亮LED1Delay(10000000);// 延时}}2.2440lib.c//============================================================ =======// File Name : 2440lib.c// Function : S3C2440 PLL,Uart, LED, Port Init// Date :2011/22/28// Version : 0.1//============================================================ =======#include "def.h"#include "option.h"#include "2440addr.h"#include "2440lib.h"#include "2440slib.h"#include <stdarg.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <ctype.h>extern char Image$$RW$$Limit[];void *mallocPt=Image$$RW$$Limit;static int delayLoopCount;void Delay(int time) //延时函数{int i, adjust=0;if(time==0){time = 200;adjust = 1;delayLoopCount = 800;rWTCON = ((PCLK/1000000-1)<<8)|(2<<3);rWTDAT = 0xffff;rWTCON = ((PCLK/1000000-1)<<8)|(2<<3)|(1<<5); //Watch-dog timer start}for(;time>0;time--)for(i=0;i<delayLoopCount;i++);if(adjust==1){rWTCON = ((PCLK/1000000-1)<<8)|(2<<3); //Watch-dog timer stopi = 0xffff - rWTCNT; //1count->64us, 200*800 cycle runtime = 64*i usdelayLoopCount = 16000000/(i*64);//200*800:64*i=1*x:100 -> x=160000*100/(64*i)}}void Port_Init(void)//I/O口初始化{rGPACON = 0x7fffff;rGPBCON = 0x155555;rGPBUP = 0x7ff; // The pull up function is disabled GPB[10:0]rGPCCON = 0xaaaaaaaa;rGPCUP = 0xffff; // The pull up function is disabled GPC[15:0]rGPDCON = 0xaaaaaaaa;rGPDUP = 0xffff; // The pull up function is disabled GPD[15:0]rGPECON = 0xaaaaaaaa;rGPEUP = 0xffff; // The pull up function is disabled GPE[15:0]rGPFCON = 0x55aa;rGPFUP = 0xff; // The pull up function is disabled GPF[7:0]rGPGCON = 0xff95ffba;rGPGUP = 0xffff; // The pull up function is disabled GPG[15:0]rGPHCON = 0x2afaaa;rGPHUP = 0x7ff; // The pull up function is disabled GPH[10:0]rGPJDAT = (1<<12)|(0<<11);rGPJCON = 0x016aaaa;rGPJUP = ~((0<<12)|(1<<11));rGPJDAT = (0<<12)|(0<<11);rGPJCON = 0x016aaaa;rGPJUP = 0x1fff;//~((1<<12)|(1<<11));rEXTINT0 = 0x22222222; // EINT[7:0]rEXTINT1 = 0x22222222; // EINT[15:8]rEXTINT2 = 0x22222222; // EINT[23:16]}static int whichUart=1;void Uart_Init(int pclk,int baud)//串口初始化,设置时钟,波特率{if(pclk == 0)pclk = PCLK;rUFCON0 = 0x0; //UART channel 0 FIFO control register, FIFO disablerUFCON1 = 0x0; //UART channel 1 FIFO control register, FIFO disablerUFCON2 = 0x0; //UART channel 2 FIFO control register, FIFO disablerUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disable rUMCON1 = 0x0; //UART chaneel 1 MODEM control register, AFC disable //UART0rULCON0 = 0x3; //Line control register : Normal,No parity,1 stop,8 bitrUCON0 = 0x245; // Control registerrUBRDIV0 = 0x34;//UART1rULCON1 = 0x3;rUCON1 = 0x245;rUBRDIV1=( (int)(pclk/16./baud+0.5) -1 );//UART2rULCON2 = 0x3;rUCON2 = 0x245;rUBRDIV2=( (int)(pclk/16./baud+0.5) -1 );Uart_TxEmpty(whichUart);}void Uart_Select(int ch){whichUart = ch;}void Uart_TxEmpty(int ch){if(ch==0)while(!(rUTRSTAT0 & 0x4)); //Wait until tx shifter is empty.else if(ch==1)while(!(rUTRSTAT1 & 0x4)); //Wait until tx shifter is empty.else if(ch==2)while(!(rUTRSTAT2 & 0x4)); //Wait until tx shifter is empty. }void Uart_SendString(char *pt){while(*pt)Uart_SendByte(*pt++);}void Led_Display(int data) //LED显示{rGPFDAT = (rGPFDAT & ~(0xf<<4)) | ((~data & 0xf)<<4);}void Timer_Start(int divider) //0:16us,1:32us 2:64us 3:128us{rWTCON = ((PCLK/1000000-1)<<8)|(divider<<3); //Watch-dog timer control registerrWTDAT = 0xffff; //Watch-dog timer data registerrWTCNT = 0xffff; //Watch-dog count registerrWTCON = (rWTCON & ~(1<<5) & ~(1<<2)) |(1<<5);}int Timer_Stop(void){rWTCON = ((PCLK/1000000-1)<<8);return (0xffff - rWTCNT);}void ChangeMPllValue(int mdiv,int pdiv,int sdiv){rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;}void ChangeUPllValue(int mdiv,int pdiv,int sdiv){rUPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;}void Isr_Init(void)//中断初始化{pISR_UNDEF = (unsigned)HaltUndef;pISR_SWI = (unsigned)HaltSwi;pISR_PABORT = (unsigned)HaltPabort;pISR_DABORT = (unsigned)HaltDabort;rINTMOD = 0x0; //All=IRQ moderINTMSK = BIT_ALLMSK; //All interrupt is masked.rINTSUBMSK = BIT_SUB_ALLMSK;}4.4 编译调试结果第5章课程设计心得通过本次课程设计,使我对S3C2440体系结构理解更加深刻,以及对相应的寄存器操作更熟悉。