📄 main.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 + -