嵌入式实验报告.docx

上传人:b****6 文档编号:11959778 上传时间:2023-06-03 格式:DOCX 页数:59 大小:525.01KB
下载 相关 举报
嵌入式实验报告.docx_第1页
第1页 / 共59页
嵌入式实验报告.docx_第2页
第2页 / 共59页
嵌入式实验报告.docx_第3页
第3页 / 共59页
嵌入式实验报告.docx_第4页
第4页 / 共59页
嵌入式实验报告.docx_第5页
第5页 / 共59页
嵌入式实验报告.docx_第6页
第6页 / 共59页
嵌入式实验报告.docx_第7页
第7页 / 共59页
嵌入式实验报告.docx_第8页
第8页 / 共59页
嵌入式实验报告.docx_第9页
第9页 / 共59页
嵌入式实验报告.docx_第10页
第10页 / 共59页
嵌入式实验报告.docx_第11页
第11页 / 共59页
嵌入式实验报告.docx_第12页
第12页 / 共59页
嵌入式实验报告.docx_第13页
第13页 / 共59页
嵌入式实验报告.docx_第14页
第14页 / 共59页
嵌入式实验报告.docx_第15页
第15页 / 共59页
嵌入式实验报告.docx_第16页
第16页 / 共59页
嵌入式实验报告.docx_第17页
第17页 / 共59页
嵌入式实验报告.docx_第18页
第18页 / 共59页
嵌入式实验报告.docx_第19页
第19页 / 共59页
嵌入式实验报告.docx_第20页
第20页 / 共59页
亲,该文档总共59页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

嵌入式实验报告.docx

《嵌入式实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式实验报告.docx(59页珍藏版)》请在冰点文库上搜索。

嵌入式实验报告.docx

嵌入式实验报告

 

ARM

实验报告

 

学号:

专业:

学院:

指导老师:

 

一、GPIO输出与按键控制实验——按键控制流水灯实验

实验原容:

通过数组认为定义流水灯花样;

一个按键控制一种流水灯花色;

实验电路图:

源程序:

#include"Config.h"

#include"Target.h"

/*名称:

DelayNS()功能:

长软件延时入口参数:

dly延时参数,值越大,延时越久**/

voidDelayNS(uint32dly)

{uint32i;

for(;dly>0;dly--)

for(i=0;i<50000;i++);}

/**函数名称:

main()函数功能:

GPIO输出测试,花样流水灯。

*/

constuint32LED_TBL[8][10]={花样流水灯,注意调用时候用了取反操作

{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进行取反*/

voidkeyscan(void)

{uint32i,j,k,m;

PINSEL0=0x00000000;//设置管脚连接GPIO

IO0DIR=0x000000ff;

k=IO0PIN;

if((k&keycon)!

=keycon)

{for(j=0;j<50000;j++);//延时去抖

k=IO0PIN;

if((k&keycon)!

=keycon)

{i=(k&keycon)|(~keycon);i=~i;

switch(i)

{caseKEY1:

for(m=0;m<10;m++){IO0SET=~((LED_TBL[0][m]));DelayNS(3);IO0CLR=((LED_TBL[0][m]));DelayNS(3);}break;

caseKEY2:

for(m=0;m<10;m++){IO0SET=~((LED_TBL[1][m]));DelayNS(3);IO0CLR=((LED_TBL[1][m]));DelayNS(3);}break;

caseKEY3:

for(m=0;m<10;m++){IO0SET=~((LED_TBL[2][m]));DelayNS(3);IO0CLR=((LED_TBL[2][m]));DelayNS(3);}break;

caseKEY4:

for(m=0;m<10;m++){IO0SET=~((LED_TBL[3][m]));DelayNS(3);IO0CLR=((LED_TBL[3][m]));DelayNS(3);}break;

caseKEY5:

for(m=0;m<10;m++){IO0SET=~((LED_TBL[4][m]));DelayNS(3);IO0CLR=((LED_TBL[4][m]));DelayNS(3);}break;

caseKEY6:

for(m=0;m<10;m++){IO0SET=~((LED_TBL[5][m]));DelayNS(3);IO0CLR=((LED_TBL[5][m]));DelayNS(3);}beak;

caseKEY7:

for(m=0;m<10;m++){IO0SET=~((LED_TBL[6][m]));DelayNS(3);IO0CLR=((LED_TBL[6][m]));DelayNS(3);}break;

caseKEY8:

for(m=0;m<10;m++){IO0SET=~((LED_TBL[7][m]));DelayNS(3);IO0CLR=((LED_TBL[7][m]));DelayNS(3);}break;}

}

while((k&keycon)!

=keycon)k=IO0PIN;}}

/*函数名称:

main()

*函数功能:

每按一次键,对相应LED的状态取反*/

intmain(void)

{

TargetResetInit();

PINSEL0=0x00000000;//设置所有管脚连接GPIO

PINSEL1=0x00000000;

IO0DIR=0x000000ff;//设置P0.0-P0.7为输出,其余为输入

IO0CLR=0xffffffff;

while

(1)

{keyscan();}}

二、GPIO输出实验——流水灯实验

实验容:

通过数组认为定义流水灯花样;

有六种花样的流水灯依次闪烁;

实验电路图:

源程序:

#include"config.h"

/**函数名称:

DelayNS()函数功能:

长软件延时入口参数:

dly延时参数,值越大,延时越久*/

voidDelayNS(uint32dly)

{uint32i;

for(;dly>0;dly--)

for(i=0;i<50000;i++);}

/**函数名称:

main()函数功能:

GPIO输出测试,花样流水灯。

*/

constuint32LED_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};//从两边叠加后递减

intmain(void)

{uint8i;

PINSEL0=0x00000000;//设置管脚连接GPIO

IO0DIR=0x000000ff;//设置P0.0-P0.7控制口为输出

while

(1)

{for(i=0;i<42;i++)//花样流水灯显示

{IO0SET=~((LED_TBL[i]));DelayNS(3);IO0CLR=((LED_TBL[i]));DelayNS(3);}}}

三、单路按键控制LED/蜂鸣器

实验容:

按键key1一按,蜂鸣器响,LED灯亮;

实验电路图:

源程序:

#include"config.h"

#defineBEEP1<<7//P0.7控制蜂鸣器,低电平蜂鸣

#defineKEY11<<8

/*函数名称:

DelayNS()函数功能:

长软件延时*入口参数:

dly延时参数,值越大,延时越久出口参数:

无*******/

voidDelayNS(uint32dly)

{uint32i;

for(;dly>0;dly--)

for(i=0;i<50000;i++);

}

/**函数名称:

main()**函数功能:

用P0.7控制BEEP,让蜂鸣器蜂鸣*/

intmain(void)

{PINSEL0=0x00000000;//设置引脚连接GPIO

PINSEL1=0x00000000;

IO0DIR=BEEP;//设置BEEP控制口为输出

while

(1)

{

if((IO0PIN&KEY1)==0)IO0CLR=BEEP;elseIO0SET=BEEP;}}

四、定时器0控制数码管一亮一灭

实验容:

0.5定时时间一到,数码管闪烁一次;

实验电路图:

源程序:

#include"Config.h"

#include"Target.h"

#defineLED(1<<7)/*P0.7引脚控制LED,低电平点亮*/

/*函数名称:

main()

*函数功能:

通过查询定时器0中断标志位控制LED点亮*/

intmain(void)

{PINSEL1=0x00000000;//设置管脚连接GPIO

IO0DIR=LED;//设置LED控制口输出

T0TC=0;//定时器0初始化

T0PR=99;//设置定时器0分频为100分频,得120000Hz

T0MCR=0x03;//匹配通道0匹配中断并复位T0TC

T0MR0=60024;//比较值(0.5s定时值)

T0TCR=0x03;//启动并复位T0TC

T0TCR=0x01;

while

(1)

{while((T0IR&0x01)==0);//等待定时时间到

T0IR=0x01;//清除中断标志

if((IO0SET&LED)==0)//取反LED状态

IO0SET=LED;

else

IO0CLR=LED;}}

五、数码管动态显示

实验电路图:

源程序:

#include"config.h"

voiddelay(uint32x)

{

uint8i;

while(x--)

for(i=500000;i>0;i--);

}

uint8table[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

};

uint8table1[]={

0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80

};

intmain(void)

{

uint8i,j,p=16;

PINSEL0=0x00000000;

PINSEL1=0x00000000;

IO0DIR=0x00ffff00;

while

(1)

{

for(i=0;i<8;i++)

{

IO0CLR=IO0CLR|0xff00;

IO0SET=~table[i]<<8;

for(j=0;j<8;j++)

{

IO0CLR=IO0CLR|0xff0000;

IO0SET=1<

delay(5);

}

p++;

if(p==24)p=16;

}

}

}

六、将读取的DS18B20温度值转换为十进制

实验电路图:

#include"config.h"

#include"DS18B20.h"

uint8Tp[12];//温度显示数据

uint16tt;

uint8TMark=0;//温度正负标志

/****************************************************************************

*函数名称:

Init()

*函数功能:

I/O端口初始化,设置引脚连接模块

****************************************************************************/

voidInit(void){

PINSEL0|=0x00000000;//设置引脚连接模块

PINSEL1|=0x00000088;

PINSEL2&=0x00000004;

}

/****************************************************************************

*函数名称:

ConvertTemperature()

*函数功能:

将读取的DS18B20温度值转换为十进制数

*入口参数:

tvalue读取的DS18B20当前温度值

****************************************************************************/

voidConvertTemperature(uint16tvalue){

Tp[1]=tvalue/1000+0x30;//百位数

Tp[2]=tvalue%1000/100+0x30;//十位数

Tp[3]=tvalue%100/10+0x30;//个位数

Tp[4]=0x2E;//显示小数点

Tp[5]=tvalue%10+0x30;//显示温度小数位

Tp[6]=0x01;//显示自定义字符,用于温度符号显示

Tp[7]=0x43;//显示字符"C"

Tp[8]=0x20;//显示字符"C"

Tp[9]=0x20;//显示字符"C"

Tp[10]=0x20;//显示字符"C"

Tp[11]=0x20;//显示字符"C"

if(TMark==0){

Tp[0]=0x20;//正温度不显示符号

}

else{

Tp[0]=0x2D;//负温度显示负号:

-

}

if(Tp[1]==0x30){

Tp[1]=0x20;//如果百位为0,不显示

if(Tp[2]==0x30){

Tp[2]=0x20;//如果十位为0,不显示

}

}

}

/****************************************************************************

*函数名称:

DelayNS()

*函数功能:

软件延时

*入口参数:

dly延时参数,值越大,延时越久

****************************************************************************/

voidDelayNS(uint32dly){

uint32i;

for(;dly>0;dly--)

for(i=0;i<50000;i++);

}

/****************************************************************************

*函数名称:

main()

*函数功能:

主函数

****************************************************************************/

intmain(void){

uint8i;

Init();//I/O端口初始化

lcd_init();//LCD初始化

DisText(0x80,"CurrentTemperature:

");

for(i=0;i<110;i++)ReadTemp();//预读DS18B20

while

(1){

ConvertTemperature(ReadTemp());//温度转换

DisText(0xc4,Tp);//显示当前温度

}

}

七、LCD1602显示1

实验电路图:

源程序:

#include"config.h"

#definers(1<<5)

#definerw(1<<6)

#defineen(1<<7)

#definebusy(1<<15)

/****************************************************************************

*函数名称:

ChkBusy()

*函数功能:

检查总线是否忙

****************************************************************************/

voidChkBusy()

{

IO0DIR=0xf0;

while

(1)

{

IO0CLR=rs;

IO0SET=rw;

IO0SET=en;

if(!

(IO0PIN&busy))break;

IO0CLR=en;

}

IO0DIR=0xffffffff;

}

/****************************************************************************

*函数名称:

WrOp()

*函数功能:

写命令

*入口参数:

dat,待写入LCD的命令

****************************************************************************/

voidWrOp(uint8dat)

{

ChkBusy();

IO0CLR=rs;

IO0CLR=rw;

IO0CLR=IO0CLR|0xff00;//先清零

IO0SET=dat<<8;//再送数

IO0SET=en;

IO0CLR=en;

}

/****************************************************************************

*函数名称:

WrDat()

*函数功能:

写数据

*入口参数:

dat,待写入LCD的数据

****************************************************************************/

voidWrDat(uint8dat)

{

ChkBusy();

IO0SET=rs;

IO0CLR=rw;

IO0CLR=IO0CLR|0xff00;//先清零

IO0SET=dat<<8;//再送数

IO0SET=en;

IO0CLR=en;

}

/****************************************************************************

*函数名称:

lcd_init()

*函数功能:

lcd初始化

****************************************************************************/

voidlcd_init(void)

{

WrOp(0x38);

WrOp(0x06);

WrOp(0x0c);

}

/***************************************************************************

*函数名称:

LocateXY()

*函数功能:

显示光标定位

*入口参数:

posxLCD列位置,posyLCD行位置

****************************************************************************/

voidLocateXY(uint8posx,uint8posy){

uint8temp;

temp=posx&0xf;

posy&=0x1;

if(posy)temp|=0x40;

temp|=0x80;

WrOp(temp);

}

/***************************************************************************

*函数名称:

DispOneChar()

*函数功能:

显示单字符

*入口参数:

xLCD列位置,yLCD行位置,Wdata显示字符

****************************************************************************/

voidDispOneChar(uint8x,uint8y,uint8Wdata){

LocateXY(x,y);//定位显示字符的x,y位置

WrDat(Wdata);//写字符

}

/***************************************************************************

*函数名称:

ePutstr()

*函数功能:

显示字符串

*入口参数:

xLCD列,yLCD行,j字符串长度,*ptr字符串指针

****************************************************************************/

voidePutstr(uint8x,uint8y,uint8j,uint8*ptr){

uint8i,l=0;

for(i=0;i

DispOneChar(x++,y,ptr[i]);

if(x==16){

x=0;y^=l;

}

}

}

/**********************************************

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 军事政治

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2