单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:3019|回复:0

ARM历程十一—(拨打电话)

[复制链接]
ID:71259发表于 2014-12-29 20:04|显示全部楼层
  1. 字符显示程序,拨打电话程序:

  2. (程序有待完善)



  3. void Displaytxt(int x0, int y0, int who, U16 color )// 显示数字(16*32)
  4. {
  5.      U16 txt = 0;
  6.      U16 l = 0, h = 0, x = 0, y = 0, z = 0;
  7.     
  8.       
  9.   
  10.    for ( h = 0; h< 32; h++ )
  11.      {
  12.        x = (U16)gImage_number[who][h][z];
  13.         
  14.        y = (U16)gImage_number[who][h][z+1];
  15.       
  16.        txt = y<<8 | x;      
  17.             
  18.      for ( l = 0; l< 16; l++ )//L=16的时候跳出
  19.        {  

  20.          if( (txt>>l)%2 == 1 )
  21.         
  22.    LCD_BUFFER[y0+h][x0+l] = color;  
  23.               
  24.        }
  25.      }
  26.       
  27. }

  28. void Displaytxtbig(int x0, int y0, int who, U16 color )// 显示数字(32*64)
  29. {
  30.      U32 txt = 0;
  31.      U16 l = 0, h = 0, a = 0, b = 0, c = 0, d = 0, z = 0;
  32.     
  33.      extern int X0;    
  34.     
  35.    if ( who == 0 )
  36.        who = 10;
  37.   
  38.      who -= 1;    
  39.       
  40.    for ( h = 0; h< 64; h++ )
  41.      {
  42.        a = (U16)gImage_numberbig[who][h][z];
  43.         
  44.        b = (U16)gImage_numberbig[who][h][z+1];
  45.       
  46.        c = (U16)gImage_numberbig[who][h][z+2];
  47.       
  48.        d = (U16)gImage_numberbig[who][h][z+3];
  49.       
  50.       
  51.        txt = d<<24 | c<< 16 | b<<8 | a;      
  52.             
  53.      for ( l = 0; l< 32; l++ )//L=16的时候跳出
  54.        {  

  55.          if( (txt>>l)%2 == 1 )
  56.         
  57.    LCD_BUFFER[y0+h][x0+l] = color;  
  58.               
  59.        }
  60.      }
  61.   
  62.     
  63.   
  64.        X0 += 32;
  65.   
  66.      if ( X0 >= 384 )
  67.     
  68.        X0 = 384 - 32;
  69.   
  70.   
  71. }

  72. void Displaytxthz(int x0, int y0, int who, U16 color, unsigned char bmp[3][32][4])//显示汉字32*32
  73. {
  74.      U32 txt = 0;
  75.      U16 l = 0, h = 0, a = 0, b = 0, c = 0, d = 0, z = 0;
  76.     
  77.   
  78.       
  79.       
  80.    for ( h = 0; h< 32; h++ )
  81.      {
  82.        a = bmp[who][h][z];
  83.         
  84.        b = bmp[who][h][z+1];
  85.       
  86.        c = bmp[who][h][z+2];
  87.       
  88.        d = bmp[who][h][z+3];
  89.       
  90.       
  91.        txt = d<<24 | c<< 16 | b<<8 | a;      
  92.             
  93.      for ( l = 0; l< 32; l++ )//L=16的时候跳出
  94.        {  

  95.          if( (txt>>l)%2 == 1 )
  96.         
  97.    LCD_BUFFER[y0+h][x0+l] = color;  
  98.               
  99.        }
  100.      }
  101.         
  102. }

  103. void Displayhz( int x0, int y0, int gs, unsigned char bmp[3][32][4] )//连续显示"gs"个汉字
  104. {
  105.   
  106.    int k;  
  107.   
  108.    for ( k = 0; k< gs; k++ )
  109.      {
  110.     
  111.      Displaytxthz( x0, y0, k, 0x1f, bmp );
  112.     
  113.      x0 = x0 + 32;       //光标后移
  114.      }
  115. }


  116. void Bank( int x0, int y0 ) //擦除显示
  117. {
  118.     
  119.    int x, y, m, n;
  120.   
  121.    for ( y = 0, m = y + 54; y< m; y++ )
  122.   
  123.    for ( x = 0, (n = x + 32)&& X0 >= 0; x< n; x++ )
  124.   
  125.        LCD_BUFFER[y0+y][x0+x] = 0xffff;
  126. }    

  127. void Del(void)//删除字符
  128. {
  129. extern int X0;

  130. Bank(  X0, 12 );

  131. X0 -= 32;

  132. if( X0< 0 )

  133.   X0 = 0;

  134. Bank(  X0, 12 );
  135. }
  136. void Delhz(void)//删除汉字//由于汉字和数字的完度不同,所以可以用两个函数分别实现
  137. {
  138. extern int X0;

  139. X0 -= 32;//光标后移

  140. if( X0< 0 )

  141.   X0 = 0;

  142. Bank(  X0, 12 );
  143. }
  144. void phone(void)//拨打电话功能函数
  145. {
  146.   extern volatile int xdata;
  147.   extern volatile int ydata;
  148.   //extern unsigned char Buffer[20];
  149.   extern U16 fz;
  150.   extern int i;

  151.   int e = 2400000;
  152.   int x = -1;



  153.   Displayhz( 0, 34, 7, gImage_opengsm );//显示提示信息

  154.   puts("AT\r");                 //发送连机命令

  155.   while ( e-- ){rGPBDAT& = 0xffff;}   //等待


  156.   Paint_Bank( 0, 6, 480, 54 );
  157.   Displayhz( 0, 34, 13, gImage_inputnumber ); //显示连机成功信息

  158.   e = 9600000;
  159.   while ( e-- ){rGPBDAT& = 0xffff;}


  160.   Paint_Bank( 0, 6, 480, 54 );
  161.   Displayhz( 382, 34, 3, gImage_input );//输入提示信息
  162.   X0 = 0;

  163. xdata = -1; ydata = -1;


  164. if( fz ==1 )

  165. while( Flag == 2 )

  166.   {




  167.   if( xdata >= 68+12&& xdata< = 267-12&& ydata >= 545+12&& ydata< = 670-12 ) //判断按键位置,设置相应按键的功能
  168.    {w = '1'; x = 1; delay();/*去抖*/ Displaytxtbig(X0, 12, 1, 0x6545 ); xdata = -1; ydata = -1;  }
  169.   
  170.   if( xdata >= 267+12&& xdata< = 456-12&& ydata >= 545+12&& ydata< = 670-12 )
  171. {w = '2'; x = 1;delay(); Displaytxtbig(X0, 12, 2, 0x6545 ); xdata = -1;  ydata = -1;  }
  172.   
  173.   if( xdata >= 456+12&& xdata< = 637-12&& ydata >= 545+12&& ydata< = 670-12 )
  174.    {w = '3'; x = 1;delay(); Displaytxtbig(X0, 12, 3, 0x6545 ); xdata = -1; ydata = -1;  }
  175.   
  176.   if( xdata >= 683+12&& xdata< = 935-12&& ydata >= 545+12&& ydata< = 670-12 )
  177.    {x = 1; delay(); Del(); i=i-2; if(i<=0) i=0; xdata = -1; ydata = -1; }
  178.   


  179.   if( xdata >= 68+12&& xdata< = 267-12&& ydata >= 227+12&& ydata< = 401-12 )
  180.    {w = '7'; x = 1; delay(); Displaytxtbig(X0, 12, 7, 0x6545 ); xdata = -1; ydata = -1;  }
  181.   
  182.   if( xdata >= 267+12&& xdata< = 456-12&& ydata >= 227+12&& ydata< = 401-12 )
  183.    {w = '8'; x = 1; delay(); Displaytxtbig(X0, 12, 8, 0x6545 ); xdata = -1; ydata = -1;  }
  184.   
  185.   if( xdata >= 456+12&& xdata< = 637-12&& ydata >= 227+12&& ydata< = 401-12 )
  186.    {w = '9'; x = 1; delay(); Displaytxtbig(X0, 12, 9, 0x6545 ); xdata = -1; ydata = -1;  }
  187.   
  188.   if( xdata >= 683+12&& xdata< = 935-12&& ydata >= 227+12&& ydata< = 401-12 )
  189.    {w = '\0'; x = 0;number[i] = '\0'; delay(); Flag = 1000; X0 = 0; fz = 0; xdata = -1; ydata = -1;
  190.    puts("ATH\r");/*发送挂机命令*/delay();delay();delay();delay();delay();delay(); puts("AT^SMSO\r");/*发送断开连接命令*/i = 0; }
  191.   
  192.   

  193.   if( xdata >= 68+12&& xdata< = 267-12&& ydata >= 401+12&& ydata< = 545-12 )
  194.    {w = '4';x = 1;delay();Displaytxtbig(X0, 12, 4, 0x6545 );xdata = -1; ydata = -1;  }
  195.   
  196.   if( xdata >= 267+12&& xdata< = 456-12&& ydata >= 401+12&& ydata< = 545-12 )
  197.    {w = '5';x = 1;delay();Displaytxtbig(X0, 12, 5, 0x6545 );xdata = -1; ydata = -1;  }
  198.   
  199.   if( xdata >= 456+12&& xdata< = 637-12&& ydata >= 401+12&& ydata< = 545-12 )
  200.    {w = '6';x = 1;delay();Displaytxtbig(X0, 12, 6, 0x6545 );xdata = -1; ydata = -1;  }
  201.   
  202.   if( xdata >= 683+12&& xdata< = 935-12&& ydata >= 401+12&& ydata< = 545-12 )

  203.    { w = '\0';x = 0;number[i] = '\0';Paint_Bank( 0, 6, 480, 54 ); delay(); X0 = 480;puts("ATH\r");i = 0;    
  204.   
  205.    Delhz(); Delhz(); Delhz(); Displayhz( 382, 34, 3, gImage_over); X0 = 0;xdata = -1; ydata = -1;  }
  206.   
  207.   
  208.     
  209.   
  210.   if( xdata >= 68+12&& xdata< = 267-12&& ydata >= 158+12&& ydata< = 272-12 )
  211.    {w = '*';x = 1;delay();Displaytxtbig(X0, 12, 11, 0x6545 ); xdata = -1; ydata = -1;  }

  212.   if( xdata >= 267+12&& xdata< = 456-12&& ydata >= 158+12&& ydata< = 272-12 )
  213.    {w = '0';x = 1;delay();Displaytxtbig(X0, 12, 0, 0x6545 );xdata = -1; ydata = -1;  }
  214.   
  215.   if( xdata >= 456+12&& xdata< = 637-12&& ydata >= 158+12&& ydata< = 272-12 )
  216.    {w = '#';x = 1;delay();Displaytxtbig(X0, 12, 12, 0x6545 );xdata = -1; ydata = -1;  }
  217.   
  218.   if( xdata >= 683+12&& xdata< = 935-12&& ydata >= 158+12&& ydata< = 272-12 )
  219.    {w = '\0';x = 1;number[i] = '\0';printf("ATD%s;\r",number );/*发送拨打电话的命令*/delay();Y0 = X0; X0 = 480; Delhz();Delhz();  
  220.    Delhz();Displayhz( 382, 34, 3,gImage_wait);X0 = Y0;xdata = -1; ydata = -1;i = 0;  }
  221.   
  222.   
  223.   
  224.   if ( x == 1 )  //输入信息的处理
  225.    {
  226.   
  227.      extern int i;
  228.   
  229.        number[i] = w;
  230.     
  231.        i++;
  232.     
  233.        if (i >= 15 )
  234.     
  235.          i = 15;
  236.     
  237.        x = 0;
  238.    }

  239.   }  

  240. }
复制代码


手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网