📄 main.c
字号:
/****************************************Copyright (c)*
**--------------File Info---------------------------------------------------------------------------------
** File Name: main.c
** Last modified Date: 2009/02/20
** Last Version: V1.00
** Description: LCD的混合输出
*********************************************************************************************************/
// 包含必要的头文件
#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"
#include <uart.h>
#include "KEY.H"
#include "UART_GetPut.H"
// 将较长的标识符定义成较短的形式
#define SysCtlPeriEnable SysCtlPeripheralEnable
#define SysCtlPeriDisable SysCtlPeripheralDisable
#define GPIOPinTypeIn GPIOPinTypeGPIOInput
#define GPIOPinTypeOut GPIOPinTypeGPIOOutput
// 定义预防JTAG失效按键
#define KEY_PERIPH SYSCTL_PERIPH_GPIOG
#define KEY_PORT GPIO_PORTG_BASE
#define KEY_PIN GPIO_PIN_5
//定义房间
#define room1 0x01
#define room2 0x02
#define room3 0x03
#define room4 0x04
typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */
typedef unsigned int U16; /* defined for unsigned 16-bits integer variable无符号16位整型变量 */
//----------------------------------------------//
//----------------定义区--------------------//
//----------------------------------------------//
U8 U8FLAG,k;
U8 U8count,U8temp;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;
U8 outdata[5]; //定义发送的字节数
U8 indata[5];
U8 count, count_r=0;
U8 str[5]={"RS232"};
U16 U16temp1,U16temp2;
U8 position=10;
U8 poCursor;
U8 CursorX=1;
U8 CursorY=0;
U8 KeyN=0; //按键次数
U8 t=0;
//U8 jj=18;
void TimeDis(U8 poCursor);
// 防止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 = 12000000UL;
unsigned char disbuffer[80] = {'0' ,'2' ,'0' ,'2', '5', '4' ,'7' ,'8' ,'0' ,'2' ,'0' ,'2', '5', '4' ,'7' ,'8' ,'0' ,'2' ,'0' ,'2', '5', '4' ,'7' ,'8' ,
'1','5','5','6','8','8','3','4'};
unsigned char Timebuffer[10]={'0','0',':',' ','0','0',':',' ','0','0'};
unsigned char PCursor[4][8] = {0X80,0X81,0X82,0X83,0X84,0X85,0X86,0X87,
0X90,0X91,0X92,0X93,0X94,0X95,0X96,0X97,
0X88,0X89,0X8A,0X8B,0X8C,0X8D,0X8E,0X8F,
0X98,0X99,0X9A,0X9B,0X9C,0X9D,0X9E,0X9F};
unsigned char Timebuf[12]={'0','9',0XC4,0XEA,'0','1',0XD4,0XC2,'0','1',0XC8,0XD5};
void Delay(unsigned long ulVal)
{
while ( --ulVal != 0 );
}
// 定义显示字符指针
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功能选择
*/
// 系统初始化
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
UART_GetPutInit(); // UART收发初始化
KEY_Init(KEY1 | KEY2);
//GPIOD_IntInit(); // GPIOD中断初始化
//GPIOG_IntInit(); // GPIOG中断初始化
//IntMasterEnable(); // 使能处理器中断
}
void COM(void)
{
U8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
//----------------------
// P2_1=0 ; //T
// P2_1=1 ; //T
//----------------------
GPIOPinTypeIn(GPIO_PORTF_BASE , GPIO_PIN_0); // 设置PA2为输chu类型
while((!GPIOPinRead(GPIO_PORTF_BASE , GPIO_PIN_0))&&U8FLAG++);
Delay(TheSysClock / 200000); //Delay_10us();
//Delay_10us();
// Delay_10us();
U8temp=0;
if(GPIOPinRead(GPIO_PORTF_BASE , GPIO_PIN_0))U8temp=1;
U8FLAG=2;
while((GPIOPinRead(GPIO_PORTF_BASE , GPIO_PIN_0))&&U8FLAG++);
//----------------------
// P2_1=0 ; //T
// P2_1=1 ; //T
//----------------------
//超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
U8comdata<<=1;
U8comdata|=U8temp; //0
}//rof
}
//--------------------------------
//-----湿度读取子程序 ------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
//----校验 8位 == U8checkdata-----
//----调用相关子程序如下----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------
void RH(void)
{
//主机拉低18ms
GPIOPinTypeOut(GPIO_PORTF_BASE , GPIO_PIN_0); // 设置PA2为输chu类型
GPIOPinWrite(GPIO_PORTF_BASE , GPIO_PIN_0 , 0x00); // P2_0=0;
Delay(18 * (TheSysClock / 4000)); //Delay(180);
GPIOPinWrite(GPIO_PORTF_BASE , GPIO_PIN_0 , 0x01);// P2_0=1;
//总线由上拉电阻拉高 主机延时20us
Delay((TheSysClock / 100000)); /* Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();*/
//主机设为输入 判断从机响应信号
GPIOPinWrite(GPIO_PORTF_BASE , GPIO_PIN_0 , 0x01);// P2_0=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
GPIOPinTypeIn(GPIO_PORTF_BASE , GPIO_PIN_0); // 设置PA2为输chu类型
if(!GPIOPinRead(GPIO_PORTF_BASE , GPIO_PIN_0)) //T !
{
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while((!GPIOPinRead(GPIO_PORTF_BASE , GPIO_PIN_0))&&U8FLAG++);
U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while((GPIOPinRead(GPIO_PORTF_BASE , GPIO_PIN_0))&&U8FLAG++);
//数据接收状态
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
GPIOPinTypeOut(GPIO_PORTF_BASE , GPIO_PIN_0); // 设置PA2为输chu类型
GPIOPinWrite(GPIO_PORTF_BASE , GPIO_PIN_0 , 0x01); // P2_0=1;
//数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}//fi
}//fi
}
void wenshi()
{
unsigned char buf[20];
float s1=0,s2=0;
unsigned char i,j,k;
for (i=0;i<10;i++)
{
RH();
s1+= U8RH_data_H ;
s2+= U8T_data_H;
Delay(500 * (TheSysClock / 4000)); // 延时约200ms
}
for (j=0;j<=3;j++)
{
sprintf(buf , "%f% " , s1/10 ); // 输出结果,单位:微秒
UART_Puts(buf);
disbuffer[j]=buf[j];
}
for (k=0;k<=3;k++)
{
sprintf(buf , "%fc\r\n" , s2/10 ); // 输出结果,单位:微秒
UART_Puts(buf);
disbuffer[k+4]=buf[k];
}
}
void PictureDis(void)
{
LCDInit(); // LCD初始化
clear_all(); // 清屏
LCD_PictureOff(); // 关图片显示功能
LCD_PowerOnPictureInit_disp(); // 显示初始界面
LCD_PictureOn(); // 开图片显示功能
}
void gaitime(position)
{
int a,b;
a=Timebuffer[position];
b=Timebuf[position];
if(CursorX==1) //修改年月日
{
if(position==1) //年
{
if((Timebuf[position-1]==57&&Timebuf[position]<57)|(Timebuf[position-1]<57&&Timebuf[position]<=57))
{
if(b>=57)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -