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

📄 main.c

📁 虚拟示波器
💻 C
字号:
/*
;************************************************************************************************************
;*				        				北京精仪达盛科技有限公司
;*                                     	     研    发    部
;*
;*                                 	     http://www.techshine.com
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------                                      
;*
;* 文件名称 : main.c	
;* 文件功能 : 该文件为主程序。
;* 补充说明 : 
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : ARM开发小组
;* 修改日期 : 2004/04/25
;* 版本声明 : V1.0.1
;*-------------------------------------------- 历史版本信息 -------------------------------------------------
;* 文件作者 : ARM开发小组
;* 创建日期 : 2004/04/20
;* 版本声明 : v1.0.0
;*-----------------------------------------------------------------------------------------------------------
;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************
;*/

/*底板SWITCH栏中的CS2拨到ON;CS0,CS1,CS3全为OFF*/

#include <stdlib.h>
#include "..\inc\config.h"
//#include "..\gui\font\Gchar.h"
//#include "ATCMD.h"


#define clreint   (*(unsigned short *)0x08007ffc)  //address 0x1FFE
#define seteint   (*(unsigned short *)0x08007ffe)  //address 0x1FFF

/*
#define   GM450RL       (*(volatile unsigned char *)0x08c00000)
#define   GM450RH       (*(volatile unsigned char *)0x08c00001)
#define   LCR            (*(volatile unsigned char *)0x08c00003)
#define   LSR            (*(volatile unsigned char *)0x08c00005)
*/

#define   GM450RL       (*(volatile unsigned char *)0x0ac00800)
#define   GM450RH       (*(volatile unsigned char *)0x0ac00801)
#define   LCR            (*(volatile unsigned char *)0x0ac00803)
#define   LSR            (*(volatile unsigned char *)0x0ac00805)



#define GSM_MAJOR 52


#define uchar unsigned char

char 	rdata[200],phone[20],netsev[10],rdata1[200],rdata2[200];
char  	ready[] = "READY";

extern unsigned char key_number;


/****清除状态*********/
void ClearStatu(void)
{
  char ch;
  ch=LSR;
  ch=GM450RL;
}


void cleardata(void)
{
 int i=198;
 rdata[199]='\0';
 for(;i>=0;i--)
  rdata[i]=0;
 }
 
/************初始化*****************/ 
void Init_GM160(void)
{
    char temp;
    LCR = 0x80;    // DLAB=1       
	GM450RL=0x0C;	
	GM450RH=0x00;
		
	LCR = 0x03;	// 8bit data , 1 stop bit
	GM450RH=0x00;   //no use the interrupt;
	
	temp=LSR;		
	temp=GM450RL;
	
}

/************发送字符*****************/
void sendch(char ch)
{
  while ((LSR&0x20)==0);  //maybe have problem
  GM450RL=ch;
}


/***********接收字符*****************/
void recvch(char *receive)
{
  int i,time=1000000;  //time=600000;
 
  for (i=0;i<128;i++)
  { 
    while ((LSR&0x01)==0 && (time--)!=0); //判断是否为空以及时间是否到
   if (time>0)
     {
      *receive++=GM450RL;
      //*receive++=0xaa;
      time=1000000;
      }
    else break;
//    ClearStatu();
  }
  
  *receive='\0';
 }



/*******************AT指令**************/
void ATCMD(void)
{
  sendch('A');
  sendch('T');
  sendch(0x0d); 
 }
 
 
/******************ATE指令****************/
void ATECMD(void)
{
  sendch('A');
  sendch('T'); 
  sendch('E');
  sendch('0');
  sendch(0x0d);  
 }
 
 
/****************CGMI指令****************/
void CGMICMD(void)
{
   sendch('A');
   sendch('T');
   sendch('+');
   sendch('C');
   sendch('G');
   sendch('M');
   sendch('I');
   sendch(0x0d);
}


/***************CMGF指令*****************/
void CMGFCMD0(void)
{
   sendch('A');
   sendch('T');
   sendch('+');
   sendch('C');
   sendch('M');
   sendch('G');
   sendch('F');
   sendch('=');
   sendch('0');
   sendch(0x0d);
}

void CMGFCMD1(void)
{
   sendch('A');
   sendch('T');
   sendch('+');
   sendch('C');
   sendch('M');
   sendch('G');
   sendch('F');
   sendch('=');
   sendch('1');
   sendch(0x0d);
}

void CMGL(void)
{
   sendch('A');
   sendch('T');
   sendch('+');
   sendch('C');
   sendch('M');
   sendch('G');
   sendch('L');
   sendch('=');
   sendch('"');
   sendch('R');
   sendch('E');
   sendch('C');
   sendch(' ');
   sendch('U');
   sendch('N');
   sendch('R');
   sendch('E');
   sendch('A');
   sendch('D');
   sendch('"');
   sendch(0x0d);
}
/**********read message************/
void CMGR(void)
{
   sendch('A');
   sendch('T');
   sendch('+');
   sendch('C');
   sendch('M');
   sendch('G');
   sendch('R');
   sendch('=');
   sendch('2');
   sendch(0x0d);
}
/***************CMGS指令*****************/
void CMGS(char *phonenum)
{
   int i;

   sendch('A');
   sendch('T');
   sendch('+');
   sendch('C');
   sendch('M');
   sendch('G');
   sendch('S');
   sendch('=');
   sendch('"');
   for(i=0;i<11;i++)
   {sendch(phonenum[i]);
   phonenum[i] +=1;
   }
   sendch('"');
   sendch(0x0d);
   
}
/****************send data*******************/ 
void SendData(char *content)
 {
   char len=0, i;
   while ((content[len])!='\0')
     {len++;}                //统计数组字符数
   for (i=0;i<len;i++)
   {sendch(content[i]);  //发送单个字符
     content[i] +=1;
   }
   sendch(26);  
}


/*****************GSM send short message **********************/

void SendShortMessage(char *phonenum,char *data)
{	
   int i;	 
   char readback[128];
                           
   Init_GM160();    //初始化GM160
   for (i=0;i<128;i++)
   readback[i]=0;
   ClearStatu();
            
   CMGFCMD1();
   for(i=0;i<300000;i++);
   CMGS(phonenum);
   for(i=0;i<600000;i++);
   SendData(data);
   
} 


/***************receive short message***************/

void RecShortMessage(char *readback,char *data)
{	
   int i,j,m=0;
   char tmp[128];
                           
   Init_GM160();    //初始化GM160

   ClearStatu();
   for(i=0;i<127;i++)
   readback[i]=0;
   readback[i]='\0';
            
   CMGFCMD1();
   for(i=0;i<3000;i++);
   recvch(readback);

   CMGR();
   for(i=0;i<20000;i++);
   recvch(readback);
 

   i=0;
   while(readback[i++]!='"');
   for(j=0;i<128;i++,j++)
   tmp[j]=readback[i];
   tmp[j] = '\0';
   for(i=0;i<128;i++)
   { 
      if((tmp[i]==0x0D) && (tmp[i+1]==0x0A))
      {
        j=i+2;
        while(tmp[j]!=0x0D)
         {  data[m] = tmp[j];
            m++;
            j++;
         } 
         data[m]='\0';
       }
        for(j=0;j<64;j++)
        {
         if((data[j]=='O') && (data[j+1]=='K'))
         { data[j]='\0';
           break;
         }
        }  
              
     }
   
}   






//*************Init the Interrupt************//
void InitIrq5(void)                              //打开中断5,使键盘可用
{
  if (rEXTINPND & 0x02)
  {
    rEXTINPND = 0x2;
    rI_ISPC |=BIT_EINT4567;
  }
  rINTMSK  = ~(BIT_GLOBAL|BIT_EINT4567);  //开中断;
  pISR_EINT4567 = (int)EINT5_ISR;
    
}


//***************the ISR of the interrupt**********//
void  __irq EINT5_ISR(void)                       //键盘识别、处理函数
{
 char temp;
 
 rINTMSK  |= BIT_EINT4567;
 temp=clreint;           //shut down the interrupt
 
 
 rEXTINPND = 0x2;               //open the interrupt
 rI_ISPC |=BIT_EINT4567;
 rINTMSK  = ~(BIT_GLOBAL|BIT_EINT4567);
 
 seteint=0x55AA;             //turn to the DSP 
 
}


 /**********display number****************/
void dispNum(int x,int y,int colour,int number)    //在液晶屏上显示数字
  { 
    switch (number)
      {
       case 0:
         DisplayCharacter(x,y,colour,ASCII_0);
         break;
       case 1:
         DisplayCharacter(x,y,colour,ASCII_1);
         break;
       case 2:
         DisplayCharacter(x,y,colour,ASCII_2);
         break;
       case 3:
         DisplayCharacter(x,y,colour,ASCII_3);
         break; 
       case 4:
         DisplayCharacter(x,y,colour,ASCII_4);
         break;
       case 5:
         DisplayCharacter(x,y,colour,ASCII_5);
         break;
       case 6:
         DisplayCharacter(x,y,colour,ASCII_6);
         break;
       case 7:
         DisplayCharacter(x,y,colour,ASCII_7);
         break; 
       case 8:
         DisplayCharacter(x,y,colour,ASCII_8);
         break;
       case 9:
         DisplayCharacter(x,y,colour,ASCII_9);
         break;
       default:
         break;        
      }      
  }

void dispnum(int x,int y,int num)
{
 int i=0,flag=0;
 if((num/10000==0)&&(flag==0)) {;}
 else
 	{
 	 dispNum(x,y,GUI_YELLOW,num/10000);
 	 flag=1;i+=8;
	}
	num=num%10000;
 if((num/1000==0)&&(flag==0)) {;}
 else
 	{
 	 dispNum(x+i,y,GUI_YELLOW,num/1000);
 	 flag=1;i+=8;
	} 
	num=num%1000;
 if((num/100==0)&&(flag==0)) {;}
 else
 	{
 	 dispNum(x+i,y,GUI_YELLOW,num/100);
 	 flag=1;i+=8;
	}
	num=num%100;
 if((num/10==0)&&(flag==0)) {;}
 else
	{
	 dispNum(x+i,y,GUI_YELLOW,num/10);
 	 flag=1;i+=8;
	}
	num=num%10;
 dispNum(x+i,y,GUI_YELLOW,num);
}

  
 void delayms(int t)
 { int i;
   for(;t>0;t--)
   for(i=6000;i>0;i--);
 
 } 
  
  
  
void Main(void)      //主函数
{ 

int i;
char readback[128];

  Target_Init();       //CPU板初始化函数 
  GUI_Init();          //GUI图形接口初始化 
  

  Init_GM160();
  delayms(50);
  ClearStatu();
  delayms(50);
// cleardata(); 
 
 
  for(i=0;i<10;i++)
{
 dispnum(10,50+i*16,rdata[i]);
}

 
  
   for(i=0;i<127;i++)
   readback[i]=0;
   readback[i]='\0';
          
   
   
   CMGFCMD1();
   for(i=0;i<3000;i++);
   recvch(readback);

 

   CMGFCMD1();
   for(i=0;i<3000;i++);
   recvch(readback);
   
 
   CMGL();
 // for(i=0;i<40000;i++);
   recvch(readback);
   
  for(i=0;i<10;i++)
{
 dispnum(100,50+i*16,readback[i]);
}


  
  /*

  DisplayCharacter(0,20,GUI_YELLOW,Character1);
  Init_GM160();
  delayms(10);
    
  DisplayCharacter(20,20,GUI_YELLOW,Character1);
  ATCMD();
 recvch(rdata);
  
  //if(rdata[3]=='\0')
  DisplayCharacter(40,20,GUI_YELLOW,Character1);
  // ATCMD();
  ATECMD();
   recvch(rdata1);

  //if 
  
  DisplayCharacter(60,20,GUI_YELLOW,Character1);
  CGMICMD();
   recvch(rdata2);
 // recvch(rdata);
  //if(rdata[0]==0x42)
  
  DisplayCharacter(80,20,GUI_YELLOW,Character1);
 // CGMMCMD();

*/



/*  
 dispnum(10,100,30000);
 dispnum(10,120,1000);
 dispnum(10,140,1);
 dispnum(10,160,23798);
*/ 
 while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -