找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 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 单片机教程网

快速回复 返回顶部 返回列表