⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 基于EasyARM1138的光标修动修改程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************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 + -