?? 102eac9f6761001d168eb4690aa46264
字號:
/**************************************************************
* 函數說明:智能型盲人導航儀
*
*
*
* 備注:由NAVIGATOR 團隊制作
* 安江 曹漢超 盧茜茜 馮金龍 王耀文 常玉祥 田景 郭瑞
**************************************************************/
#include <stdio.h>
#include <io.h>
#include <system.h>
#include <alt_types.h>
#include <string.h>
#include <stdlib.h>
// 讀取鍵盤狀態或數據超時次數
#define PS2_TIMEOVER 100000
// FreeDev PS2寄存器 OFFSET
#define PS2_STATUS 0x02
#define PS2_DATA 0x03
// FreeDev PS2狀態位
#define PS2_NOACK 0x0001
#define PS2_TX_WRITE_ACK 0x0002
#define PS2_RX_DATA_READY 0x04
#define PS2_SHIFT_KEY_ON 0x08
#define PS2_RX_RELEASED 0x10
#define PS2_RX_EXTENDED 0x20
struct gps
{
char mark[12];
char time[10];
char value;
char dim[16];
char lon[15];
char ddmmyy[6];
};
void *gPS2Base;
int wait_rx_ready(int count,alt_u16 *pStatus)
{
int iRet;
alt_u16 status,data;
int i;
if(count==0)
{
do{
status=IORD(gPS2Base,PS2_STATUS);
}while(!(status & PS2_RX_DATA_READY));
*pStatus=status;
return 0;
}else
{
for(i=0;i<count;i++)
{
status=IORD(gPS2Base,PS2_STATUS);
if(status & PS2_RX_DATA_READY)
{
*pStatus=status;
return 0;
}
}
return -1;
}
return -1;
}
int read_scan_code(alt_u8 *scan_code)
{
int iRet,i;
alt_u16 status,data;
if(wait_rx_ready(0,&status)<0)
return -1;
data=IORD(gPS2Base,PS2_DATA);
*scan_code = (data & 0xff00)>>8;
return 0;
}
int read_ascii(alt_u8 *code)
{
int iRet;
alt_u16 status,data;
// 讀鍵盤斷碼
while(1)
{
if(wait_rx_ready(0,&status)<0)
return -1;
if((status & PS2_RX_RELEASED))
break;
// 讀通碼
data=IORD(gPS2Base,PS2_DATA);
}
// 讀斷碼數據
data=IORD(gPS2Base,PS2_DATA);
*code = data & 0x00ff;
return 0;
}
int init_ps2(void *base_addr)
{
int iRet;
unsigned char i;
alt_u16 status,data;
alt_u8 key;
gPS2Base=base_addr;
IOWR(FREEDEV_PS2_INST_BASE,PS2_DATA,0xFF);
// printf("reset keyboard......\n");
while(1)
{
iRet=read_scan_code(&key);
if(iRet<0)
{
printf("讀取鍵盤自測試字節錯誤");
return -1;
}
if(key==0xfa)
continue;
else if(key!=0xaa)
IOWR(gPS2Base,PS2_DATA,0xFF);
else
break;
}
// printf("reset keyboard OK!!\n");
return 0;
}
/***************************************************************************
模塊劃分:以下屬于gps 信息處理模塊
負責人:郭瑞
***************************************************************************/
/**************************************************************
* 函數名稱:gps_module_datachuli()
* 說明:接受GPS信號,查詢當前所處地段;
* 參數:gps接收到的經緯度值,返回為該地的值
* 備注:navigator團隊
* 負責人;郭瑞
************************************************************/
int gps_module_chuli()
{
FILE * fp_scdt;
char ch;
char data_in[80];
char sh="1234";
int i;
int j;
int m=0;
int n=0;
int cont[15];
int ditu_w[5]={1,2,3,4,5};
int ditu_j[5]={6,7,8,9,10};
int ditu_add[5][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
int v=0;
struct gps gps_data;
FILE * fp_gps;
if(fp_scdt=fopen("/dev/scdt_uart","r")==NULL)
{
printf("不能夠鏈接到GPS!");
}
gps_data.dim[0]=4;
gps_data.lon[0]=8;
gps_data.value='A';
if(gps_data.value!='A')
{
printf("不能正常定位!");
}
else
{
ch=fgetc(fp_scdt);
printf("%c",ch);
for(i=0;i<5;i++)
{
if(gps_data.dim[0]==ditu_w[i])
{
m=i;
printf("m=....%d",m);
for(j=0;j<5;j++)
{
if(gps_data.lon[0]==ditu_j[j])
{
n=j;
printf("n=......%d",n);
v=1;
}
}
}
}
}
return ditu_add[m][n];
}
int gps_module_search()
{
int gps_module_chili();
int a=gps_module_chuli();
printf("目前您處的位置為%d",a);
return '4';
}
/******************************************************
* 函數名稱:gps_module_inguid
* 說明:智能導航
* 參數:輸入為當前位置,輸出為導航路徑
* 備注:navigator團隊
* 負責人:郭瑞
******************************************************/
int gps_module_inguid()
{
}
/*******************************************************
* 函數名稱:gps_module_menu()
* 說明:GPS各功能的選擇
* 參數:鍵盤輸入,調用各個模塊
* 備注:navigatour團隊
* 負責人:郭瑞
********************************************************/
int gps_module_menu()
{
int iRet;
int gps_module_search();
alt_u16 status,data;
alt_u8 key;
while(key!='0')
{
FILE * fp_lcd;
fp_lcd=fopen(LCD_16702_0_NAME,"w");
fprintf(fp_lcd,"follow voice\n ");
fprintf(fp_lcd,"1:DQ chaxun");
fprintf(fp_lcd,"2:MB chaxun");
fprintf(fp_lcd,"3:ZN daohang");
fprintf(fp_lcd,"0:ZHU menu");
fprintf(fp_lcd,"4:DQ menu");
printf(".........................................\n");
printf("請按照語音進行操作\n");
printf("正在初始化........................\n");
printf("\t1:當前位置查詢\t2:目標地查詢\n");
printf("\t3:進入智能導航\t0:返回主目錄\n");
printf("\t其他任意鍵返回當前菜單\n");
printf("請輸入你的操作\n");
iRet=init_ps2(FREEDEV_PS2_INST_BASE);
iRet=read_ascii(&key);
printf("%c\n",key);
if (key<='4')
{
switch(key)
{
case '1': key=gps_module_search(); break;
// case '2': break;
// case '3': break;
// case '4': break;
default : printf("輸入錯誤!請重新輸入..................\n"); break;
}
}
fclose(fp_lcd);
}
return 0;
}
int sos()
{
FILE* fp_gps;
char* msg="mean danger";
fp_gps=fopen("/dev/scdt_uart", "r+");
if(fp_gps)
{
fwrite(msg,strlen(10),fp_gps);
fclose(fp_gps);
}
return 0;
}
int menu()
{
FILE *fp_lcd;
fp_lcd=fopen(LCD_16702_0_NAME,"w");
int iRet;
alt_u16 status,data;
alt_u8 key;
// fprintf(fp_lcd,"................\n");
fprintf(fp_lcd,"= 漢 =\n");
// fprintf(fp_lcd,"................\n");
fprintf(fp_lcd,"follow guid!....\n");
fprintf(fp_lcd,"漢\n");
fprintf(fp_lcd,".2.sos message.\n");
printf("選擇一號鍵進入GPS導航\n");
printf("選擇二號鍵進入急救信息發送\n");
printf("沒有選擇,進入普通模式\n");
printf("請選擇..............\n");
iRet=init_ps2(FREEDEV_PS2_INST_BASE);
iRet=read_ascii(&key);
printf("%c\n",key);
return (key);
}
int main()
{
FILE *fp_lcd;
IOWR(LCD_ON_BASE, 0x00,0x01);
IOWR(LCD_BLON_BASE,0x00,0x01);
int sos();
alt_u8 k;
while (1)
{
k=menu();
switch (k)
{
case '1' : gps_module_menu() ; break ;
case '2' : sos(); break ;
// case '3' : mangdaoshibie();break;
default : printf("輸入錯誤,請重新輸入!");
}
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -