📄 main.c
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name: main.c
** Last modified Date: 2008/07/29
** Last Version: V1.00
** Description: LCD的混合输出及键盘的中断输入
**
**--------------------------------------------------------------------------------------------------------
** Created By: 周小明
** Created date: 2008/07/29
** Version: V1.00
** Descriptions:
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
*********************************************************************************************************/
// 包含必要的头文件
#include <hw_types.h>
#include <hw_memmap.h>
#include <hw_sysctl.h>
#include <hw_gpio.h>
#include <sysctl.h>
#include <gpio.h>
#include "hw_ints.h"
#include "interrupt.h"
#include "LCD_KEY.h"
// 定义预防JTAG失效按键
#define KEY_PERIPH SYSCTL_PERIPH_GPIOG
#define KEY_PORT GPIO_PORTG_BASE
#define KEY_PIN GPIO_PIN_5
// 防止JTAG失效
void jtagWait(void)
{
SysCtlPeriEnable(KEY_PERIPH); // 使能KEY所在的GPIO端口
GPIOPinTypeIn(KEY_PORT , KEY_PIN); // 设置KEY所在管脚为输入
if ( GPIOPinRead(KEY_PORT , KEY_PIN) == 0x00 ) // 如果复位时按下KEY,则进入
{
for (;;); // 死循环,以等待JTAG连接
}
SysCtlPeriDisable(KEY_PERIPH); // 禁止KEY所在的GPIO端口
}
// 定义全局的系统时钟变量
unsigned long TheSysClock;
// 定义显示字符指针
char *line1;
char *line2;
char *line3;
char *line4;
// 字符表(映射对应的按键图标)
uint8 code[20] =
{
48,49,50,51,52,53,54,55,56,57, // 48~57 -> 0~9
42,35,25,27,67,60,26,24,79,62 // 42,35 -> *,#
}; // 24,25,26,27 -> 上,下,左,右
// 67,79 -> 取消,确认
// 60,62 -> F1,F2功能选择
// 端口B中断服务函数
void GPIO_Port_A_ISR(void)
{
uint8 ucIntStatus;
uint8 ucKey;
ucIntStatus = GPIOPinIntStatus( LCD_KEY_PORT , 1); // 读PA口中断状态
if(ucIntStatus & LCD_KEY_KEY) // 判断是否为按键中断
{
GPIOPinIntClear( LCD_KEY_PORT , LCD_KEY_KEY); // 清中断
ucKey = zlg7289Key(); // 读按键值
if (ucKey != 0xff)
{
GPIOPinTypeOut(LCD_KEY_PORT , LCD_KEY_DIO); // 设置DIO为输出
clear_all();
LCD_ComdWrite(0x80);
LCD_DataWrite(code[ucKey]);
}
}
}
// 系统初始化
void sysInit(void)
{
SysCtlLDOSet(SYSCTL_LDO_2_50V); // 设置LDO输出电压
SysCtlClockSet(SYSCTL_USE_OSC | // 系统时钟设置,采用主振荡器
SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ |
SYSCTL_SYSDIV_1);
/*
SysCtlLDOSet(SYSCTL_LDO_2_75V); // 配置PLL前须将LDO电压设置为2.75V
SysCtlClockSet(SYSCTL_USE_PLL | // 系统时钟设置,采用PLL
SYSCTL_OSC_MAIN | // 主振荡器
SYSCTL_XTAL_6MHZ | // 外接6MHz晶振
SYSCTL_SYSDIV_10); // 分频结果为20MHz
*/
TheSysClock = SysCtlClockGet(); // 获取系统时钟,单位:Hz
}
// 主函数(程序入口)
void main(void)
{
jtagWait(); // 防止JTAG失效,重要!
sysInit(); // 系统初始化
zlg7289Init(); // 初始化ZLG7289
GPIOPinTypeIn( LCD_KEY_PORT , LCD_KEY_KEY); // 设置KEY端口为输入
GPIOIntTypeSet( LCD_KEY_PORT , LCD_KEY_KEY, GPIO_FALLING_EDGE);
// 配置引脚下降沿触发中断
GPIOPinIntEnable( LCD_KEY_PORT , LCD_KEY_KEY); // 使能引脚输入中断
IntEnable(INT_GPIOA); // 使能GPIO PB口中断
LCDInit(); // LCD初始化
clear_all(); // 清屏
LCD_PictureOff(); // 关图片显示功能
LCD_PowerOnPictureInit_disp(); // 显示初始界面
LCD_PictureOn(); // 开图片显示功能
line1 = " 广州"; // 显示文字
line2 = " 周立功";
line3 = " 单片机";
line4 = " 有限公司";
LCD_ComdWrite(0x80); // 显示第一行文字
while( *line1!=0x00 )
{
LCD_DataWrite(*line1);
line1++;
}
LCD_ComdWrite(0x90); // 显示第二行文字
while( *line2!=0x00 )
{
LCD_DataWrite(*line2);
line2++;
}
LCD_ComdWrite(0x88); // 显示第三行文字
while( *line3!=0x00 )
{
LCD_DataWrite(*line3);
line3++;
}
LCD_ComdWrite(0x98); // 显示第四行文字
while( *line4!=0x00 )
{
LCD_DataWrite(*line4);
line4++;
}
while(1); // 等待进入按键中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -