触摸屏程序
#include"main.h" /*********定义三个宏,歌曲、模式、控制**********/ #define SONG 1; #define MOD 2; #define CONTORL 3; char cmd[200]="loadfile ./song/the_dream_up.mp3"; int fp,voice=40,pic_flag=0,voice_flag,N=0; SONGNAME *namehead; /*******************************************/ //函数功能:显示歌取名字,打印在屏幕上 //参数: 歌曲名链表的头指针 //返回值: void /********************************************/ void disp_song_name(SONGNAME *head){//显示歌曲名字 int i; char *temp; SONGNAME *pa=head; TFT_File_Picture(windowHZ, 97, 289, "./picture/song_back.bmp", 1); for(i=0;i<8&&pa!=NULL;i++){ temp=pa->songname+7; if(i==0) printHZ_color(windowHZ,temp,110,300+25*i); else printNAME(windowHZ,temp,110,300+25*i); pa=pa->next; } } /*******************************************/ //函数功能:判断触摸位置 //参数: 触摸点的坐标(x,y) //返回值: void /********************************************/ void judge_place(int x,int y){ int place; char second[20]; char *voice_table[6]={"./picture/voice0.bmp","./picture/voice1.bmp", "./picture/voice2.bmp","./picture/voice3.bmp", "./picture/voice4.bmp","./picture/voice5.bmp",}; if(x>=741&&x<800&&y>=0&&y<=35){// 右上角的关机部位 TFT_ClearWindow(windowHZ); execlp("poweroff","poweroff",NULL); } if((x>=105&&x<380)&&(y>=300&&y<=460)){//歌曲栏 place=SONG; SONGNAME *namecmd=namehead; printf("%d\n",place); char p[255]="loadfile "; int fp=open("./fifo_cmd",O_WRONLY); if(x>=110&&x<370&&y>=300&&y<325){ /*******1*********/ while(namecmd!=NULL){ if(namecmd->num==N){ strcat(p,namecmd->songname); disp_song_name(namecmd);//歌曲名字显示 break; } namecmd=namecmd->next; } strcat(p,"\n"); write(fp,p,strlen(p)); TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1); TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1); } if(x>=110&&x<370&&y>=325&&y<350){ /***********2***********/ while(namecmd!=NULL){ if(namecmd->num==(N+1)){ N=N+1; strcat(p,namecmd->songname); disp_song_name(namecmd);//歌曲名字显示 break; } namecmd=namecmd->next; } strcat(p,"\n"); write(fp,p,strlen(p)); TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1); TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1); } if(x>=110&&x<370&&y>=350&&y<375){ /*************3***********/ while(namecmd!=NULL){ if(namecmd->num==(N+2)){N=N+2; strcat(p,namecmd->songname); disp_song_name(namecmd);//歌曲名字显示 break; } namecmd=namecmd->next; } strcat(p,"\n"); write(fp,p,strlen(p)); TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1); TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1); } if(x>=110&&x<370&&y>=375&&y<400){ /************4***********/ while(namecmd!=NULL){ if(namecmd->num==(N+3)){N=N+3; strcat(p,namecmd->songname); disp_song_name(namecmd);//歌曲名字显示 break; } namecmd=namecmd->next; } strcat(p,"\n"); write(fp,p,strlen(p)); TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1); TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1); } if(x>=110&&x<370&&y>=400&&y<425){ /************5*********/ while(namecmd!=NULL){ if(namecmd->num==(N+4)){N=N+4; strcat(p,namecmd->songname); disp_song_name(namecmd);//歌曲名字显示 break; } namecmd=namecmd->next; } strcat(p,"\n"); write(fp,p,strlen(p)); TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1); TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1); } if(x>=110&&x<370&&y>=425&&y<450){ /***********6***********/ while(namecmd!=NULL){ if(namecmd->num==(N+5)){N=N+5; strcat(p,namecmd->songname); disp_song_name(namecmd);//歌曲名字显示 break; } namecmd=namecmd->next; } strcat(p,"\n"); write(fp,p,strlen(p)); TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1); TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1); } if(x>=110&&x<370&&y>=450&&y<475){ /************7**********/ while(namecmd!=NULL){ if(namecmd->num==(N+6)){N=N+6; strcat(p,namecmd->songname); disp_song_name(namecmd);//歌曲名字显示 break; } namecmd=namecmd->next; } strcat(p,"\n"); write(fp,p,strlen(p)); TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1); TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1); } } //=====================歌曲模式==========================/ else if((x>=20&&x<=380)&&(y>=260&&y<=280)){ place=MOD; printf("%d\n",place); } //=====================歌曲控制==========================/ else if((x>=20&&x<=375)&&(y>195&&y<=250)){//歌曲控制 place=CONTORL; printf("%d\n",place); /*********按键的坐标********************/ // 快退:(69,189)-(118,241) // 快进:(118,189)-(167,241) // 上一曲:(167,189)-(216,241) // 下一曲:(216,189)-(265,241) /****************************************/ if(x>=20&&x<=69&&y>195&&y<=250){ //暂停键 write(fp,"pause\n",strlen("pause\n")); if(voice_flag){ TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1); } if(!pic_flag){ pic_flag=~pic_flag; TFT_File_Picture(windowHZ, 20, 189, "./picture/11.bmp", 1); } else { pic_flag=~pic_flag; TFT_File_Picture(windowHZ, 20, 189, "./picture/1.bmp", 1); } } else if(x>69&&x<118&&y>195&&y<=250){ //快退 write(fp,"seek -5\n",strlen("seek -5\n")); if(voice_flag){ TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1); } TFT_File_Picture(windowHZ, 69, 189, "./picture/21.bmp", 1); if(!voice_flag){ TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1); } TFT_File_Picture(windowHZ, 69, 189, "./picture/2.bmp", 1); } else if(x>118&&x<167&&y>195&&y<=250){ //快进 write(fp,"seek 5\n",strlen("seek 5\n")); if(voice_flag){ TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1); } TFT_File_Picture(windowHZ, 118, 189, "./picture/31.bmp", 1); if(!voice_flag){ TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1); } TFT_File_Picture(windowHZ, 118, 189, "./picture/3.bmp", 1); } else if(x>167&&x<216&&y>195&&y<=250){ //上一曲 N--; if(N<0)N=10; if(voice_flag){ TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1); } TFT_File_Picture(windowHZ, 167, 189, "./picture/41.bmp", 1); SONGNAME *namecmd; if(N>10)N=0; if(!voice_flag){ TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1); } char p[255]="loadfile "; namecmd=namehead; while(namecmd!=NULL){ if(namecmd->num==N){ strcat(p,namecmd->songname); disp_song_name(namecmd);//歌曲名字显示 break; } namecmd=namecmd->next; } strcat(p,"\n"); write(fp,p,strlen(p)); TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1); TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1); TFT_File_Picture(windowHZ, 167, 189, "./picture/4.bmp", 1); } else if(x>216&&x<265&&y>195&&y<=250){ //下一曲 N++; SONGNAME *namecmd; if(voice_flag){ TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1); } if(N>10)N=0; TFT_File_Picture(windowHZ, 216, 189, "./picture/51.bmp", 1); if(!voice_flag){ TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1); } char p[255]="loadfile "; namecmd=namehead; while(namecmd!=NULL){ if(namecmd->num==N){ strcat(p,namecmd->songname); disp_song_name(namecmd);//歌曲名字显示 break; } namecmd=namecmd->next; } strcat(p,"\n"); write(fp,p,strlen(p)); TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1); TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1); TFT_File_Picture(windowHZ, 216, 189, "./picture/5.bmp", 1); } else if(x>=270&&x<=314&&y>195&&y<=250){//静音键 if(voice_flag){ voice_flag=~voice_flag; TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1); write(fp,"mute 0\n",strlen("mute 0\n")); } else { voice_flag=~voice_flag; TFT_File_Picture(windowHZ, 265, 189, "./picture/no_voice.bmp", 1); write(fp,"mute 1\n",strlen("mute 1\n")); } } else if(x>=314&&x<=375&&y>195&&y<=250){//调节音量 voice=voice+20; if(voice_flag){ TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1); } if(voice>100){ voice=0; write(fp,"volume 0\n",strlen("volume 0\n")); } printf("voice= %d\n",voice); TFT_File_Picture(windowHZ, 314, 189, voice_table[voice/20], 1); if(voice==0) write(fp,"volume 0 1\n",strlen("volume 0 1\n")); if(voice==20) write(fp,"volume 20 1\n",strlen("volume 20 1\n")); if(voice==40) write(fp,"volume 40 1\n",strlen("volume 40 1\n")); if(voice==60) write(fp,"volume 60 1\n",strlen("volume 60 1\n")); if(voice==80) write(fp,"volume 80 1\n",strlen("volume 80 1\n")); if(voice==100) write(fp,"volume 100 1\n",strlen("volume 100 1\n")); } } } void *touch_screen(void *p){ int x,y,up_down; CUR_VAL val_single; //打开触摸屏设备文件 int touch_fd = open_touch_dev("/dev/event1"); x = val_single.current_x; y = val_single.current_y; up_down = val_single.key; namehead=readsongname(); //voice=60; while(1){ //the_next_song(); //scond=time((time_t*) NULL); analysis_event_single(touch_fd, &val_single);//返回值为当前触摸点的坐标 x = val_single.current_x; y = val_single.current_y; up_down = val_single.key; fp=open("./fifo_cmd",O_WRONLY); up_down=val_single.key;//按下,up_down为1 if(up_down){ usleep(100*1000);//去抖 analysis_event_single(touch_fd, &val_single); up_down=val_single.key;//按下,up_down为1 if(up_down){ judge_place(x,y); while(up_down){//判断松手 analysis_event_single(touch_fd, &val_single); up_down=val_single.key; } } } } }