ARM7基础实验(附原理图)
- 格式:doc
- 大小:314.00 KB
- 文档页数:29
深圳大学实验报告实验课程名称:实验项目名称:基于ARM7芯片的数码相框开发学院:计算机与软件学院专业:软件工程报告人:学号:班级:同组人:学号:班级:指导教师:实验时间:2009-10-12 ~ 2010-9-12 实验报告提交时间:教务处制以上为整个系统简要流程图,之后各种模块实现皆是为此展开。
LCD显示图片原理:在系统内会有一段存储空间与显示屏的像素点对应,通过改变该存储空间的内容,从而改变显示屏的内容,该存储空间被称为Frame Buffer,或显存,显示屏上的每一点都必然与Frame Buffer 里的某一位置对应,所以解决显示屏的显示问题,首先需要解决的是Frame Buffer 的大小以及屏上的每一象素与Frame Buffer 的映射关系。
按照显示屏的性能或显示模式区分,显示屏可以以单色或彩色显示,我们的数码相框采用的是16位色(65536 种颜色)显示。
计算机反映自然界的颜色是通过RGB 值来表示的,如果要在屏幕某一点显示某种颜色,则必须给出响应的RGB 值,Frame Buffer 为屏幕提供显示的内容,就必须能够从Frame Buffer里得到每一个象素的RGB 值,在16 位/象素的模式下,Frame Buffer 里的每个单元16 位,每个单元代表一个象素的RGB 值,如下图显示:FrameBufferSize的大小计算公式如下图,所以640×480,16 位/象素,单屏幕模式,Frame buffer 大小为614400 个字节。
我们使用image2LCD软件将图片装换成数组形式,数组开始的8个数据为图片信息,之后数组中每2个数据为一个像素点的颜色,由数组开始的8个数据得出图片大小,按顺序排列之后数据便可在LCD中显示整个图片。
由于长度问题,存在高8位与低8位,所以像素点的对应RGB值为后一个数据左移8位再加上前一个数据。
LCD像素显示主要函数:void lcd_put_pixel(int x,int y,unsigned char c){long int base_addr;base_addr = 0xa0500000;if(x<1280 && y<480)//限制图片显示范围(*((unsigned char *)(base_addr+y*1280+x))) = c;}4*4键盘捕获原理:通过调用直入键盘接口和矩阵键盘、并初始化和调用键盘寄存器,实现了4*4键盘同时使用,使得系统可以通过键盘的按键来驱动8 段数码管的点亮(在此实验中,LED的点亮是为了检验按键是否正常,在日后版本中此功能可去掉)和做出相应图片处理效果。
嵌入式系统原理实验指导书 (Ver1.0刘永平编写西安邮电学院2009-5-10目录实验一 ARM 集成开发工具—— ADS 练习 ..............................................................5 1.1 实验目的 ......................................................................................................... 5 1.2实验设备 ......................................................................................................... 5 1.3 实验内容 ......................................................................................................... 5 1.4 实验预习要求 ................................................................................................. 5 1.5 实验步骤 ......................................................................................................... 5 1.6 思考 ............................................................................................................... 19 实验二汇编指令实验 1............................................................................................. 20 2.1 实验目的 ....................................................................................................... 20 2.2 实验设备 ....................................................................................................... 20 2.3 实验内容 ....................................................................................................... 20 2.4 实验预习要求 ............................................................................................... 20 2.5 实验步骤 ....................................................................................................... 21 2.6 实验参考程序 ............................................................................................... 23 2.7 思考 ............................................................................................................... 24 实验三汇编指令实验 2............................................................................................. 25 3.1 实验目的 ....................................................................................................... 25 3.2 实验设备 ....................................................................................................... 25 3.3 实验内容 ....................................................................................................... 25 3.4 实验预习要求 ............................................................................................... 25 3.5 实验步骤 ....................................................................................................... 26 3.6 实验参考程序 ............................................................................................... 27 3.7 思考 ............................................................................................................... 30 实验四GPIO 控制实验 ............................................................................................. 32 4.1 实验目的 ....................................................................................................... 41 4.2 实验设备 ....................................................................................................... 41 4.3 实验内容 ....................................................................................................... 41 4.4 实验原理 ....................................................................................................... 41 4.5 实验硬件原理图 ........................................................................................... 43 4.6 实验预习 ....................................................................................................... 44 4.7 实验过程 (44)4.8 实验参考程序 (44)4.9 思考 ............................................................................................................... 45 实验五UART 通信实验 . ........................................................................................... 485.1 实验目的 ....................................................................................................... 48 5.2 实验设备 ....................................................................................................... 48 5.3 实验内容 ....................................................................................................... 48 5.4 实验原理 ....................................................................................................... 49 5.5 实验硬件原理图 ........................................................................................... 49 5.6 实验预习 ....................................................................................................... 50 5.7 实验过程 ....................................................................................................... 50 5.8 实验参考程序 ............................................................................................... 51 5.9 思考 ............................................................................................................... 61 实验六中断实验 ........................................................................................................ 62 6.1 实验目的 ....................................................................................................... 62 6.2 实验设备 ....................................................................................................... 62 6.3 实验内容 ....................................................................................................... 62 6.4 实验原理 ....................................................................................................... 63 6.5 实验硬件原理图 ........................................................................................... 63 6.6 实验预习 ....................................................................................................... 63 6.7 实验过程 ....................................................................................................... 63 6.8 实验参考程序 ............................................................................................... 63 6.9 思考 (66)总论本实验包含两部分, 前面三个实验是 ARM 7指令系统指令实验, 使用 ADS 的编译器和调试器进行仿真调试,主要目的是掌握 ARM7的指令系统和开发工具的使用,理解 ARM CPU的工作过程。
主程序流程/*************************************************************************** * 文件名:LEDCON.C* 功能:LED闪烁控制。
对发光二极管LED4进行控制,采用软件延时方法。
* 使用I/O口直接控制LED,采用灌电流方式。
* 说明:将跳线器JP4_LED4短接。
**************************************************************************** #include "config.h"#define LEDCON 0x02000000 /* P0.25引脚控制LED4,低电平点亮 *//*************************************************************************** * 名称:DelayNS()* 功能:长软件延时* 入口参数:dly 延时参数,值越大,延时越久* 出口参数:无**************************************************************************** void DelayNS(uint32 dly){ uint32 i;for(; dly>0; dly--)for(i=0; i<50000; i++);}/*************************************************************************** * 名称:main()* 功能:控制LED闪烁**************************************************************************** int main(void){ PINSEL0 = 0x00000000; // 设置所有管脚连接GPIOPINSEL1 = 0x00000000;IO0DIR = LEDCON; // 设置P0.9连接的LED4控制口为输出while(1){ IO0SET = LEDCON;DelayNS(30);(1) 仿照上册“Keil for ARM实例2:A/D程序设计与电路彷真”的例子创建工程LedCon。
11.ADC数模转换——ARM的Proteus实验LED闪烁——ARM的Proteus实验实验原理ARM(LPC21XX)的一个I/O口接LED,通过给它送0和1来设置LED的亮和灭。
Proteus仿真电路图步骤KEIL1.创建新工程2.选择ARM型号(KEIL会自动生成启动代码startup.s)3.添加源文件,编写程序4.设置项目选项(是否输出hex、lst文件,设置linker script)Proteus1.绘制电路图2.载入程序3.仿真C语言源程序/******************************************************************************//**//* led.c: 用ARM点亮一个led并闪烁,有点浪费…… *//**//******************************************************************************/#include <LPC21xx.H>/*********************************************************************************函数名: delay()**描述: 软件延时********************************************************************************/void delay (void) {unsigned volatile long i,j;for(i=0;i<60000;i++)for(j=0;j<5;j++);}int main(void) {PINSEL0 = 0; /*设置引脚为GPIO */IO0DIR = 0x000001; /*将P0.0设置为输出 */IO0SET = 0x000001; /*将P0.0置1,也就是让led灭 */while (1) {IO0CLR = 0x000001;delay();IO0SET = 0x000001;delay();}}开关控制LED——ARM的Proteus实验实验原理ARM的P0.1口接按钮,再通过P0.0控制LED的亮、灭。
本实验的电路图以及实验均在上一个实验基础之上修改。
其中电路图只多了一个开关。
Proteus仿真电路图实验步骤略(与上一实验相同)C语言源程序/******************************************************************************//**//* led.c: 用ARM实现开关控制led并亮灭,还是有点浪费…… *//**//******************************************************************************/#include <LPC21xx.H>#define P0_1 0x02; /*P0.1*/ /*********************************************************************************函数名: delay()**描述: 软件延时********************************************************************************/void delay (void) {unsigned volatile long i;for(i=0;i<10000;i++);}int main(void) {int p01State;PINSEL0 = 0; /*设置引脚为GPIO */IO0DIR = 0x000001; /*将P0.0设置为输出 */IO0SET = 0x000001; /*将P0.0置1,也就是让led灭 */while (1) {p01State = IO0PIN&P0_1; /*读取开关状态*/if(p01State == 0){IO0CLR = 0x000001;delay();}else{IO0SET = 0x000001;delay();}}}LCD——ARM的Proteus实验实验原理ARM的P0.0口到P0.10口接LCD,P0.11接LED。
每过一段时间LED状态改变,LCD显示LED的状态。
Proteus仿真电路图C语言源程序#include <LPC21XX.H>#define rs (1<<8)#define rw (1<<9)#define en (1<<10)#define busy (1<<7) //P0.7typedef unsigned char uint8;uint8 ledDown[]={"The LED is down!"};uint8 ledUp[]={"The LED is up!"};void waitLCD() /*等待LCD*/ {IO0DIR=0xf00;while(1){IO0CLR=rs;IO0SET=rw;IO0SET=en;if(!(IO0PIN & busy))break;IO0CLR = en;}IO0DIR=0xfff;}void lcdOp(uint8 dat)/*送LCD控制码*/{waitLCD();IO0CLR=rs;IO0CLR=rw;IO0CLR=0xff;IO0SET=dat;IO0SET=en;IO0CLR=en;}void lcdData(uint8 dat)/*送LCD显示数据*/{waitLCD();IO0SET=rs;IO0CLR=rw;IO0CLR=0xff;IO0SET=dat;IO0SET=en;IO0CLR=en;}void lcdInit(void)/*初始化LCD,DataSheet里有建议的初始化代码*/ {/* LCD配置为两行,5*7字体 */lcdOp(0x38);lcdOp(0x38);lcdOp(0x06);lcdOp(0x0E);lcdOp(0x01);/* LCD配置为一行,5*10字体lcdOp(0x34);lcdOp(0x34);lcdOp(0x06);lcdOp(0x0E);lcdOp(0x01);*/}void lcdDisplay(uint8 addr,uint8 *p)/*LCD显示字符串*/{lcdOp(addr);while(*p !='\0'){lcdData(*(p++));}}void lcdClear(void)/*LCD清屏*/{lcdOp(0x01);}void delay (void) {unsigned volatile long i,j;for(i=0;i<60000;i++)for(j=0;j<10;j++);}int main(void){lcdInit();/*初始化LCD显示*/IO0DIR=0xfff;//设置为输出口IO0CLR=0xfff;while (1) {IO0CLR = 0x000800;lcdDisplay(0x80,ledUp);delay();lcdClear();IO0SET = 0x000800;lcdDisplay(0x80,ledDown);delay();lcdClear();}}UART——ARM的Proteus实验实验原理ARM的P0.0口接LED,串口接Proteus的虚拟终端。
每隔一段时间改变一次LED的状态,并且在串口上输出LED的当前状态。
Proteus仿真电路图C语言源程序#include <LPC21xx.H>#include "uart.h"#define CR 0x0Dchar ledDown[]={"The LED is down!\n"};char ledUp[]={"The LED is up!\n"};int putchar (int ch) {/* 向串口输出一个字符 */if (ch == '\n') {while (!(U1LSR & 0x20));U1THR = CR; a}while (!(U1LSR & 0x20));return (U1THR = ch);}void delay (void) {unsigned volatile long i,j;for(i=0;i<60000;i++)for(j=0;j<5;j++);}void serialPuts(char *p){/* 向串口输出字符串 */while (*p != '\0'){putchar(*p++);}}int main (void) {/* 开始初始化串口 */PINSEL0 = 0x00050000;/* 设置引脚,开串口功能 */U1LCR = 0x83;/* 8位数据,无效验,一个停止位 */U1DLL = 97;/* VPB 15MHz的时候波特率为9600 */U1LCR = 0x03;/* DLAB = 0 *//* 结束初始化串口 */IO0DIR = 0x000001;/*将P0.0设置为输出 */while (1) {IO0CLR = 0x000001;serialPuts(ledUp);delay();IO0SET = 0x000001;serialPuts(ledDown);delay();}}Eint1外部中断——ARM的Proteus实验实验原理ARM的P0.25接一个LED,引脚设置时连接EINT1功能,按钮触发中断。
中断服务程序另LED快速闪烁。
Proteus仿真电路图C语言源程序#include <LPC21XX.H>#define LEDCON 0x02000000/*LED接在P0.25上*/typedef unsigned int uint32;void IRQ_Eint1(void) __attribute__ ((interrupt));/*声明某函数为中断服务子程序的方法*/uint32 times = 100;/*循环次数默认为100*/void IRQ_Eint1(void){times = 5;while((EXTINT&0x02)!=0){EXTINT=0x02; //清除EINT1中断标志}VICVectAddr=0;}void delay100(void) {unsigned volatile long i,j;for(i=0;i<10000;i++)for(j=0;j<times;j++);if(times > 100){times--;}else if(times <100){times++;}}int main(void){IO0DIR = LEDCON;PINSEL0 = 0x20000000;/*引脚选中EINT1功能*/PINSEL1 = 0x00000000;/*以下为中断控制部分*/VICIntSelect=0;/*全部中断设置为IRQ,若某位为1是FIQ*/VICIntEnable=0x00008000;/*使能EINT1,EINT为第15位*/VICVectCntl1=0x2F;/*0xF,15号中断*/VICVectAddr1=(int)IRQ_Eint1;/*设置中断服务子程序*/EXTINT=0x07;while (1) {IO0CLR = LEDCON;delay100();IO0SET = LEDCON;delay100();}}多个外部中断——ARM的Proteus实验实验原理ARM开启两个中断源Eint1与Eint2,分别用一个按钮来控制。