This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TM4C123GH6PM实验套件LCD模块无法完成中断响应?

Other Parts Discussed in Thread: TM4C123GH6PM

主函数包括中断响应函数如下

#ifndef TARGET_IS_BLIZZARD_RB1
#define TARGET_IS_BLIZZARD_RB1
#endif
#include <stdint.h>
#include <stdbool.h>
#include "driverlib/adc.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "inc/hw_memmap.h"
#include "inc/hw_ints.h"
#include "LCDDriver.h"
#include "inc/hw_gpio.h"
enum
{
LINE_ONE,
LINE_TWO,
LINE_THREE,
LINE_FOUR,

LINE_NUM
}line_define;

//#define CHAR_WIDTH 8
#define WORD_WIDTH 16

#ifndef TARGET_IS_BLIZZARD_RA1
#define TARGET_IS_BLIZZARD_RA1
#endif

/***************************************************************
* @brief LCD模块按键响应中断 PC7 对应的为按键S1
* @param null
* @return null
***************************************************************/
extern uint8_t VCA_BUTTON_UP_DOWM;
char cur_Col = 0;
//中断处理子函数
void Int_GPIO_D_Handler(void)
{
unsigned long ulStatus;
// 读取中断状态
ulStatus = GPIOIntStatus(GPIO_PORTD_BASE, true);
// 清除中断状态
GPIOIntClear(GPIO_PORTD_BASE, ulStatus);
// 如果KEY的中断状态有效
if (ulStatus & GPIO_PIN_7)
{
// 延时约10ms,消除按键抖动
SysCtlDelay(10 * (SysCtlClockGet() / 3000));
// 等待KEY抬起
while (GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_7) == 0x00);
// 延时约10ms,消除松键抖动
SysCtlDelay(10 * (SysCtlClockGet() / 3000));
//TODO 逻辑处理
if(cur_Col < (NUM_CHAR - 1))
cur_Col++;
}

if (ulStatus & GPIO_PIN_6)// 如果KEY的中断状态有效
{
// 延时约10ms,消除按键抖动
SysCtlDelay(10 * (SysCtlClockGet() / 3000));
// 等待KEY抬起
while (GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_6) == 0x00);
// 延时约10ms,消除松键抖动
SysCtlDelay(10 * (SysCtlClockGet() / 3000));
//TODO 逻辑处理
if(cur_Col > 0)
cur_Col--;
}

}
/***************************************************************
* @brief 初始化ADC获取滚轮电压值
* ————————|
// TIVA |
// M4 PE0|<--ADC 模数转换信号源
// ________|
***************************************************************/
#define ADC_BASE ADC0_BASE // 使用ADC0
#define SequenceNum 3 // 使用序列3
void Init_ADCWheel(){
// 使能ADC0外设
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
// 使能外设端口E
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
// 选择PE0为外部模拟数字转换功能
GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0);
// 使能采样序列号为触发处理获取模式
ADCSequenceConfigure(ADC_BASE, SequenceNum, ADC_TRIGGER_PROCESSOR, 0);
// ADC配置

ADCSequenceStepConfigure(ADC_BASE, SequenceNum, 0, ADC_CTL_CH3 | ADC_CTL_IE |ADC_CTL_END);
// 使能ADC配置
ADCSequenceEnable(ADC_BASE, SequenceNum);
// 清除ADC中断标志位
ADCIntClear(ADC_BASE, SequenceNum);
}


/***************************************************************
* @brief 获取特定ADC的模数转化采样值。
* @param ui32Base ADC采样基地址
* @param ui32Peripheral ADC启动的外设端口
* @return ADC采样值
***************************************************************/
unsigned long ADC_ValueGet(uint32_t ui32Base, uint32_t ui32SequenceNum)
{
unsigned long value = 0;
// 保存ADC采样值
uint32_t ADCValue[1];
// 触发获取端口采样
ADCProcessorTrigger(ui32Base, ui32SequenceNum);
//等待采样结束
while(!ADCIntStatus(ui32Base, ui32SequenceNum, false))
{
}
// 清除ADC采样中断标志
ADCIntClear(ui32Base, ui32SequenceNum);
// 读取ADC采样值
ADCSequenceDataGet(ui32Base, ui32SequenceNum, ADCValue);
value = ADCValue[0];
return value;
}

/************************************************************
* @brief 对端口C、D进行按键中断初始化
* @param none
* @param none
***********************************************************/
void Init_Int_Key() {

HWREG(GPIO_PORTD_BASE+GPIO_O_LOCK) |= GPIO_LOCK_KEY;

HWREG(GPIO_PORTD_BASE+GPIO_O_CR) |= (1<<7);

HWREG(GPIO_PORTD_BASE+GPIO_O_DEN) &=(~(1<<7));

HWREG(GPIO_PORTD_BASE+GPIO_O_PDR) &= (~(1<<7));

HWREG(GPIO_PORTD_BASE+GPIO_O_PUR) &= (~(1<<7));

HWREG(GPIO_PORTD_BASE+GPIO_O_AFSEL) &=(~(1<<7));

// Make PD6/7 an output.
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

GPIODirModeSet(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7, GPIO_DIR_MODE_IN);

GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7, GPIO_STRENGTH_2MA,
GPIO_PIN_TYPE_STD_WPU);

GPIOIntTypeSet(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7, GPIO_LOW_LEVEL);

GPIOIntEnable(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7);

IntEnable(INT_GPIOD);

IntMasterEnable();

GPIOIntClear(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7);
}

unsigned char director = 0; // 当前的移动方向

int main(void) {

uint32_t pui32ADC0Value[1]; // 保存ADC采样值

unsigned char old_Raw, old_Col; // 保留上一次的位置

unsigned char cur_Raw; // 记录光标当前的横坐标,纵坐标

cur_Raw = 0;
cur_Col = 0;

// 设置系统主频
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN
| SYSCTL_XTAL_16MHZ);

Init_ADCWheel();

Init_Int_Key();

LCD_Enable(); // 使能LCD
LCD_Init(); // 初始化LCD
LCD_ScreenClr(); // 清屏

while(1)
{
ADCProcessorTrigger(ADC_BASE, SequenceNum);

// Wait for conversion to be completed.
while(!ADCIntStatus(ADC_BASE, SequenceNum, false))
{
}

// Clear the ADC interrupt flag.
ADCIntClear(ADC_BASE, SequenceNum);

// Read ADC Value.
ADCSequenceDataGet(ADC_BASE, SequenceNum, pui32ADC0Value);

unsigned long sample = pui32ADC0Value[0];

cur_Raw = (LCD_MAX_COL * sample) / 4096;

// 如果光标发生变化则刷新光标位置
if(old_Col != cur_Col || old_Raw != cur_Raw)
{
LCD_Draw_Char_8x8(' ', old_Col, old_Raw, LCD_DRAW_NORMAL);
LCD_Draw_Char_8x8(' ', cur_Col, cur_Raw, LCD_DRAW_HIGHLIGHT);
}

// 保存光标及采样值用于下次比较
old_Raw = cur_Raw;
old_Col = cur_Col;

// 系统延时
ROM_SysCtlDelay(SysCtlClockGet() / 12);
}
}

然后这是LCD模块的配置函数

#ifndef PART_TM4C123GH6PM
#define PART_TM4C123GH6PM
#endif

#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include "LCDDriver.h"
#include "LCD_Matrix.h"
#include "driverlib/ssi.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
#include "driverlib/pin_map.h"
#include "inc/hw_ints.h"

/* _________
* |
* PC6|-->SCK 串行时钟
* PC7|-->SDA 数据传输
* TIVA PB1|-->CS 低电平片选
* PD1|-->CD 数据/指令寄存器
* PE5|-->RST 低电平复位
* _________|
*/
// 低电平片选
#define setCS GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1, GPIO_PIN_1); //PB1
#define rstCS GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1, 0);

// 寄存器选择信号
#define setCD GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6, GPIO_PIN_6); //PC6
#define rstCD GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6, 0);

// 低电平复位,复位完成后,回到高电平,液晶模块开始工作
#define setRES GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_5, GPIO_PIN_5); //PE5
#define rstRES GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_5, 0);


//###############################################################################################

/******************************************************************************
* @brief 清屏函数,清楚所有的显示内容
* @param
* @return none
******************************************************************************/
void LCD_ScreenClr() {
unsigned char i, j;
for (i = 0; i < 9; i++) //循环第0~8页面
{
rstCS
LCD_TransferCmd(0xb0 + i); //选择“页”
LCD_TransferCmd(0x10); //选择“列”
LCD_TransferCmd(0x00);
for (j = 0; j < 132; j++) {
LCD_TransferData(0x00); //输入数据0x00,显示0x00
}
}
}

/******************************************************************************
* @brief 液晶五个端口初始化
* @param
* @return none
******************************************************************************/
void LCD_Enable() {
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //各个端口使能
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
// -----------------------------------------------------------------------------
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_1); //各个端口设置为输出,PB1->CS
GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_6); //PC6->CD
GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_5); //PE5->RST

// -----------------------------------------------------------------------------

SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3); //系统外设使能
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

GPIOPinConfigure(GPIO_PD0_SSI3CLK); //PD0,PD3两线
GPIOPinConfigure(GPIO_PD3_SSI3TX);

GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_3); //SSI端口功能使能

SSIConfigSetExpClk(SSI3_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,
SSI_MODE_MASTER, 50000, 8); //SSI3,端口模式:50K,8位数据,SSI_FRF_MOTO_MODE_0模式

SSIEnable(SSI3_BASE);
// -----------------------------------------------------------------------------
}

/******************************************************************************
* @brief 较长时间延时
* @param
* @return none
******************************************************************************/
void LCD_Delay2(unsigned int i) {
int j, k;
for (j = 0; j < i; j++)
for (k = 0; k < 990; k++)
;
}

/******************************************************************************
* @brief 较短时间延时
* @param
* @return none
******************************************************************************/
void LCD_Delay3(unsigned int i) {
int j, k;
for (j = 0; j < i; j++)
for (k = 0; k < 10; k++)
;
}

/******************************************************************************
* @brief 显示8*8的矩阵像素
* @param data :输入的显示数据指针
* @param type :是否需要反相显示
* @return none
******************************************************************************/
void LCD_TransferData(unsigned char data) {

rstCS
setCD

while (SSIBusy(SSI3_BASE))
;
SSIDataPut(SSI3_BASE, data);
while (SSIBusy(SSI3_BASE))
;
}

/******************************************************************************
* @brief 发送液晶控制命令
* @param command :命令字符
* @return none
******************************************************************************/
void LCD_TransferCmd(unsigned char command) {

rstCS
rstCD

while (SSIBusy(SSI3_BASE))
;
SSIDataPut(SSI3_BASE, command);
while (SSIBusy(SSI3_BASE))
;
}

/******************************************************************************
* @brief 初始化液晶
* @param none
* @return none
******************************************************************************/
void LCD_Init() {
rstRES
LCD_Delay2(50); //delay
setRES
LCD_Delay2(50); //delay
LCD_TransferCmd(0xe2); /*软复位*/
LCD_TransferCmd(0x2c); /*升压步聚1*/
LCD_TransferCmd(0x2e); /*升压步聚2*/
LCD_TransferCmd(0x2f); /*升压步聚3*/
LCD_TransferCmd(0x23); /*粗调对比度,可设置范围20~27*/
LCD_TransferCmd(0x81); /*微调对比度*/
LCD_TransferCmd(0x28); /*微调对比度的值,可设置范围0~63*/
LCD_TransferCmd(0xa2); /*1/9 偏压比(bias)*/
LCD_TransferCmd(0xc8); /*行扫描顺序:从上到下c0 c8 */
LCD_TransferCmd(0xa0); /*列扫描顺序:从左到右 a0 a1*/
LCD_TransferCmd(0xa6); /*正显 0xa6,反显 0xa7*/
LCD_TransferCmd(0xaf); /*开显示*/

}

/******************************************************************************
* @brief 对液晶的8*16字模矩阵做顺时针90度的旋转,来贴合液晶的显示模式
* @param c 需要显示的数字或字符
* @param row 字符显示的行数 取值范围0~8
* @param col 字符显示的列数 取值范围0~21
* @param IsReverse 字符是否翻转显示
* @return 0 , 表示输入参数出错
* 1, 表示显示成功
******************************************************************************/
unsigned char LCD_Draw_Char_8x16(char c, unsigned char row, unsigned char col) {

unsigned char * add = asc + (c - 0x20) * 16;
unsigned int i, j; //计数器
unsigned char col_0 = col; // 低四位
unsigned char col_1 = col >> 4; // 高四位

//----------------输入检测-------------
//--------------返回0表示输入出错---------------
if (col > LCD_MAX_COL - 1) {
return 0;
}
if (row > LCD_MAX_RAW - 1) {
return 0;
}

for (i = 0; i < 2; i++) {
rstCS
LCD_TransferCmd(0xb0 + row * 2 + i); //设置“页”
LCD_TransferCmd(0x10 + (col_1 & 0x0f)); //设置“列”以及列的高四位
LCD_TransferCmd(0x00 + (col_0 & 0x0f)); //设置“列”以及列的低四位
for (j = 0; j < 8; j++) {
LCD_TransferData(*add);
add++;
}
}

return 1; //返回1表示执行成功!
}

/******************************************************************************
* @brief 对液晶的8*8字模矩阵做顺时针90度的旋转,来贴合液晶的显示模式
* @param c 需要显示的数字或字符
* @param row 字符显示的行数 取值范围0~8
* @param col 字符显示的列数 取值范围0~21
* @return 0 , 表示输入参数出错
* 1, 表示显示成功
******************************************************************************/
unsigned char LCD_Draw_Char_8x8(char c, unsigned char row, unsigned char col,
bool IsReverse) {

unsigned char * add = acFont8ASCII[c - 0x20];
unsigned int i, j; //计数器
unsigned char col_1 = col * CHAR_WIDTH >> 4; // 高四位
unsigned char col_0 = col * CHAR_WIDTH; // 高四位
unsigned char data_ori[NUM_CHAR][NUM_CHAR] = { 0 };
unsigned char data_cha[NUM_CHAR][NUM_CHAR] = { 0 };
unsigned char show_chr[NUM_CHAR] = { 0 };
unsigned char ori_chr[NUM_CHAR] = { 0 };
//----------------输入检测-------------
//--------------返回0表示输入出错---------------
if (col > LCD_MAX_COL) {
return 0;
}
if (row > ENUM_LINE_NUM) {
return 0;
}

rstCS
LCD_TransferCmd(0xb0 + row); //设置“页”
LCD_TransferCmd(0x10 + (col_1 & 0x0f)); //设置“列”以及列的高四位
LCD_TransferCmd(0x00 + (col_0 & 0x0f)); //设置“列”以及列的低四位

for (i = 0; i < NUM_CHAR; i++) {
ori_chr[i] = *add;
for (j = 0; j < NUM_CHAR; j++) {
data_ori[i][NUM_CHAR - j] = (char) (ori_chr[i] >> j) & 0x01;
}
add++;
}

for (i = 0; i < NUM_CHAR; i++) {
for (j = 0; j < NUM_CHAR; j++) {
data_cha[j][i] = data_ori[i][j];
}
}

for (i = 0; i < NUM_CHAR; i++) {
unsigned char temp = 0;
for (j = 0; j < NUM_CHAR; j++) {
if (IsReverse) {
if (data_cha[i][j] == 0)
temp = temp | (0x01 << j);
else
temp = temp | (0x00 << j);
} else {
if (data_cha[i][j] == 1)
temp = temp | (0x01 << j);
else
temp = temp | (0x00 << j);
}
}
show_chr[i] = temp;
}

for (j = 0; j < NUM_CHAR; j++) {
LCD_TransferData(show_chr[j]);
// add++;
}

return 1; //返回1表示执行成功!
}

/******************************************************************************
* @brief 显示一串8*8大小的字符串
* @param c 需要显示的数字或字符
* @param raw 字符显示的行数 取值范围0~8
* @param col 字符显示的列数 取值范围0~21
* @param IsReverse 字符是否翻转显示
* @return 0 , 表示输入参数出错
* 1, 表示显示成功
******************************************************************************/
unsigned char LCD_Draw_String(char * c, unsigned int raw, unsigned int col,
bool IsReverse) {
int i = 0;

int len = strlen(c);

for (i = 0; i < len; i++) {
LCD_Draw_Char_8x8(*c, raw, (col + i), IsReverse);
c++;
}
return 0;
}


/******************************************************************************
* @brief 显示一个浮点型的数字
* @param c 需要显示的数字或字符
* @param raw 字符显示的行数 取值范围0~8
* @param col 字符显示的列数 取值范围0~21
* @param IsReverse 字符是否翻转显示
* @return 0 , 表示输入参数出错
* len:返回数据长度值,该值在两次数据显示确定清除位时使用
******************************************************************************/
unsigned char LCD_Draw_Num(float number, int scale, unsigned int raw,
unsigned int col, bool IsReverse) {
if (scale > 10 || scale < 0)
return 0;

//通过小数点保留位数算所乘系数
unsigned char zero = '0';

int show_number = 0;
int temp = show_number;
int Cur_len = 0; //当前数据长度
int multi = 1;
int i = 0;
if(scale > 0 ){

for (i = 0; i < scale; i++) {
multi *= 10;
}
}else{
multi = 1;
}
// 计算显示的数字位数
show_number = (int) (number * multi);
temp = show_number;
for (i = 0; i < 10; i++) {
if (i == 9) // 数据过大返回
return 0;

temp = temp / 10;
Cur_len++;
if (temp == 0) {
break;
}
}

//处理小于1的数据的正常显示,能处理最小数值0.001.
if(number < 1 && number > 0.1)
{
Cur_len = Cur_len + 1;
}
else if(number < 0.1 && number >0.01)
{
Cur_len = Cur_len +2;
}
else if(number < 0.001 && number > 0)
{
Cur_len = Cur_len +3;
}

//显示数字
for (i = Cur_len - 1; i >= 0; i--) {

if (scale == 0) //显示整数
{

LCD_Draw_Char_8x8(zero + show_number % 10, raw, (col + i), IsReverse);
} else { //带小数点显示
if (i < Cur_len - scale) {
LCD_Draw_Char_8x8(zero + show_number % 10, raw, (col + i),
IsReverse);
} else {
LCD_Draw_Char_8x8(zero + show_number % 10, raw, (col + i + 1),
IsReverse);
}

}
show_number = show_number / 10;
}

if (scale != 0 && Cur_len > scale)
LCD_Draw_Char_8x8('.', raw, (col + Cur_len - scale), IsReverse);

if(scale != 0)
{
Cur_len = Cur_len + 1;
}
return Cur_len;
}

void LCD_Draw_Line_Clear(int line, bool IsReverse) {
unsigned char j;

rstCS
LCD_TransferCmd(0xb0 + line); //选择“页”
LCD_TransferCmd(0x10); //选择“列”
LCD_TransferCmd(0x00);
for (j = 0; j < 132; j++) {
if (IsReverse)
LCD_TransferData(0xFF); //输入数据0xFF,显示0xFF
else
LCD_TransferData(0x00); //输入数据0x00,显示0x00
}
}

void LCD_Draw_Clear_8x8(unsigned int page,unsigned int col)
{
unsigned char j;
unsigned char col_1 = col * CHAR_WIDTH >> 4; // 高四位
unsigned char col_0 = col * CHAR_WIDTH; // 高四位
rstCS
LCD_TransferCmd(0xb0 + page); //选择“页”
LCD_TransferCmd(0x10+(col_1 & 0x0f)); //设置“列”以及列的高四位
LCD_TransferCmd(0x00+(col_0 & 0x0f)); //设置“列”以及列的低四位
for (j = 0; j < NUM_CHAR; j++) {
LCD_TransferData(0x00); //输入数据0x00,显示0x00
}
}

/******************************************************************************
* @brief 对液晶的8*8字模矩阵做顺时针90度的旋转,来贴合液晶的显示模式
* @param index 需要显示的汉字的字模编号
* @param row 字符显示的行数 ,取值范围0~3
* @param col 字符显示的列数 ,取值范围0~119
* @return 0 , 表示输入参数出错
* 1, 表示显示成功
******************************************************************************/
unsigned char LCD_Draw_Chinese(unsigned char index, unsigned char row,
unsigned char col) {
unsigned char * chinese = CHINESE_MATRIX + 32 * index;
unsigned int i, j; //计数器
unsigned char col_0 = col; //列低四位
unsigned char col_1 = col >> 4; //列高四位

//----------------输入检测-------------
//-----------返回0表示输入出错------------
if (col > 111) {
return 0;
}
if (row > 3) {
return 0;
}

for (i = 0; i < 2; i++) {
rstCS
LCD_TransferCmd(0xb0 + row); //设置“页”
LCD_TransferCmd(0x10 + (col_1 & 0x0f)); //设置“列”以及列的高四位
LCD_TransferCmd(0x00 + (col_0 & 0x0f)); //设置“列”以及列的低四位
for (j = 0; j < 16; j++) {
LCD_TransferData(*chinese);
chinese++;
}
}
return 1; //返回1表示执行成功!
}

/************************************************************************
* 初始化ADC获取滚轮电压值
* ————————
* |
// PC7|<--Button1
* TIVA PD6|<--Button2
* PD7|<--Button3
// ________|
*
* @return 0x00
* 0x01
* 0x02
***********************************************************************/
unsigned char scan_key(void) {
int32_t ping1 = GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_6);
int32_t ping2 = GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_7);
int32_t ping3 = GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_7);
if (GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_7) == 0x00) {

SysCtlDelay(10 * (SysCtlClockGet() / 3000)); // 延时约10ms,消除按键抖动
while (GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_7) == 0x00)
; // 等待KEY抬起
SysCtlDelay(10 * (SysCtlClockGet() / 3000)); // 延时约10ms,消除松键抖动

// do something

return 0x01;
}

if (GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_6) == 0x00) {
SysCtlDelay(10 * (SysCtlClockGet() / 3000)); // 延时约10ms,消除按键抖动
while (GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_6) == 0x00)
; // 等待KEY抬起
SysCtlDelay(10 * (SysCtlClockGet() / 3000)); // 延时约10ms,消除松键抖动

// do something

return 0x02;
}

// if (GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_7) == 0x00)
// {
// SysCtlDelay(10*(SysCtlClockGet() / 3000)); // 延时约10ms,消除按键抖动
// while (GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_7) == 0x00); // 等待KEY抬起
// SysCtlDelay(10*(SysCtlClockGet() / 3000)); // 延时约10ms,消除松键抖动
// return 0x03;
// }

return 0;
}

编译通过,烧写到板子上运行时屏幕上并未出现光标..而且按键中断时光标对应的坐标参量值也没有变化,求大神解答哪里出了问题