职场流行英语口语100句.doc_第1页
职场流行英语口语100句.doc_第2页
职场流行英语口语100句.doc_第3页
职场流行英语口语100句.doc_第4页
职场流行英语口语100句.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

菜鸟的ARM学习笔记(第一阶段) 1. LED闪烁ARM的Proteus实验 2. 开关控制LEDARM的Proteus实验 3. LCDARM的Proteus实验 4. UARTARM的Proteus实验 5. Eint1外部中断ARM的Proteus实验 6. 多个外部中断ARM的Proteus实验 7. 中断结合串口ARM的Proteus实验 8. 定时器ARM的Proteus实验 9. SPI通信ARM的Proteus实验 10. SPI通信(多从设备)ARM的Proteus实验 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 /*函数名: delay()*描述: 软件延时*/void delay (void) unsigned volatile long i,j; for(i=0;i60000;i+) for(j=0;j5;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(); 开关控制LEDARM的Proteus实验实验原理ARM的P0.1口接按钮,再通过P0.0控制LED的亮、灭。本实验的电路图以及实验均在上一个实验基础之上修改。其中电路图只多了一个开关。Proteus仿真电路图实验步骤略(与上一实验相同)C语言源程序/*/* */* led.c: 用ARM实现开关控制led并亮灭,还是有点浪费 */* */*/#include #define P0_1 0x02;/*P0.1*/ /*函数名: delay()*描述: 软件延时*/void delay (void) unsigned volatile long i; for(i=0;i10000;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(); elseIO0SET = 0x000001;delay(); LCDARM的Proteus实验实验原理ARM的P0.0口到P0.10口接LCD,P0.11接LED。每过一段时间LED状态改变,LCD显示LED的状态。Proteus仿真电路图C语言源程序#include #define rs (18)#define rw (19)#define en (110)#define busy (17) /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;i60000;i+) for(j=0;j10;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(); UARTARM的Proteus实验实验原理ARM的P0.0口接LED,串口接Proteus的虚拟终端。每隔一段时间改变一次LED的状态,并且在串口上输出LED的当前状态。Proteus仿真电路图C语言源程序#include #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;i60000;i+) for(j=0;j5;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 #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;i10000;i+) for(j=0;j 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,分别用一个按钮来控制。在没有中断的时候两个LED都缓慢闪烁,当任何一个中断被出发的时候,对应的LED会急促闪烁,逐渐回复正常。Proteus仿真电路图C语言源程序#include #define LED1 0x02000000/*LED1接在P0.25上*/#define LED0 0x01000000/*LED0接在P0.24上*/typedef unsigned int uint32;void Eint1_ISR(void) _attribute_ (interrupt);/*声明某函数为中断服务子程序的方法*/void Eint0_ISR(void) _attribute_ (interrupt);uint32 times = 40;/*循环次数默认为40*/void delay40(void) unsigned volatile long i,j; for(i=0;i10000;i+) for(j=0;j 40) times-=2; else if(times 40) times+=2; void Eint0_ISR(void) times = 0; while(times!=40)IO0CLR = LED0;delay40();IO0SET = LED0;delay40(); while(EXTINT&0x01)!=0) EXTINT=0x01;/*清除EINT0中断标志*/ VICVectAddr=0x00;void Eint1_ISR(void) times = 0; while(times!=40)IO0CLR = LED1;delay40();IO0SET = LED1;delay40(); while(EXTINT&0x02)!=0) EXTINT=0x02;/*清除EINT1中断标志*/ VICVectAddr=0;int main(void)IO0DIR = LED1|LED0;PINSEL0 = 0x20000000;/*引脚选中EINT1功能*/PINSEL1 = 0x00000001;/*引脚选中EINT0功能*/*以下为中断控制部分*/VICIntSelect=0;/*全部中断设置为IRQ,若某位为1是FIQ*/VICIntEnable=0x0000C000;/*使能EINT1、0,EINT1为第15位,0为14位*/VICVectCntl0=0x2E;/*EINT0最高优先级*/VICVectAddr0=(int)Eint0_ISR;/*设置EINT0向量地址*/VICVectCntl1=0x2F;/*0xF,15号中断*/VICVectAddr1=(int)Eint1_ISR;/*设置中断服务子程序*/EXTINT=0x07; while (1) /*无中断时,两灯一起缓慢闪烁*/ IO0CLR = LED1|LED0;delay40(); IO0SET = LED1|LED0;delay40(); 中断结合串口ARM的Proteus实验实验原理同上多中断源实验相同,ARM开启两个中断源Eint1与Eint2,分别用一个按钮来控制。在没有中断的时候两个LED都缓慢闪烁,当任何一个中断被出发的时候,对应的LED会急促闪烁,逐渐回复正常。此外,使用一个串口来发送当前状态,在无中断的时候发送正常状态报告,当有中断的时候,串口发送中断源。Proteus仿真电路图C语言源程序文件一:main.c#include #include uart0.h#define LED1 0x02000000/*LED1接在P0.25上*/#define LED0 0x01000000/*LED0接在P0.24上*/typedef unsigned int uint32;void Eint1_ISR(void) _attribute_ (interrupt);/*声明某函数为中断服务子程序的方法*/void Eint0_ISR(void) _attribute_ (interrupt);uint32 times = 40;/*循环次数默认为40*/char status = Everytnig is fine.;char eint0Str = Interruption EINT0 activated!;char eint1Str = Interruption EINT1 activated!; void delay40(void) unsigned volatile long i,j; for(i=0;i10000;i+) for(j=0;j 40) times-=2; else if(times 40) times+=2; void Eint0_ISR(void) times = 0; while(times!=40)IO0CLR = LED0;delay40();IO0SET = LED0;delay40();serialPuts(eint0Str); while(EXTINT&0x01)!=0) EXTINT=0x01;/*清除EINT0中断标志*/ VICVectAddr=0x00;void Eint1_ISR(void) times = 0; while(times!=40)IO0CLR = LED1;delay40();IO0SET = LED1;delay40();serialPuts(eint1Str); while(EXTINT&0x02)!=0) EXTINT=0x02;/*清除EINT1中断标志*/ VICVectAddr=0;int main(void)IO0DIR = LED1|LED0;PINSEL0 = 0x20000005;/*引脚选中EINT1功能,开串口UART0*/PINSEL1 = 0x00000001;/*引脚选中EINT0功能*/*以下为中断控制部分*/VICIntSelect=0;/*全部中断设置为IRQ,若某位为1是FIQ*/VICIntEnable=0x0000C000;/*使能EINT1、0,EINT1为第15位,0为14位*/VICVectCntl0=0x2E;/*EINT0最高优先级*/VICVectAddr0=(int)Eint0_ISR;/*设置EINT0向量地址*/VICVectCntl1=0x2F;/*0xF,15号中断*/VICVectAddr1=(int)Eint1_ISR;/*设置中断服务子程序*/EXTINT=0x07;uart0Init(); while (1) /*无中断时,两灯一起缓慢闪烁*/ IO0CLR = LED1|LED0;delay40(); IO0SET = LED1|LED0;delay40();serialPuts(status); 文件二:uart0.c#include #include uart0.h#define CR 0x0Dint putchar (int ch) /* 向串口输出一个字符 */ if (ch = n) while (!(U0LSR & 0x20); U0THR = CR; while (!(U0LSR & 0x20); return (U0THR = ch);void serialPuts(char *p)/* 向串口输出字符串 */ while (*p != 0) putchar(*p+); putchar(n);void uart0Init(void) U0LCR = 0x83;/* 8位数据,无效验,一个停止位 */ U0DLL = 97;/* VPB 15MHz的时候波特率为9600 */ U0LCR = 0x03;/* DLAB = 0 */定时器ARM的Proteus实验实验原理ARM的定时器实验,定时改变LED的状态。Proteus仿真电路图C语言源程序#include #define LED 0x000001typedef unsigned int uint32;typedef unsigned char uint8;void timer0_ISR (void) _attribute_ (interrupt);uint8 timer0Times = 0;void timer0Init (void) T0MR0 = 119999;/*匹配寄存器,120000-1,12000000为1秒*/ T0MCR = 3;/*产生中断,重置TC*/ T0TCR = 1;/*使能定时计数器0*/ VICVectAddr0 = (unsigned long)timer0_ISR; VICVectCntl0 = 0x20 | 4;/*定时器计数器0为4号中断*/ VICIntEnable = 0x00000010;/*开定时计数器0中断*/void timer0_ISR (void) timer0Times+;uint32 i;if(timer0Times = 10)i=IO0SET; /读出当前LED2控制值if(i&LED)=0)IO0SET=LED; elseIO0CLR=LED;timer0Times = 0; T0IR = 1;/*清除定时器0中断*/ VICVectAddr = 0; int main(void) PINSEL0 = 0;/*设置引脚为GPIO */ IO0DIR = LED;/*将P0.0设置为输出 */ IO0SET = LED;/*将P0.0置1,也就是让led灭 */ timer0Init(); while (1) SPI通信ARM的Proteus实验实验原理使用SPI协议,利用ARM控制数码显示管显示1到F,用串口检验发送的数据是否正确。Proteus仿真电路图C语言源程序下面是主程序文件,串口部分的程序代码与“中断结合串口”相同,所以省略。#include #include uart0.h#define HC595_CS 0x00000100/*P0.8口为74HC595的片选*/typedef unsigned int uint32;typedef unsigned char uint8;char status = Everytnig is fine.;uint8 const DISP_TAB16=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E;uint8 rcv_data;void delay(void) unsigned volatile long i,j; for(i=0;i10000;i+) for(j=0;j30;j+) ;void spiInit(void) S0SPCCR=0x52; /设置SPI时钟分频 S0SPCR=0x30; /设置SPI接口模式uint8 spiChar(uint8 data) IO0CLR=HC595_CS; /片选 S0SPDR=data; while(0=(S0SPSR&0x80); /等待SPIF置位,即等待数据发送完毕 IO0SET=HC595_CS; return(S0SPDR);int main(void) uint8 i; PINSEL0 = 0x00005505;/*引脚开串口SPI、UART0*/ IO0DIR=HC595_CS; spiInit();/*初始化SPI接口*/ uart0Init(); while(1) for (i=0;i16;i+) if(i10)putchar(i+0);elseputchar(i+7+0);rcv_data=spiChar(DISP_TABi);/*发送显示数据*/delay(); serialPuts(status); SPI通信(多从设备)ARM的Proteus实验实验原理使用SPI协议,利用ARM控制数码显示管1显示1到F,数码显示管2则从F到1倒计数,数码显示管则一直显示0。该连接方法使用片选来激活不同的SPI从设备(HC595)。Proteus仿真电路图C语言源程序下面是主程序文件,串口部分的程序代码与“中断结合串口”相同,所以省略。#include #include uart0.h#define HC595_CS 0x00000100/*P0.8口为第一个74HC595的片选*/#define HC595_CS2 0x00000200/*P0.9口为第二个74HC595的片选*/#define HC595_CS3 0x00000400/*P0.10口为第三个74HC595的片选*/typedef unsigned int uint32;typedef unsigned char uint8;char status = Everytnig is fine.;uint8 const DISP_TAB16=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E;uint8 rcv_data;void delay(void) unsigned volatile long i,j; for(i=0;i10000;i+) for(j=0;j30;j+) ;void spiInit(void) S0SPCCR=0x52;/*设置SPI时钟分频*/ S0SPCR=0x30;/*设置SPI接口模式*/uint8 spiChar(uint8 data) IO0CLR=HC595_CS;/*SPI1片选*/ S0SPDR=data; while(0=(S0SPSR&0x80);/*等待SPIF置位,即等待数据发送完毕*/ IO0SET=HC595_CS; return(S0SPDR);uint8 spi2Char(uint8 data) IO0CLR=HC595_CS2;/*SPI2片选*/ S0SPDR=data; while(0=(S0SPSR&0x80); IO0SET=HC595_CS2; return(S0SPDR);uint8 spi3Char(uint8 data) IO0CLR=HC595_CS3;/*SPI3片选*/ S0SPDR=data; while(0=(S0SPSR&0x80); IO0SET=HC595_CS3; return(S0SPDR);int main(void) uint8 i; PINSEL0 = 0x00005505;/*引脚开SPI、UART0*/ IO0DIR=HC595_CS|HC595_CS2|HC595_CS3; spiInit();/*初始化SPI接口*/ uart0Init(); while(1) for (i=0;i16;i+) if(i10)putchar(i+0);elseputchar(i+7+0);rcv_data=spiChar(DISP_TABi);/*发送显示数据到数码显示管1*/rcv_data=spi2Char(DISP_TAB15-i);/*数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论