⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 input_method.lst

📁 实现ucos任务调度时保存LCD上的显示信息
💻 LST
字号:
C51 COMPILER V8.02   INPUT_METHOD                                                          05/22/2008 14:29:21 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE INPUT_METHOD
OBJECT MODULE PLACED IN input_method.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd\input_method.c LARGE BROWSE INCDIR(.\dataflash;.\lcd;.\task;.\uart;.\uc
                    -os;.\key) DEBUG OBJECTEXTEND PRINT(.\input_method.lst) OBJECT(input_method.obj)

line level    source

   1          /*
   2          **************************************************************************************************
   3          *Filename       :input_method.c
   4          *Creator        :cui
   5          *Time           :
   6          *Description:Prepared for short message. Input characters from keyboard and have them display on 
   7                                   the lcd, including Chinese character, punctuation, number and letter.
   8          **************************************************************************************************
   9          */
  10          
  11          /*
  12          **************************************************************************************************
  13          ************************************Header File Include*******************************************
  14          **************************************************************************************************
  15          */
  16          
  17          #include "includes.h"
  18          
  19          /*
  20          **************************************************************************************************
  21          *******************************Global Variable Declaration****************************************
  22          **************************************************************************************************
  23          */
  24          
  25          unsigned char space_flag;
  26          
  27          /*
  28          **************************************************************************************************
  29          #Name           :edit_receiver_id()
  30          #Parameter      :ID
  31          #Return         :SUC_EDIT_ID indicates a successful edit.
  32          #Function       :edit the receiver's ID
  33          #Note           :Only can delete a character(number) from the end of the ID.
  34          **************************************************************************************************
  35          */
  36          static unsigned char edit_receiver_id(char * ID)
  37          {
  38   1              unsigned char length;
  39   1              char receive;
  40   1      
  41   1              length =strlen(ID);
  42   1              if(length ==0)                                                                                  //若是刚刚进入但消息状态,不是从输入短消息状态返回至编辑ID状态
  43   1              {
  44   2                      lcd_clr();
*** WARNING C206 IN LINE 44 OF LCD\INPUT_METHOD.C: 'lcd_clr': missing function-prototype
  45   2                      lcd_puts("To:_");
*** WARNING C206 IN LINE 45 OF LCD\INPUT_METHOD.C: 'lcd_puts': missing function-prototype
*** ERROR C267 IN LINE 45 OF LCD\INPUT_METHOD.C: 'lcd_puts': requires ANSI-style prototype
  46   2              }
  47   1              lcd_set_cur_pos(0, 3+length);
  48   1              lcd_putc('_');
  49   1              while(1)
  50   1              {
  51   2                      receive =uart_get_char();
C51 COMPILER V8.02   INPUT_METHOD                                                          05/22/2008 14:29:21 PAGE 2   

  52   2                      if((receive == OK_ENTER) && (length > 0))
  53   2                      {
  54   3                              if(length < MAX_ID_LENGTH)                                              //说明在ID尾部存在一个光标
  55   3                              {
  56   4                                      lcd_set_cur_pos(0, 3+length);
  57   4                                      lcd_putc(' ');
  58   4                              }
  59   3                              lcd_set_cur_pos(1, 0);
  60   3                              lcd_putc('_');
  61   3                              return SUC_EDIT_ID;
  62   3                      }
  63   2                      if((receive == EXIT_MENU) && (length > 0))
  64   2                      {
  65   3                              ID[length-1] ='\0';
  66   3                              lcd_set_cur_pos(0, 3+length-1);
  67   3                              lcd_puts("_ ");                                                                 //下划线既清楚又光标
  68   3                              length--;
  69   3                      }
  70   2                      if(((receive >= '0') && (receive <= '9')) && (length < MAX_ID_LENGTH))
  71   2                      {
  72   3                              ID[length] =receive;
  73   3                              lcd_set_cur_pos(0, 3+length);
  74   3                              lcd_putc(receive);
  75   3                              length++;
  76   3                              if(length < MAX_ID_LENGTH)
  77   3                                      lcd_putc('_');
  78   3                      }
  79   2              }
  80   1      }
  81          
  82          /*
  83          **************************************************************************************************
  84          #Name           :disp_mov_cur()
  85          #Parameter      :msg is the     short message.
  86                                   page is the current screen sequence number.
  87                                   vircur points to the changed unit in msg.
  88                                   left specifies the moving direction of cursor. Move left if left==1, else move right.
  89          #Return         :
  90          #Function       :Display. invoked after moving cursor.
  91          #Note           :
  92          **************************************************************************************************
  93          */
  94          static void disp_mov_cur(const char * msg, unsigned char page, unsigned char vircur, bit left)
  95          {
  96   1      
  97   1      }
  98          
  99          /*
 100          **************************************************************************************************
 101          #Name           :disp_tail_app()
 102          #Parameter      :msg is the     short message.
 103                                   page is the current screen sequence number.
 104                                   vircur points to the changed unit in msg.
 105                                   Chinese specifies whether the changed unit is a Chinese charater. Yes when Chinese==1
 106          #Return         :
 107          #Function       :Display. invoked after appending a sign.
 108          #Note           :
 109          **************************************************************************************************
 110          */
 111          static void disp_tail_app(const char * msg, unsigned char page, unsigned char vircur, bit Chinese)
 112          {
 113   1              unsigned char realcur;
C51 COMPILER V8.02   INPUT_METHOD                                                          05/22/2008 14:29:21 PAGE 3   

 114   1              unsigned char i;
 115   1      
 116   1              realcur =vircur;                                                                                /*calculate the real cursor position*/
 117   1              for(i=0; i< page; i++)
 118   1              {
 119   2                      if((space_flag & (0x1 << i)) != 0)
 120   2                      {
 121   3                              realcur++;
 122   3                      }
 123   2              }
 124   1      
 125   1              if(Chinese == 0)                                                                                /*append a non-Chinese character*/
 126   1              {
 127   2                      if((realcur % 20) == 0)                                                         /*a new page to display*/
 128   2                      {
 129   3                              lcd_set_cur_pos(1, 0);
 130   3                              lcd_putc(msg[vircur]);
 131   3                      }
 132   2                      else
 133   2                      {
 134   3                              lcd_set_cur_pos(1, realcur % 20);
 135   3                              lcd_putc(msg[vircur]);
 136   3                      }
 137   2              }
 138   1              else
 139   1              {
 140   2              
 141   2              }
 142   1      }
 143          
 144          static void display_type(unsigned char type)
 145          {
 146   1              lcd_set_cur_pos(0, 15);
 147   1              lcd_putc('[');
 148   1              switch(type)
 149   1              {
 150   2                      case 0:
 151   2                              lcd_puts("单");
 152   2                              break;
 153   2                      case 1:
 154   2                              lcd_puts("Ea");
 155   2                              break;
 156   2                      case 2:
 157   2                              lcd_puts("01");
 158   2                              break;
 159   2                      case 3:
 160   2                              lcd_puts(",.");
 161   2                              break;
 162   2                      default:
 163   2                              lcd_puts("单");
 164   2                              break;                          
 165   2              }
 166   1              lcd_putc(']');
 167   1      }
 168          
 169          unsigned char  input_chinese(SHORT_MESSAGE * ms_info)
 170          {
 171   1              
 172   1      }
 173          
 174          unsigned char  input_letter(SHORT_MESSAGE * ms_info)
 175          {
C51 COMPILER V8.02   INPUT_METHOD                                                          05/22/2008 14:29:21 PAGE 4   

 176   1              
 177   1      }
 178          unsigned char  input_number(SHORT_MESSAGE * ms_info)
 179          {
 180   1              
 181   1      }
 182          unsigned char  input_punctuation(SHORT_MESSAGE * msg_info)
 183          {
 184   1              char punc[2][17] ={
 185   1                                                      {",.!\?:;()\"+-*/=\'%"},
 186   1                                                      {"$#_{}[]<>&@|\\^`~"}
 187   1                                                };
 188   1              char receive;
 189   1              unsigned char key_left_right =0;
 190   1              unsigned char realcur_flag =0;                                                  //显示本行是否最后有空格
 191   1              char i;
 192   1              
 193   1              lcd_set_cur_pos(3, 0);
 194   1              lcd_putc('>');
 195   1              lcd_set_cur_pos(3, 2);
 196   1              lcd_putc_rev(punc[0][0]);
 197   1              lcd_puts(*punc + 1);
 198   1              lcd_set_cur_pos(3, 19);
 199   1              lcd_putc('>');
 200   1              while(1)
 201   1              {
 202   2                      receive =uart_get_char();
 203   2                      if(receive == '#')
 204   2                              return SWITCH_INPUT_TYPE;
 205   2                      if(receive == MENU)                                                                     //发送短消息
 206   2                              return EXIT_INPUT;
 207   2                      if((msg_info->length == MAX_MESSAGE_LENGTH) && (receive != EXIT_MENU))
 208   2                              return OUT_OF_RANGE;
 209   2                      if(receive == OK_ENTER)
 210   2                      {
 211   3                              disp_tail_app(msg_info->message, 0 , 0, 0);
 212   3                      }       
 213   2              }       
 214   1      }
 215          
 216          unsigned char input_method_fun(SHORT_MESSAGE * ms_info)
 217          {
 218   1              unsigned char type_select =3;                                                   //用于控制输入什么类型的字符
 219   1              unsigned char ret;
 220   1      
 221   1              space_flag =0;
 222   1      
 223   1              while(1)
 224   1              {
 225   2                      type_select =type_select % 4;
 226   2                      switch(type_select)
 227   2                      {
 228   3                              case 0:
 229   3                                      display_type(0);
 230   3                                      ret =input_chinese(ms_info);
 231   3                                      break;
 232   3                              case 1:
 233   3                                      display_type(1);
 234   3                                      ret =input_letter(ms_info);
 235   3                                      break;
 236   3                              case 2:
 237   3                                      display_type(2);
C51 COMPILER V8.02   INPUT_METHOD                                                          05/22/2008 14:29:21 PAGE 5   

 238   3                                      ret =input_number(ms_info);
 239   3                                      break;
 240   3                              case 3:
 241   3                                      display_type(3);
 242   3                                      ret =input_punctuation(ms_info);
 243   3                                      break;
 244   3                              default:
 245   3                                      display_type(0);
 246   3                                      ret =input_chinese(ms_info);
 247   3                                      break;
 248   3                      }
 249   2                      if(ret == SWITCH_INPUT_TYPE)                                            //切换输入类型
 250   2                              type_select++;
 251   2                      if(ret == OUT_OF_RANGE)                                                         //循环等待退格键或退出输入键
 252   2                              ;                                                                                               
 253   2                      if(ret == EXIT_INPUT)                                                           //退出输入
 254   2                              break;
 255   2              }
 256   1              return WAIT_SEND;
 257   1      }
 258          

C51 COMPILATION COMPLETE.  2 WARNING(S),  1 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -