嵌入式实验报告各实验答案.docx
《嵌入式实验报告各实验答案.docx》由会员分享,可在线阅读,更多相关《嵌入式实验报告各实验答案.docx(32页珍藏版)》请在冰点文库上搜索。
嵌入式实验报告各实验答案
boot实验报告
本次实验由于时间限制,共完成了三种不同的变化方式,但是课后又设计了一些其他的变化方式。
1、从左到右,再从右到左亮灯,不断循环
#defineLED_CS4(*((volatileunsignedchar*)(0x10500000)))
#defineLED_VALUE(0xff)
inti;
voidDelay(unsignedintx)
{
unsignedinti,j,k;
for(i=0;i<=x;i++)
for(j=0;j<0xff;j++)
for(k=0;k<0xff;k++);
}
voiddummyOs(void)
{
while
(1)
{
LED_CS4=0xff;
for(i=1;i<=8;i++)
{
LED_CS4=(LED_VALUE<
Delay(200);
}
for(i=7;i>1;i--)
{
LED_CS4=(LED_VALUE<
Delay(200);
}
}
}
2、先从左到中,后从右到中,不断循环
#defineLED_CS4(*((volatileunsignedchar*)(0x10500000)))
#defineLED_VALUE(0xff)
inti;
voidDelay(unsignedintx)
{
unsignedinti,j,k;
for(i=0;i<=x;i++)
for(j=0;j<0xff;j++)
for(k=0;k<0xff;k++);
}
voiddummyOs(void)
{
while
(1)
{
LED_CS4=0xff;
for(i=0;i<4;i++)
{
LED_CS4=(LED_VALUE<
Delay(200);
}
for(i=7;i>=4;i--)
{
LED_CS4=(LED_VALUE<
Delay(200);
}
}
}
3、从左到右,从右到左,隔一个跳
#defineLED_CS4(*((volatileunsignedchar*)(0x10500000)))
#defineLED_VALUE(0xff)
inti;
voidDelay(unsignedintx)
{
unsignedinti,j,k;
for(i=0;i<=x;i++)
for(j=0;j<0xff;j++)
for(k=0;k<0xff;k++);
}
voiddummyOs(void)
{
while
(1)
{
LED_CS4=0xff;
for(i=1;i<8;i=i+2)
{
LED_CS4=(LED_VALUE<
Delay(200);
}
for(i=7;i>1;i=i-2)
{
LED_CS4=(LED_VALUE<
Delay(200);
}
}
}
课后补做:
1、从左到右灯灭
#defineLED_CS4(*((volatileunsignedchar*)(0x10500000)))
#defineLED_VALUE(0xff)
inti;
voidDelay(unsignedintx)
{
unsignedinti,j,k;
for(i=0;i<=x;i++)
for(j=0;j<0xff;j++)
for(k=0;k<0xff;k++);
}
voiddummyOs(void)
{
while
(1)
{
LED_CS4=0x00;
for(i=8;i>=1;i--)
{
LED_CS4=(LED_VALUE>>i)+1;
Delay(200);
}
}
}
2、从左到右,再从右到左灯灭,不断循环
#defineLED_CS4(*((volatileunsignedchar*)(0x10500000)))
#defineLED_VALUE(0xff)
inti;
voidDelay(unsignedintx)
{
unsignedinti,j,k;
for(i=0;i<=x;i++)
for(j=0;j<0xff;j++)
for(k=0;k<0xff;k++);
}
voiddummyOs(void)
{
while
(1)
{
LED_CS4=0x00;
for(i=8;i>=1;i--)
{
LED_CS4=(LED_VALUE>>i)+1;
Delay(200);
}
for(i=1;i<7;i++)
{
LED_CS4=(LED_VALUE>>i)+1;
Delay(200);
}
}
}
实验总结:
数码管显示实验报告
实验目的
1.在实验一引导程序的基础上进一步了解ARM体系结构和编程方法;
2.掌握外设访问的方法;
3.理解8段数码管的显示原理
实验内容
1显示同组的两位同学的四位学号20322033;
2显示一组大于九的四位十六进制数字,如abcd。
3使跑码灯从左到右顺序亮。
实验代码
#include
#include"register_variant.h"
#defineLED_CS2(*((volatileunsignedshortint*)(0x10300000)))//LED1andLED2
#defineLED_CS3(*((volatileunsignedshortint*)(0x10400000)))//LED3andLED4
#defineLED_CS4(*((volatileunsignedchar*)(0x10500000)))
#defineLED_VALUE(0xff)
voidDelay(unsignedintx)
{
unsignedinti,j,k;
for(i=0;i<=x;i++)
for(j=0;j<0xff;j++)
for(k=0;k<0xff;k++);
}
inti=0;
voiddummyOs(void)
{
LED_CS2=0x8f8f;//00
LED_CS3=0x8f8f;//00
while
(1)
{
//Delay(100);
LED_CS2=0x4024;//20
LED_CS3=0x2430;//32
LED_CS4=(LED_VALUE<
if(i<=8)i++;
elsei=0;
Delay(200);
LED_CS2=0x4024;//20
LED_CS3=0x3030;//33
LED_CS4=(LED_VALUE<
if(i<=8)i++;
elsei=0;
Delay(200);
LED_CS2=0x4024;//20
LED_CS3=0x2430;//32
LED_CS4=(LED_VALUE<
if(i<=8)i++;
elsei=0;
Delay(200);
LED_CS2=0x4024;//20
LED_CS3=0x3030;//33
LED_CS4=(LED_VALUE<
if(i<=8)i++;
elsei=0;
Delay(200);
LED_CS2=0x0308;//Ab
LED_CS3=0x0646;//CE
LED_CS4=(LED_VALUE<
if(i<=8)i++;
elsei=0;
Delay(200);
LED_CS2=0x0308;//Ab
LED_CS3=0x0646;//CE
LED_CS4=(LED_VALUE<
if(i<=8)i++;
elsei=0;
Delay(200);
}
}
实验总结:
键盘实验实验报告
实验目的:
1.了解直入键盘与矩阵键盘的原理
2.了解键盘寄存器的功能
3.掌握键盘输入的编程方法
实验要求:
1.对所有16个按键进行编码,如使用一位数字[0-F,也可以用两位]
2.当按键后,在七段数码管上显示对应的键盘编码。
3.在跑码灯上显示相应二进制数。
实验代码:
#include
#include"register_variant.h"
#defineLED_CS2(*((volatileunsignedshortint*)(0x10300000)))//LED1andLED2
#defineLED_CS3(*((volatileunsignedshortint*)(0x10400000)))//LED3andLED4
#defineKPDK_VALUE(*((volatileunsignedchar*)(0x41500008)))//DirectKeypad
#defineKAPS_VALUE(*((volatileunsignedchar*)(0x41500020)))
#defineLED_CS4(*((volatileunsignedchar*)(0x10500000)))
voidbutton_statusFetch(void)
{
charm=0,n=0;
unsignedshortintkbd_buff;
m=KPDK_VALUE;
n=KAPS_VALUE;
switch(m)
{
case0x40:
//key-press1
kbd_buff=0x8F79;
LED_CS2=kbd_buff;
LED_CS3=0x8F8F;
LED_CS4=0x7F;
break;
case0x02:
//key-press2
kbd_buff=0x248F;
LED_CS2=kbd_buff;
LED_CS3=0x8F8F;
LED_CS4=0xBF;
break;
case0x04:
//key-press3
kbd_buff=0x8F30;
LED_CS3=kbd_buff;
LED_CS2=0x8F8F;
LED_CS4=0x3F;
break;
case0x20:
//key-press4
kbd_buff=0x198F;
LED_CS3=kbd_buff;
LED_CS2=0x8F8F;
LED_CS4=0xDF;
break;
default:
kbd_buff=0x8F8F;break;
}
switch(n)
{
case0x00:
//key-press5
kbd_buff=0x8F12;
LED_CS2=kbd_buff;
LED_CS3=0x8F8F;
LED_CS4=0x5F;
break;
case0x01:
//key-press6
kbd_buff=0x028F;
LED_CS2=kbd_buff;
LED_CS3=0x8F8F;
LED_CS4=0x9F;
break;
case0x02:
//key-press7
kbd_buff=0x8F78;
LED_CS3=kbd_buff;
LED_CS2=0x8F8F;
LED_CS4=0x1F;
break;
case0x05:
//key-press8
kbd_buff=0x008F;
LED_CS3=kbd_buff;
LED_CS2=0x8F8F;
LED_CS4=0xEF;
break;
case0x10:
//key-press9
kbd_buff=0x8F18;
LED_CS2=kbd_buff;
LED_CS3=0x8F8F;
LED_CS4=0x6F;
break;
case0x11:
//key-press10
kbd_buff=0x088F;
LED_CS2=kbd_buff;
LED_CS3=0x8F8F;
LED_CS4=0xAF;
break;
case0x12:
//key-press11
kbd_buff=0x8F03;
LED_CS3=kbd_buff;
LED_CS2=0x8F8F;
LED_CS4=0x2F;
break;
case0x15:
//key-press12
kbd_buff=0x468F;
LED_CS3=kbd_buff;
LED_CS2=0x8F8F;
LED_CS4=0xCF;
break;
case0x20:
//key-press13
kbd_buff=0x8F21;
LED_CS2=kbd_buff;
LED_CS3=0x8F8F;
LED_CS4=0x4F;
break;
case0x21:
//key-press14
kbd_buff=0x068F;
LED_CS2=kbd_buff;
LED_CS3=0x8F8F;
LED_CS4=0x8F;
break;
case0x22:
//key-press15
kbd_buff=0x8F0E;
LED_CS3=kbd_buff;
LED_CS2=0x8F8F;
LED_CS4=0x0F;
break;
case0x25:
//key-press16
kbd_buff=0x408F;
LED_CS3=kbd_buff;
LED_CS2=0x8F8F;
LED_CS4=0xF7;
break;
default:
kbd_buff=0x8F8F;break;
}
}
voiddummyOs(void)
{
intled_sharp;
inttemp=~0;
LED_CS2=temp;
LED_CS3=temp;
while
(1)
{
led_sharp=ledShareInterval;
for(;led_sharp>0;led_sharp--)
{
button_statusFetch();
}
}
}
实验总结:
中断实验报告
实验目的;
1.理解中断向量表的结构
2.理解中断处理的过程
3.学习编写中断处理程序的方法
实验内容:
1.基本内容:
修改源程序,通过中断方式响应按键,当1-16键按下时,数码管显示0-F。
2.设计主程序,使8个LED以一定的时间间隔从右到左依次点亮,循环显示;(实验一的内容)
3.编写中断服务程序,达到如下效果:
以中断形式驱动按键,当有键按下时,在七段数码管上,显示对应的16个键盘编码值0-9a-f(实验二、三的内容),然后回到主程序。
实验代码:
Interrupt.c中
#include
#defineLED_CS2(*((volatileunsignedshortint*)(0x10300000)))//LED1andLED2
#defineLED_CS3(*((volatileunsignedshortint*)(0x10400000)))//LED3andLED4
#defineLED_CS4(*((volatileunsignedchar*)(0x10500000)))
#defineKPDK_VALUE(*((volatileunsignedchar*)(0x41500008)))//DirectKeypad
#defineKPAS_VALUE(*((volatileunsignedchar*)(0x41500020)))//MatrixKeypad
#defineLED_VALUE(0xff)
voidDelay(unsignedintx)
{
unsignedinti,j,k;
for(i=0;i<=x;i++)
for(j=0;j<0xff;j++)
for(k=0;k<0xff;k++);
}
voidIRQ_Function(void)
{
chari,j;
unsignedshortintkbd_buff;
i=KPDK_VALUE;
j=KPAS_VALUE;
switch(i)
{
case0x40:
//key-press1
kbd_buff=0x408f;
LED_CS2=kbd_buff;
LED_CS3=0x8F8F;
LED_CS4=0x7F;
break;
case0x02:
//key-press2
kbd_buff=0x798f;
LED_CS2=kbd_buff;
LED_CS3=0x8F8F;
LED_CS4=0xBF;
break;
case0x04:
//key-press3
kbd_buff=0x248f;
LED_CS3=kbd_buff;
LED_CS2=0x8F8F;
LED_CS4=0x3F;
break;
case0x20:
//key-press4
kbd_buff=0x8F30;
LED_CS3=kbd_buff;
LED_CS2=0x8F8F;
LED_CS4=0xDF;
break;
default:
switch(j)
{
case0x00:
//key-press5
LED_CS2=0x198f;
LED_CS3=0x8f8f;
LED_CS4=0x5F;
break;
case0x01:
//key-press6
LED_CS2=0x128f;
LED_CS3=0x8f8f;
LED_CS4=0x9F;
break;
case0x02:
//key-press7
LED_CS2=0x028f;
LED_CS3=0x8f8f;
LED_CS4=0x1F;
break;
case0x05:
//key-press8
LED_CS2=0x788f;
LED_CS3=0x8f8f;
LED_CS4=0xEF;
break;
case0x10:
//key-press9
LED_CS2=0x008f;
LED_CS3=0x8f8f;
LED_CS4=0x6F;
break;
case0x11:
//key-press10
LED_CS2=0x108f;
LED_CS3=0x8f8f;
LED_CS4=0xAF;
break;
case0x12:
//key-press11
LED_CS2=0x088f;
LED_CS3=0x8f8f;
LED_CS4=0x2F;
break;
case0x15:
//key-p