单片机第一次实验.docx
《单片机第一次实验.docx》由会员分享,可在线阅读,更多相关《单片机第一次实验.docx(28页珍藏版)》请在冰点文库上搜索。
单片机第一次实验
Cortex-M4原理与实践实验报告
实验一GPIO接口实验
一.实验目的
1.掌握CodeComposerStudio6.0(以下简称CCS)的安装和配置步骤过程。
2.了解Cortex-M4开发系统和计算机与目标系统的连接方法。
3.了解CCS软件的操作环境和基本功能,了解TM4C1294软件开发过程。
1)学习创建工程和管理工程的方法;
2)了解基本的编译和调试功能;
3)学会设置断点,注入和提取数据文件;
4)学习使用观察窗口;
5)了解图形功能的使用方法。
二.实验程序流程图
本实验通过多种方法来控制GPIO端口的读写,通过GPIO端口的读写来控制主板上两个独立的LED灯,D1、D2的点亮和熄灭。
主板上D1、D2、D3对应的GPIO口分别为PF1、PF2、PF3。
三.实验代码、注释及现象
#include
#include
#include"inc/hw_memmap.h"
#include"inc/hw_types.h"
#include"driverlib/pin_map.h"
#include"driverlib/sysctl.h"
#include"driverlib/gpio.h"
intmain(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能GPIOF口
GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_DIR_MODE_OUT);//设置为输出模式
GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_STRENGTH_8MA_SC,GPIO_PIN_TYPE_STD);
//进一步设置为8mA、带转换速率控制的推挽输出
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0xff);//PF1输出高电平
while
(1)
{};//LED_D1on简单LE
}
现象:
LED1被点亮
四.思考题
1.代码
#include
#include
#include"inc/hw_memmap.h"
#include"inc/hw_types.h"
#include"driverlib/pin_map.h"
#include"driverlib/sysctl.h"
#include"driverlib/gpio.h"
intmain(void)
{
SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ|
SYSCTL_OSC_MAIN|
SYSCTL_USE_PLL|
SYSCTL_CFG_VCO_480),10000000);//设置系统时间为10MHZ
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能GPIOF口
GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_DIR_MODE_OUT);//设置为输出模式
GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_STRENGTH_8MA_SC,GPIO_PIN_TYPE_STD);//进一步设置为8mA、带转换速率控制的推挽输出
while
(1)
{
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0xff);//PF1输出高,点亮LED0
SysCtlDelay(100*(10000000/3000));//延时n*1ms100ms
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0);//PF1输出低,关闭LED0
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0xff);//PF2输出高,点亮LED2
SysCtlDelay(100*(10000000/3000));//延时n*1ms
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0);//PF2输出低,点亮LED2
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,0xff);//PF2输出高,点亮LED2
SysCtlDelay(100*(10000000/3000));//延时n*1ms
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,0);//PF2输出低,点亮LED2
};
}
2.实验现象:
主板上LED0,LED1,LED2按照间隔时间顺序依次点亮
实验原理解读:
主要利用延迟函数,按顺序点亮和关断LED1,LED2,LED3。
五.实验中遇到的问题及其解决方法
首先是没有按默认路径安装,然后配置一直不对,缺少文件,后来把软件卸载之后再重新安装在默认路径,问题就解决了。
实验二矩阵按键操作实验
一、实验目的
1.熟悉和掌握矩阵式键盘的工作原理、电路设计和软件编程方法。
2.熟悉和掌握矩阵式键盘的行列扫描法。
3.掌握键盘延时消抖的软件方法。
二、实验过程(包括流程图)
图2-1实验程序流程图
三、实验代码、注释(最好每条注释)及现象
volatileuint32_tui32Loop;//定义变量
volatileuint32_tkey;//定义变量
voiddelay()
{
intui32Loop0;
for(ui32Loop0=0;ui32Loop0<1000;ui32Loop0++)//delay
{;}
}//通过循环跑空函数延迟
intidentify_key()
{
key=0;
//***********************arowissetted00000111(PD1PH3PH2PM3)
GPIO_PORTD_AHB_DATA_R=0x00;//PD1PD0issetted0
GPIO_PORTH_AHB_DATA_R=0x0c;//PH2PH3issetted1
GPIO_PORTM_DATA_R=0x08;//PM3issetted1
for(ui32Loop=0;ui32Loop<1000;ui32Loop++)//delay
{
;
}
if((GPIO_PORTP_DATA_R&0x04)==0x00)//&&(GPIO_PORTP_DATA_R==0x04)
{
delay();//eliminatebuffeting
if((GPIO_PORTP_DATA_R&0x04)==0x00)//PP2issetted0?
{
key=1;//0key
return0;
}
}
else
if((GPIO_PORTN_DATA_R&0x08)==0x00)//PN3issetted0?
{
delay();
if((GPIO_PORTN_DATA_R&0x08)==0x00)
{
key=5;//4key
return0;
}
}
else
if((GPIO_PORTN_DATA_R&0x04)==0x00)
{
delay();
if((GPIO_PORTN_DATA_R&0x04)==0x00)
{
key=9;//8key
return0;
}
}
else
if((GPIO_PORTD_AHB_DATA_R&0x01)==0x00)
{
delay();
if((GPIO_PORTD_AHB_DATA_R&0x01)==0x00)
{
key=13;//12key
return0;
}
}
//***********************arowissetted00001011(PD1PH3PH2PM3)
GPIO_PORTD_AHB_DATA_R=0x02;
GPIO_PORTH_AHB_DATA_R=0x04;
GPIO_PORTM_DATA_R=0x08;
for(ui32Loop=0;ui32Loop<1000;ui32Loop++)
{
;
}
if((GPIO_PORTP_DATA_R&0x04)==0x00)//&&(GPIO_PORTP_DATA_R==0x04)
{
delay();
if((GPIO_PORTP_DATA_R&0x04)==0x00)
{
key=2;//1key
return0;
}
}
else
if((GPIO_PORTN_DATA_R&0x08)==0x00)
{
delay();
if((GPIO_PORTN_DATA_R&0x08)==0x00)
{
key=6;//5key
return0;
}
}
else
if((GPIO_PORTN_DATA_R&0x04)==0x00)
{
delay();
if((GPIO_PORTN_DATA_R&0x04)==0x00)
{
key=10;//9key
return0;
}
}
else
if((GPIO_PORTD_AHB_DATA_R&0x01)==0x00)
{
delay();
if((GPIO_PORTD_AHB_DATA_R&0x01)==0x00)
{
key=14;//13key
return0;
}
}
//***********************arowissetted00001101(PD1PH3PH2PM3)
GPIO_PORTD_AHB_DATA_R=0x02;
GPIO_PORTH_AHB_DATA_R=0x08;
GPIO_PORTM_DATA_R=0x08;
for(ui32Loop=0;ui32Loop<1000;ui32Loop++)
{
;
}
if((GPIO_PORTP_DATA_R&0x04)==0x00)//&&(GPIO_PORTP_DATA_R==0x04)
{
delay();
if((GPIO_PORTP_DATA_R&0x04)==0x00)
{
key=3;//2key
return0;
}
}
else
if((GPIO_PORTN_DATA_R&0x08)==0x00)
{
delay();
if((GPIO_PORTN_DATA_R&0x08)==0x00)
{
key=7;//6key
return0;
}
}
else
if((GPIO_PORTN_DATA_R&0x04)==0x00)
{
delay();
if((GPIO_PORTN_DATA_R&0x04)==0x00)
{
key=11;//10key
return0;
}
}
else
if((GPIO_PORTD_AHB_DATA_R&0x01)==0x00)
{
delay();
if((GPIO_PORTD_AHB_DATA_R&0x01)==0x00)
{
key=15;//14key
return0;
}
}
//***********************arowissetted00001110(PD1PH3PH2PM3)
GPIO_PORTD_AHB_DATA_R=0x02;
GPIO_PORTH_AHB_DATA_R=0x0c;
GPIO_PORTM_DATA_R=0x00;
for(ui32Loop=0;ui32Loop<1000;ui32Loop++)
{
;
}
if((GPIO_PORTP_DATA_R&0x04)==0x00)//&&(GPIO_PORTP_DATA_R==0x04)
{
delay();
if((GPIO_PORTP_DATA_R&0x04)==0x00)
{
key=4;//3key
return0;
}
}
else
if((GPIO_PORTN_DATA_R&0x08)==0x00)
{
delay();
if((GPIO_PORTN_DATA_R&0x08)==0x00)
{
key=8;//7key
return0;
}
}
else
if((GPIO_PORTN_DATA_R&0x04)==0x00)
{
delay();
if((GPIO_PORTN_DATA_R&0x04)==0x00)
{
key=12;//11key
return0;
}
}
else
if((GPIO_PORTD_AHB_DATA_R&0x01)==0x00)
{
delay();
if((GPIO_PORTD_AHB_DATA_R&0x01)==0x00)
{
key=16;//15key
return0;
}
}
return1;
}
int
main(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能GPIOF口
GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2,GPIO_DIR_MODE_OUT);////设置为输出模式
GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2,GPIO_STRENGTH_8MA_SC,GPIO_PIN_TYPE_STD);/////进一步设置为8mA、带转换速率控制的推挽输出
SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ|
SYSCTL_OSC_MAIN|
SYSCTL_USE_PLL|
SYSCTL_CFG_VCO_480),10000000);//设置系统时间为10MHZ
//EnabletheGPIOportthatisusedfortheon-boardLED.
SYSCTL_RCGCGPIO_R|=(SYSCTL_RCGCGPIO_R13|SYSCTL_RCGCGPIO_R12|SYSCTL_RCGCGPIO_R11|SYSCTL_RCGCGPIO_R10|SYSCTL_RCGCGPIO_R7|SYSCTL_RCGCGPIO_R3);//
/////
//EnabletheGPIOpinfortheLEDPN0,PN1,PN2,PN3,PP2,PF0,PF4.Setthedirectionasoutput.
//EnabletheGPIOpinfortheLEDPM3,PH2,PH3.Setthedirectionasinput.and
//enabletheGPIOpinfordigitalfunction.
GPIO_PORTN_DIR_R=0x03;
GPIO_PORTM_DIR_R=0x28;
GPIO_PORTH_AHB_DIR_R=0x0c;
GPIO_PORTP_DIR_R=0x00;
GPIO_PORTD_AHB_DIR_R=0x02;
//GPIO_PORTF_AHB_DIR_R=0x11;
GPIO_PORTL_DIR_R=0x0f;
GPIO_PORTN_DEN_R=0x0f;
GPIO_PORTM_DEN_R=0x28;
GPIO_PORTH_AHB_DEN_R=0x0c;
GPIO_PORTP_DEN_R=0x04;
GPIO_PORTD_AHB_DEN_R=0x03;
GPIO_PORTL_DEN_R=0x0f;
//GPIO_PORTF_AHB_DEN_R=0x11;
//ROW1_IN->PM3,ROW2_IN->PH2,ROW3_IN->PH3,///COL1_IN->PN2,COL2_IN->PN3,COL3_IN->PP2
//setthecolumnlowleverandreadtherow
while
(1)
{
inta;
identify_key();
a=key;
switch(a)//根据选中的按键点亮对应的灯
{
case1:
GPIO_PORTL_DATA_R=0x01;GPIO_PORTM_DATA_R|=0x20;//拉响蜂鸣器break;
case2:
GPIO_PORTL_DATA_R=0x02;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case3:
GPIO_PORTL_DATA_R=0x03;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case4:
GPIO_PORTL_DATA_R=0x04;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case5:
GPIO_PORTL_DATA_R=0x05;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case6:
GPIO_PORTL_DATA_R=0x06;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case7:
GPIO_PORTL_DATA_R=0x07;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case8:
GPIO_PORTL_DATA_R=0x08;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case9:
GPIO_PORTL_DATA_R=0x09;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case10:
GPIO_PORTL_DATA_R=0x0a;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case11:
GPIO_PORTL_DATA_R=0x0b;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case12:
GPIO_PORTL_DATA_R=0x0c;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case13:
GPIO_PORTL_DATA_R=0x0d;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case14:
GPIO_PORTL_DATA_R=0x0e;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case15:
GPIO_PORTL_DATA_R=0x0f;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
case16:
GPIO_PORTL_DATA_R=0x00;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff);break;
default:
GPIO_PORTN_DATA_R=0x00;GPIO_PORTM_DATA_R&=0xdf;
}
}
}
实验结果:
按下键盘对应的二进制灯点亮,并且蜂鸣器也会响。
四.思考题
1.代码
#include
#include"inc/tm4c1294ncpdt.h"
volatileuint32_tui32Loop;//定义变量
volatileuint32_tkey;//定义变量
voiddelay()
{
intui32Loop0;
for(ui32Loop0=0;ui32Loop0<1000;ui32Loop0++)//delay
{;}
}
intidentify_key()
{
key=0;
GPIO_PORTD_AHB_DATA_R=0x01;
GPIO_PORTH_AHB_DATA_R=0x0c;
GPIO_P