新手入门
- 积分
- 12
- 金钱
- 12
- 注册时间
- 2018-10-17
- 在线时间
- 29 小时
|

楼主 |
发表于 2019-5-30 22:07:22
|
显示全部楼层
[mw_shl_code=c,true]#include "sim900a.h"
#include "usart.h"
#include "delay.h"
#include "lcd.h"
#include "touch.h"
void Get_HzMat(unsigned char *code,unsigned char *mat,u8 size)
{
unsigned char qh,ql;
unsigned char i;
unsigned long foffset;
u8 csize=(size/8+((size%8)?1:0))*(size);//μÃμ½×Öìåò»¸ö×Ö·û¶Ôó|μãÕó¼ˉËùÕ¼μÄ×Ö½úêy
qh=*code;
ql=*(++code);
if(qh<0x81||ql<0x40||ql==0xff||qh==0xff)//·Ç 3£óÃoo×Ö
{
for(i=0;i<csize;i++)*mat++=0x00;//ìî3äÂú¸ñ
return; //½áêø·ÃÎê
}
if(ql<0x7f)ql-=0x40;//×¢òa!
else ql-=0x41;
qh-=0x81;
}
void Show_Font(u16 x,u16 y,u8 *font,u8 size,u8 mode)
{
u8 temp,t,t1;
u16 y0=y;
u8 dzk[72];
u8 csize=(size/8+((size%8)?1:0))*(size);//μÃμ½×Öìåò»¸ö×Ö·û¶Ôó|μãÕó¼ˉËùÕ¼μÄ×Ö½úêy
if(size!=12&&size!=16&&size!=24)return; //2»Ö§3ÖμÄsize
Get_HzMat(font,dzk,size); //μÃμ½Ïàó|′óD¡μÄμãÕóêy¾Y
for(t=0;t<csize;t++)
{
temp=dzk[t]; //μÃμ½μãÕóêy¾Y
for(t1=0;t1<8;t1++)
{
if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);
temp<<=1;
y++;
if((y-y0)==size)
{
y=y0;
x++;
break;
}
}
}
}
void Show_Str(u16 x,u16 y,u16 width,u16 height,u8*str,u8 size,u8 mode)
{
u16 x0=x;
u16 y0=y;
u8 bHz=0; //×Ö·û»òÕßÖDÎÄ
while(*str!=0)//êy¾YÎ′½áêø
{
if(!bHz)
{
if(*str>0x80)bHz=1;//ÖDÎÄ
else //×Ö·û
{
if(x>(x0+width-size/2))//»»DD
{
y+=size;
x=x0;
}
if(y>(y0+height-size))break;//Ô½½ç·μ»Ø
if(*str==13)//»»DD·ûoÅ
{
y+=size;
x=x0;
str++;
}
else LCD_ShowChar(x,y,*str,size,mode);//óDD§2¿·ÖD′èë
str++;
x+=size/2; //×Ö·û,Îaè«×ÖμÄò»°ë
}
}else//ÖDÎÄ
{
bHz=0;//óDoo×Ö¿a
if(x>(x0+width-size))//»»DD
{
y+=size;
x=x0;
}
if(y>(y0+height-size))break;//Ô½½ç·μ»Ø
Show_Font(x,y,str,size,mode); //ÏÔê¾Õa¸öoo×Ö,¿ÕDÄÏÔê¾
str+=2;
x+=size;//ÏÂò»¸öoo×ÖÆ«òÆ
}
}
}
//ÔúÖ¸¶¨¿í¶èμÄÖD¼äÏÔê¾×Ö·û′®
//èç1û×Ö·û3¤¶è3¬1yáËlen,ÔòóÃShow_StrÏÔê¾
//len:Ö¸¶¨òaÏÔê¾μÄ¿í¶è
void Show_Str_Mid(u16 x,u16 y,u8*str,u8 size,u8 len)
{
u16 strlenth=0;
strlenth=strlen((const char*)str);
strlenth*=size/2;
if(strlenth>len)Show_Str(x,y,lcddev.width,lcddev.height,str,size,1);
else
{
strlenth=(len-strlenth)/2;
Show_Str(strlenth+x,y,lcddev.width,lcddev.height,str,size,1);
}
}
//////////////////////////////////////////////////////////////////////////////////
u16 time=0;
//¼üÅìÂë±í
const u8* kbd_tbl1[13]={"1","2","3","4","5","6","7","8","9","*","0","#","DEL"};
u8** kbd_tbl;
u8* kbd_fn_tbl[2];
//¼óÔØ¼üÅì½çÃæ£¨3ß′çÎa240*140£©
//x,y:½çÃæÆeê¼×ø±ê£¨320*240·Ö±æÂêμÄê±oò£¬x±ØDëÎa0£©
void sim900a_load_keyboard(u16 x,u16 y,u8 **kbtbl)
{
u16 i;
POINT_COLOR=RED;
kbd_tbl=kbtbl;
LCD_Fill(x,y,x+240,y+140,WHITE);
LCD_DrawRectangle(x,y,x+240,y+140);
LCD_DrawRectangle(x+80,y,x+160,y+140);
LCD_DrawRectangle(x,y+28,x+240,y+56);
LCD_DrawRectangle(x,y+84,x+240,y+112);
POINT_COLOR=BLUE;
for(i=0;i<15;i++)
{
if(i<13)Show_Str_Mid(x+(i%3)*80,y+6+28*(i/3),(u8*)kbd_tbl,16,80);
else Show_Str_Mid(x+(i%3)*80,y+6+28*(i/3),kbd_fn_tbl[i-13],16,80);
}
}
//°′¼ü×′ì¬éèÖÃ
//x,y:¼üÅì×ø±ê
//key:¼üÖ죨0~8£©
//sta:×′쬣¬0£¬Ëé¿a£»1£¬°′Ï£»
void sim900a_key_staset(u16 x,u16 y,u8 keyx,u8 sta)
{
u16 i=keyx/3,j=keyx%3;time=time+1;
if(keyx>15)return;
}
//μÃμ½′¥ÃtÆáμÄêäèë
//x,y:¼üÅì×ø±ê
//·μ»ØÖμ£o°′¼ü¼üÖ죨1~15óDD§£»0,ÎTD§£©
u8 sim900a_get_keynum(u16 x,u16 y)
{
u16 i,j;
static u8 key_x=0;//0,ûóDèÎoΰ′¼ü°′Ï£»1~15£¬1~15oŰ′¼ü°′ÏÂ
u8 key=0;
tp_dev.scan(0);
if(tp_dev.sta&TP_PRES_DOWN) //′¥ÃtÆá±»°′ÏÂ
{
for(i=0;i<5;i++)
{
for(j=0;j<3;j++)
{
if(tp_dev.x[0]<(x+j*80+80)&&tp_dev.x[0]>(x+j*80)&&tp_dev.y[0]<(y+i*28+28)&&tp_dev.y[0]>(y+i*28))
{
key=i*3+j+1;
break;
}
}
if(key)
{
if(key_x==key)key=0;
else
{
sim900a_key_staset(x,y,key_x-1,0);
key_x=key;
sim900a_key_staset(x,y,key_x-1,1);
}
break;
}
}
}
else if(key_x)
{
sim900a_key_staset(x,y,key_x-1,0);
key_x=0;
}
return key;
}
//SIM900A·¢¶ìDÅ2aêÔ
void sim900a_sms_send_test(void)
{
// u8 *p,*p1,*p2,*s0,*s1,*s2,*s3,*s4,*s5,*s6,*s7,*s8,*s9;
u8 phonebuf[20]; //oÅÂë»o′æ
u8 pohnenumlen=0; //oÅÂë3¤¶è,×î′ó15¸öêy
u8 timex=0;
u8 key=0;
u8 smssendsta=0; //¶ìDÅ·¢Ëí×′ì¬,0,μè′y·¢Ëí;1,·¢Ëíê§°ü;2,·¢Ëí3é1|
LCD_Clear(WHITE);
POINT_COLOR=RED;
POINT_COLOR=BLUE;
sim900a_load_keyboard(0,180,(u8**)kbd_tbl1);//ÏÔê¾¼üÅì
while(1)
{
key=sim900a_get_keynum(0,180);
if(key)
{
if(smssendsta)
{
smssendsta=0;
}
if(key<10||key==11)
{
if(pohnenumlen<15)
{
phonebuf[pohnenumlen++]=kbd_tbl[key-1][0];
}
}else
{
if(key==13)if(pohnenumlen)pohnenumlen--;LCD_Fill(30+54,20,256,50,WHITE);//é¾3y
if(key==14&&pohnenumlen)
{
}
if(key==15) {}
}
phonebuf[pohnenumlen]=0;
LCD_Fill(30+54,20,156,24,RED);
Show_Str(30+54,20,156,24,phonebuf,24,0);
}
if((timex%20)==0)
timex++;
delay_ms(10);
}
}
[/mw_shl_code] |
|