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

📄 lesson10.lst

📁 基于8051的生产线记件系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
 171   4                                      ACC = P1;
 172   4                                      ACC &= 0X87;//P1.7 for beep!
 173   4                                      if(!(ACC == 0X87))//P1.7 for beep!
 174   4                                      {
 175   5                                              g_uc_key_number |= ACC;/*combine to the key number*/
 176   5                                              if(uc_keypad_response_flag == 0)
 177   5                                              {
 178   6                                                      keypad_response_dual(g_uc_key_number);
 179   6                                              }
 180   5                                              else
 181   5                                              {
 182   6                                                      keypad_response_single(g_uc_key_number);
 183   6                                              }
 184   5                                      }
 185   4                              }
 186   3                      }
 187   2              }
 188   1      }
 189          /*************************************************/
 190          /*name:keypad_response_dual()
 191          function:response to the dual key number 
 192          input:uc_key_number*/
 193          /*************************************************/
 194          data uchar uc_temp_receive[7][3];
 195          void keypad_response_dual(uchar key_number)
 196          {
 197   1              data uchar k,j;//k for key number;j for rotate
 198   1              data uchar uc_device_addr,uc_device_sub_addr;//
 199   1              data uchar uc_tmp_password[3];
 200   1              data uint temp;//暂存产量总和   
 201   1      
 202   1              while(!(ACC == 0x87))//wait for the release of the key//P1.7 for beep!
 203   1              {
 204   2                      delay(2,255);
 205   2                      P1 = 0x87;
 206   2                      ACC = P1;
 207   2                      ACC &= 0X87;
 208   2              }
 209   1              {               
 210   2                      uc_keypad_response_flag = 1;//for single key press
 211   2                      g_uc_key_any_cnt ++;
 212   2                      for(k=0;k<=11;k++)
 213   2                      {
 214   3                              if(key_number == g_uc_key_number_all[k])
 215   3                                break;
 216   3                      }
 217   2                      if(g_uc_key_any_cnt == 1)
 218   2                      {
 219   3                              g_uc_key_no_combined = k << 4;
 220   3                      }
 221   2                      else
 222   2                      {
 223   3                              g_uc_key_any_cnt = 0;
 224   3                              g_uc_key_no_combined += k;
 225   3                              switch(g_uc_key_no_combined)
 226   3                              {
 227   4                                      case 0xA0:/*A+0*/
 228   4                                                      g_uc_disp_cnt = 2;//password 4位
 229   4                                                      beep = 0;//提示用户输入密码
 230   4                                                      delay(200,200);
 231   4                                                      beep = 1;
 232   4      
C51 COMPILER V7.50   LESSON10                                                              06/19/2006 21:28:10 PAGE 5   

 233   4                                                      while(g_uc_disp_cnt < 6)
 234   4                                                      {
 235   5                                                              keypad_scan();
 236   5                                                              switch(g_uc_disp_cnt)
 237   5                                                              {
 238   6                                                                      case 3://键盘扫描后,g_uc_disp_cnt已经++了
 239   6                                                                              g_min_disp = 0x8F;
 240   6                                                                              g_sec_disp = 0xFF;
 241   6                                                                              break;
 242   6                                                                      case 4://密码用8888显示为不可见//需要按B确认!?
 243   6                                                                              g_min_disp = 0x88;
 244   6                                                                              g_sec_disp = 0xFF;
 245   6                                                                              break;
 246   6                                                                      case 5:
 247   6                                                                              g_sec_disp = 0x8F;
 248   6                                                                              break;
 249   6                                                                      case 6:
 250   6                                                                              g_sec_disp = 0x88;
 251   6                                                                              break;
 252   6                                                                      default:
 253   6                                                                              break;
 254   6                                                              }
 255   5                                                      }                                               
 256   4                                                      g_uc_disp_cnt = 0;
 257   4                                                      uc_device_addr = 0xA0;//0xA0=1010 0000B, 1010is the device number,000 is the A2A1A0 hard wired, 0 wr
             -ite.
 258   4                                                      uc_device_sub_addr = 0x00;//EEPROM 首地址
 259   4                                                      g_uc_data_send[0] = 0x00;//密码只有4位,g_uc_data_send[0]写00
 260   4                                                      g_uc_data_send[1] = g_uc_min_cnt;//存储的数据保存在数组g_uc_data_send中
 261   4                                                      g_uc_data_send[2] = g_uc_sec_cnt;                                               
 262   4                                                      ISendStr(uc_device_addr,uc_device_sub_addr,g_uc_data_send,3);//以页方式存储                                             
 263   4                                              break;
 264   4                                      case 0xAB:/*A+B*/
 265   4                                                      g_uc_disp_cnt = 2;//password 4位
 266   4                                                      beep = 0;//提示键盘按下
 267   4                                                      delay(50,100);
 268   4                                                      beep = 1;
 269   4                                                      while(g_uc_disp_cnt < 6)
 270   4                                                      {
 271   5                                                              keypad_scan();
 272   5                                                              switch(g_uc_disp_cnt)
 273   5                                                              {
 274   6                                                                      case 3://键盘扫描后,g_uc_disp_cnt已经++了
 275   6                                                                              g_min_disp = 0x8F;
 276   6                                                                              g_sec_disp = 0xFF;
 277   6                                                                              break;
 278   6                                                                      case 4://密码用8888显示为不可见//需要按B确认!?
 279   6                                                                              g_min_disp = 0x88;
 280   6                                                                              g_sec_disp = 0xFF;
 281   6                                                                              break;
 282   6                                                                      case 5:
 283   6                                                                              g_sec_disp = 0x8F;
 284   6                                                                              break;
 285   6                                                                      case 6:
 286   6                                                                              g_sec_disp = 0x88;
 287   6                                                                              break;
 288   6                                                                      default:
 289   6                                                                              break;
 290   6                                                              }
 291   5                                                      }
 292   4                                                      g_uc_disp_cnt = 0;
 293   4                                                      uc_tmp_password[0] = 0x00;
C51 COMPILER V7.50   LESSON10                                                              06/19/2006 21:28:10 PAGE 6   

 294   4                                                      uc_tmp_password[1] = g_uc_min_cnt;
 295   4                                                      uc_tmp_password[2] = g_uc_sec_cnt;
 296   4                                                      uc_device_addr = 0xA0;//0xA0=1010 0000B, 1010is the device number,000 is the A2A1A0 hard wired, 0 wr
             -ite.
 297   4                                                      uc_device_sub_addr = 0x00;//EEPROM 首地址
 298   4                                                      IRcvStr(uc_device_addr,uc_device_sub_addr,g_uc_data_receive,3);//以页方式读取//读出的数据保存在数组g
             -_uc_data_receive中
 299   4                                                      j = memcmp(uc_tmp_password,g_uc_data_receive,3);//读出的数据保存在数组g_uc_data_send中
 300   4                                                      if(j == 0)
 301   4                                                      {
 302   5                                                              for(j = 1;j < 7;j++)//clear the data
 303   5                                                              {
 304   6                                                                      uc_device_sub_addr = 0x00 + ((j) << 3);//EEPROM 首地址
 305   6                                                                      g_uc_data_send[0] = 0x00;
 306   6                                                                      g_uc_data_send[1] = 0x00;
 307   6                                                                      g_uc_data_send[2] = 0x00;
 308   6                                                                      ISendStr(uc_device_addr,uc_device_sub_addr,g_uc_data_send,3);//以页方式存储                                                             
 309   6                                                              }
 310   5                                                              beep = 0;//提示用户密码正确,数据已经清除
 311   5                                                              delay(200,200);
 312   5                                                              beep = 1;
 313   5                                                      }
 314   4                                                      else
 315   4                                                      {
 316   5                                                              beep = 0;
 317   5                                                              for(j = 0;j < 8;j++)//断续提示声,提示用户password错误
 318   5                                                              {
 319   6                                                                      delay(50,200);
 320   6                                                                      if(beep == 0)beep = 1;
 321   6                                                                      else beep = 0;
 322   6                                                              }
 323   5                                                      }
 324   4                                              break;
 325   4                                      case 0xA1:
 326   4                                              beep = 0;//提示键盘按下
 327   4                                              delay(50,100);
 328   4                                              beep = 1;
 329   4                                              TR0 = 0;//并不启动
 330   4                                              g_uc_hr_cnt = 0xFF;//清屏
 331   4                                              g_uc_min_cnt = 0xFF;
 332   4                                              g_uc_sec_cnt = 0xFF;
 333   4                                              display_led(g_uc_hr_cnt ,g_uc_min_cnt ,g_uc_sec_cnt);
 334   4                                              g_uc_disp_cnt = 0;//设置时钟,6位
 335   4                                              while(g_uc_disp_cnt < 6)
 336   4                                              {
 337   5                                                      keypad_scan();
 338   5                                              }
 339   4                                              g_uc_disp_cnt = 0;
 340   4                                              g_uc_hr_cnt %= 0x24;//adjust the hr
 341   4                                              g_uc_min_cnt %= 0x60;//adjust the min
 342   4                                              g_uc_sec_cnt %= 0x60;//adjust the sec
 343   4                                              display_led(g_uc_hr_cnt ,g_uc_min_cnt ,g_uc_sec_cnt);
 344   4                                              g_st_current_time.hr = g_uc_hr_cnt;
 345   4                                              g_st_current_time.min = g_uc_min_cnt;
 346   4                                              g_st_current_time.sec = g_uc_sec_cnt;
 347   4                                              break;
 348   4                                      case 0xA2:
 349   4                                              ET0 = 1;
 350   4                                              TR0 = 1;//启动T0
 351   4                                              ET1 = 1;//使能T1
 352   4                                              TR1 = 1;//启动T1
 353   4                                              EX0 = 1;//使能外部中断0
C51 COMPILER V7.50   LESSON10                                                              06/19/2006 21:28:10 PAGE 7   

 354   4                                              break;
 355   4                                      case 0xA3://显示所有产量(记录值)总和

⌨️ 快捷键说明

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