嵌入式实验报告.doc_第1页
嵌入式实验报告.doc_第2页
嵌入式实验报告.doc_第3页
嵌入式实验报告.doc_第4页
嵌入式实验报告.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

ARM实验报告姓名: 学号:专业:学院:指导老师:一、 GPIO输出与按键控制实验按键控制流水灯实验实验原内容:通过数组认为定义流水灯花样;一个按键控制一种流水灯花色;实验电路图:源程序:#include Config.h#include Target.h/* 名称:DelayNS() 功能:长软件延时 入口参数:dly延时参数,值越大,延时越久*/void DelayNS(uint32 dly) uint32 i; for(; dly0; dly-) for(i=0; i50000; i+);/* 函数名称:main() 函数功能:GPIO输出测试,花样流水灯。*/const uint32 LED_TBL810 = 花样流水灯,注意调用时候用了取反操作 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,/ 全部点亮0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0xFF, / 依次逐个点亮0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, / 依次逐个叠加0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0xFF, / 依次逐个递减0x00, 0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, 0xFF, / 两个靠拢后分开0x00, 0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81, 0xFF,/ 从两边叠加后递减0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xFF, 0xFF,0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF ;/* 函数名称:keyscan() 函数功能:按键扫描,每按一次键对相应的LED进行取反*/void keyscan(void) uint32 i,j,k,m; PINSEL0 = 0x00000000; / 设置管脚连接GPIO IO0DIR = 0x000000ff; k=IO0PIN; if(k&keycon)!=keycon) for(j=0; j50000; j+);/延时去抖 k=IO0PIN; if(k&keycon)!=keycon) i=(k&keycon)|(keycon); i=i; switch(i) case KEY1 :for(m=0;m10;m+)IO0SET=(LED_TBL0m);DelayNS(3);IO0CLR = (LED_TBL0m);DelayNS(3); break; case KEY2 :for(m=0;m10;m+)IO0SET=(LED_TBL1m);DelayNS(3);IO0CLR = (LED_TBL1m);DelayNS(3); break; case KEY3 :for(m=0;m10;m+)IO0SET=(LED_TBL2m);DelayNS(3);IO0CLR = (LED_TBL2m);DelayNS(3); break; case KEY4 :for(m=0;m10;m+)IO0SET=(LED_TBL3m);DelayNS(3);IO0CLR = (LED_TBL3m);DelayNS(3); break; case KEY5 :for(m=0;m10;m+)IO0SET=(LED_TBL4m);DelayNS(3);IO0CLR = (LED_TBL4m);DelayNS(3); break; case KEY6 :for(m=0;m10;m+)IO0SET=(LED_TBL5m);DelayNS(3);IO0CLR = (LED_TBL5m);DelayNS(3); beak; case KEY7 :for(m=0;m10;m+)IO0SET=(LED_TBL6m);DelayNS(3);IO0CLR = (LED_TBL6m);DelayNS(3); break; case KEY8 :for(m=0;m0; dly-)for (i=0; i50000; i+);/* 函数名称:main() 函数功能:GPIO输出测试,花样流水灯。*/const uint32 LED_TBL = / 花样流水灯,注意调用时候用了取反操作 0x00, 0xFF, / 全部熄灭后,再全部点亮0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, / 依次逐个点亮0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, / 依次逐个叠加0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, / 依次逐个递减0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, / 两个靠拢后分开0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 ;/ 从两边叠加后递减int main (void) uint8 i;PINSEL0 = 0x00000000; / 设置管脚连接GPIO IO0DIR = 0x000000ff;/ 设置P0.0-P0.7控制口为输出while (1) for (i=0; i42; i+)/ 花样流水灯显示 IO0SET = (LED_TBLi);DelayNS(3);IO0CLR = (LED_TBLi);DelayNS(3);三、 单路按键控制LED/蜂鸣器实验内容:按键key1一按,蜂鸣器响,LED灯亮;实验电路图:源程序:#include config.h#define BEEP 17 /P0.7控制蜂鸣器,低电平蜂鸣#define KEY1 10; dly-)for (i=0; i50000; i+);/* 函数名称:main()* 函数功能:用P0.7控制BEEP,让蜂鸣器蜂鸣*/int main (void) PINSEL0 = 0x00000000; / 设置引脚连接GPIOPINSEL1 = 0x00000000; IO0DIR = BEEP; / 设置BEEP控制口为输出while (1) if(IO0PIN & KEY1) = 0)IO0CLR = BEEP; else IO0SET = BEEP;四、 定时器0控制数码管一亮一灭实验内容:0.5定时时间一到,数码管闪烁一次;实验电路图:源程序:#include Config.h#include Target.h#define LED (1 0;i-);uint8 table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uint8 table1=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;int main(void)uint8 i,j,p=16;PINSEL0=0x00000000;PINSEL1=0x00000000;IO0DIR=0x00ffff00;while(1)for(i=0;i8;i+)IO0CLR=IO0CLR|0xff00;IO0SET=tablei8;for(j=0;j8;j+) IO0CLR=IO0CLR|0xff0000; IO0SET=10; dly-)for (i=0; i50000; i+);/* 函数名称:main()* 函数功能:主函数*/int main(void)uint8 i; Init(); / I/O端口初始化 lcd_init();/ LCD初始化DisText(0x80,Current Temperature:);for(i=0;i110;i+)ReadTemp();/ 预读DS18B20while (1)ConvertTemperature(ReadTemp(); / 温度转换DisText(0xc4,Tp);/ 显示当前温度七、 LCD 1602显示1实验电路图:源程序:#include config.h#define rs (15)#define rw (16)#define en (17)#define busy (115)/* 函数名称:ChkBusy()* 函数功能:检查总线是否忙*/void ChkBusy()IO0DIR=0xf0;while(1)IO0CLR=rs;IO0SET=rw;IO0SET=en;if(!(IO0PIN & busy)break;IO0CLR=en;IO0DIR=0xffffffff;/* 函数名称:WrOp()* 函数功能:写命令* 入口参数:dat,待写入LCD的命令 */void WrOp(uint8 dat)ChkBusy();IO0CLR=rs;IO0CLR=rw;IO0CLR=IO0CLR|0xff00;/先清零IO0SET=dat8;/再送数IO0SET=en;IO0CLR=en;/* 函数名称:WrDat()* 函数功能:写数据* 入口参数:dat,待写入LCD的数据 */void WrDat(uint8 dat)ChkBusy();IO0SET=rs;IO0CLR=rw;IO0CLR=IO0CLR|0xff00;/先清零IO0SET=dat8;/再送数IO0SET=en;IO0CLR=en;/* 函数名称:lcd_init()* 函数功能:lcd初始化*/void lcd_init(void)WrOp(0x38);WrOp(0x06);WrOp(0x0c);/* 函数名称:LocateXY()* 函数功能:显示光标定位* 入口参数:posx LCD列位置,posy LCD行位置 */void LocateXY( uint8 posx,uint8 posy) uint8 temp;temp = posx & 0xf;posy &= 0x1;if ( posy )temp |= 0x40;temp |= 0x80;WrOp(temp);/* 函数名称:DispOneChar()* 函数功能:显示单字符* 入口参数:x LCD列位置,y LCD行位置,Wdata 显示字符*/void DispOneChar(uint8 x,uint8 y,uint8 Wdata) LocateXY( x, y );/ 定位显示字符的x,y位置WrDat( Wdata );/ 写字符/* 函数名称:ePutstr() * 函数功能:显示字符串* 入口参数:x LCD列,y LCD行,j 字符串长度,*ptr 字符串指针 */void ePutstr(uint8 x,uint8 y, uint8 j,uint8 *ptr)uint8 i,l=0;for (i=0;ij;i+)DispOneChar(x+,y,ptri);if ( x = 16 )x = 0; y = l;/* 函数名称:DisText()* 函数功能:显示文本* 入口参数:addr LCD DDRAM地址,*p 文本指针 */void DisText(uint8 addr,char *p)WrOp(addr);while(*p !=0)WrDat(*(p+);/* 函数名称:main()* 函数功能:LCD初始化,自定义汉字字符,LCD显示英文和汉字字符。*/int main(void) uint8 i; uint8 examp1=0x32,0x30,0x31,0x32,0x00,0x31,0x01,0x32,0x36,0x02; uint8 Hzzimo=0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x00, / 年 0x0F,0x09,0x0F,0x09,0x0F,0x09,0x11,0x00, / 月 0x0F,0x09,0x09,0x0F,0x09,0x09,0x0F,0x00;/ 日 lcd_init(); / LCD初始化WrOp( 0x40 ); / 自定义汉字字符:年、月、日for (i=0;i24;i+)WrDat(Hzzimoi); DisText(0x80,lu ming yue); / 第一行从第0位开始显示英文字符ePutstr(4,1,10,examp1); / 第二行从第4位开始显示2012年1月26日while(1);八、 LCD 1602显示2实验电路图:源程序:#include config.h#define rs (15)#define rw (16)#define en (17)#define busy (115)/* 函数名称:ChkBusy()* 函数功能:检查总线是否忙*/void ChkBusy()IO0DIR=0xf0;while(1)IO0CLR=rs;IO0SET=rw;IO0SET=en;if(!(IO0PIN & busy)break;IO0CLR=en;IO0DIR=0xffffffff;/* 函数名称:WrOp()* 函数功能:写命令* 入口参数:dat,待写入LCD的命令 */void WrOp(uint8 dat)ChkBusy();IO0CLR=rs;IO0CLR=rw;IO0CLR=IO0CLR|0xff00;/先清零IO0SET=dat8;/再送数IO0SET=en;IO0CLR=en;/* 函数名称:WrDat()* 函数功能:写数据* 入口参数:dat,待写入LCD的数据 */void WrDat(uint8 dat)ChkBusy();IO0SET=rs;IO0CLR=rw;IO0CLR=IO0CLR|0xff00;/先清零IO0SET=dat8; /再送数IO0SET=en;IO0CLR=en;/* 函数名称:lcd_init()* 函数功能:lcd初始化*/void lcd_init(void)WrOp(0x38);WrOp(0x06);WrOp(0x0c);/* 函数名称:DisText()* 函数功能:显示文本* 入口参数:addr LCD DDRAM地址,*p 文本指针 */void DisText(uint8 addr,char *p)WrOp(addr);while(*p !=0)WrDat(*(p+);/* 函数名称:main()* 函数功能:LCD初始化,自定义汉字字符,LCD显示英文和汉字字符。*/int main(void) uint8 i; lcd_init(); / LCD初始化DisText(0x80,lu ming yue);DisText(0xc0,abcdefg hijklmn); while(1);九、 LCD 1602显示3实验电路图:源程序:#include config.h#define rs (15)#define rw (16)#define en (17)#define busy (115)/* 函数名称:ChkBusy()* 函数功能:检查总线是否忙*/void ChkBusy()IO0DIR=0xf0;while(1)IO0CLR=rs;IO0SET=rw;IO0SET=en;if(!(IO0PIN & busy)break;IO0CLR=en;IO0DIR=0xffffffff;/* 函数名称:WrOp()* 函数功能:写命令* 入口参数:dat,待写入LCD的命令 */void WrOp(uint8 dat)ChkBusy();IO0CLR=rs;IO0CLR=rw;IO0CLR=IO0CLR|0xff00;/先清零IO0SET=dat8;/再送数IO0SET=en;IO0CLR=en;/* 函数名称:WrDat()* 函数功能:写数据* 入口参数:dat,待写入LCD的数据 */void WrDat(uint8 dat)ChkBusy();IO0SET=rs;IO0CLR=rw;IO0CLR=IO0CLR|0xff00;/先清零IO0SET=dat8; /再送数IO0SET=en;IO0CLR=en;/* 函数名称:lcd_init()* 函数功能:lcd初始化*/void lcd_init(void)WrOp(0x38);WrOp(0x06);WrOp(0x0c);/* 函数名称:DisText()* 函数功能:显示文本* 入口参数:addr LCD DDRAM地址,*p 文本指针 */void DisText(uint8 addr,char *p)WrOp(addr);while(*p !=0)WrDat(*(p+);/* 函数名称:main()* 函数功能:LCD初始化,自定义汉字字符,LCD显示英文和汉字字符。*/int main(void) uint8 i; lcd_init(); / LCD初始化DisText(0x80,abcdefg hijklmn); DisText(0xc0,lu ming yue); while(1);十、 PWM脉宽调制实验内容:LPC2131芯片PWM模块可以实现6路单边沿控制或者3路双边沿控制,或者两者混合输出。实验电路图:源程序:#include #define RED_A (18);#define YELLOW_A (19);#define GREEN_A(110);#define RED_B(111);#define YELLOW_B(112);#define GREEN_B(10;t-);void Traffic_lignt() switch(Operation_Type)case 1:IO0SET=RED_A;IO0SET=YELLOW_A;IO0CLR=GREEN_A;IO0CLR=RED_B;IO0SET=YELLOW_B;IO0SET=GREEN_B;DelayMS(2000);Operation_Type = 2; break;case 2:DelayMS(200);IO0SET=YELLOW_A;DelayMS(200);IO0CLR=YELLOW_A;IO0SET=GREEN_A;if(+Flash_Count !=5) return;Flash_Count=0; Operation_Type = 3; break;case 3:IO0CLR=RED_A;IO0SET=YELLOW_A;IO0SET=GREEN_A;IO0SET=RED_B;IO0SET=YELLOW_B;IO0CLR=GREEN_B;DelayMS(2000);Operation_Type = 4; break;case 4:DelayMS(200);IO0SET=YELLOW_B;DelayMS(200);IO0CLR=YELLOW_B;IO0SET=GREEN_B;if(+Flash_Count !=5) return;Flash_Count=0;Operation_Type = 1;break; int main(void)PINSEL0=0x00000000;PINSEL1=0X00000000;IO0DIR=0x00003f00; while(1)Traffic_lignt();十一、流水灯实验电路图:#include config.hvoid DelayNS (uint32 dly) uint32 i;for ( ; dly0; dly-)for (i=0; i50000; i+);int main (void) PINSEL0 = 0x00000000; IO0DIR = 0x000000ff; while (1) IO0PIN = 0xAA; DelayNS(15); IO0PIN = 0x55 ; DelayNS(15); IO0PIN = 0x00 ; DelayNS(15); 十二、模拟交通灯实验电路图:源程序:#include #define RED_A (18);#define YELLOW_A (19);#define GREEN_A(110);#define RED_B(111);#define YELLOW_B(112);#define GREEN_B(10;t-);void Traffic_lignt() switch(Operation_Type)case 1:IO0SET=RED_A;IO0SET=YELLOW_A;IO0CLR=GREEN_A;IO0CLR=RED_B;IO0SET=YELLOW_B;IO0SET=GREEN_B;DelayMS(2000);Operation_Type = 2; break;case 2:DelayMS(200);IO0SET=YELLOW_A;DelayMS(200);IO0CLR=YELLOW_A;IO0SET=GREEN_A;if(+Flash_Count !=5) return;Flash_Count=0; Operation_Type = 3; break;case 3:IO0CLR=RED_A;IO0SET=YELLOW_A;IO0SET=GREEN_A;IO0SET=RED_B;IO0SET=YELLOW_B;IO0CLR=GREEN_B;DelayMS(2000);Operation_Type = 4; break;case 4:DelayMS(200);IO0SET=YELLOW_B;DelayMS(200);IO0CLR=YELLOW_B;IO0SET=GREEN_B;if(+Flash_Count !=5) return;Flash_Count=0;Operation_Type = 1;break; int main(void)PINSEL0=0x00000000;PINSEL1=0X00000000;IO0DIR=0x00003f00; while(1)Traffic_lignt();十三、FIQ中断服务实验电路图:#include config.h#define LED1 1 18 #define EINT0 14 int main (void) PINSEL1 = 0x00000001; IO0DIR = LED1; EXTMODE = 0x00; FIQEnable(); VICIntSelect = 1 EINT0; EXTINT = 0x01; VICIntEnable = 1 0; dly-) for(i=0; i50000; i+);void keyscan(void) uint32 i,j,k; k=IO0PIN; if(k&keycon)!=keycon) for(j=0; j50000; j+); k=IO0PIN; if(k&keyc

温馨提示

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

评论

0/150

提交评论