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

📄 formula.lst

📁 乘法口诀模拟答题器C51编写的控制源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 217   1          temp=~((temp>>4)|0xF0);
 218   1          if(temp==1)
 219   1              key=key+0;
 220   1          else if(temp==2)
 221   1              key=key+4;
 222   1          else if(temp==4)
 223   1              key=key+8;
 224   1          else if(temp==8)
 225   1              key=key+12;
 226   1          else
 227   1              key=16;
 228   1              
 229   1           key_buf = key;                  //键值入显示缓存
 230   1           key_buf = key_buf & 0x0f;
 231   1      }
 232          
 233          /*************************************************************
 234                                                                    
 235           判断键是否按下                                             
 236                                                                   
 237          *************************************************************/
 238           void  keydown(void)
 239           {  
 240   1              P1=0xF0;
 241   1              while(P1==0xf0);
C51 COMPILER V8.02   FORMULA                                                               01/04/2007 09:53:28 PAGE 5   

 242   1              {
 243   2                keyscan();
 244   2                beep();
 245   2          }
 246   1       }
 247          
 248          /**********************************************************
 249          
 250            随机出题函数
 251          
 252          **********************************************************/
 253          void  rubric()
 254          {
 255   1         uchar  num1,num2,temp1;
 256   1      
 257   1         TR1=0;
 258   1         temp1=TL1;                   //取T1当前的计数值
 259   1         temp1=~temp1;                //取反得到对应的题号
 260   1         num2=temp1/9;                //就题目分成9组
 261   1         num2++;                      //将组号0~8转换为被乘数1~9
 262   1         testdata[3]=num2+0x30;       //保存被乘数
 263   1         num1=temp1%9;              
 264   1         num1++;                      //将组号0~8转换为乘数1~9。
 265   1         testdata[2]=num1+0x30;       //保存乘数
 266   1      
 267   1         temp1=num2*num1;             //计算乘积
 268   1         testdata[1]=temp1/10+0x30;   //乘积的高位
 269   1         testdata[0]=temp1%10+0x30;   //乘积的低位
 270   1         TR1=1;   
 271   1      } 
 272          
 273          /**********************************************************
 274          
 275            键入正确答案函数
 276          
 277          **********************************************************/
 278          void  right()
 279          {
 280   1         if(testdata[1]==0x30)
 281   1         {
 282   2                testdata[1]=0x20;
 283   2         }
 284   1      
 285   1         lcd_pos(0x4b);
 286   1         in_data[1]=testdata[1];
 287   1         in_data[0]=testdata[0];
 288   1         lcd_wdat(in_data[1]);
 289   1         lcd_wdat(in_data[0]);
 290   1      }
 291          
 292          /**********************************************************
 293          
 294            键入答案函数
 295          
 296          **********************************************************/
 297          void  key_input()
 298          { 
 299   1         if(testdata[1]==0x30)        //先判断十位数是否为0
 300   1         {       
 301   2           in_data[1]=0x30;           
 302   2               key_num=1;
 303   2         }
C51 COMPILER V8.02   FORMULA                                                               01/04/2007 09:53:28 PAGE 6   

 304   1         else
 305   1         {
 306   2           keydown();
 307   2               if(key_buf==0x0c)          //C 键显示正确答案
 308   2               {
 309   3                 right();
 310   3             key_num=0;
 311   3           }
 312   2           if(key_buf<10)
 313   2           {          
 314   3             key_buf=key_buf+0x30;    //转换为ASCII码
 315   3             in_data[1]=key_buf;      //输入乘积高位
 316   3             lcd_pos(0x4b);
 317   3             lcd_wdat(in_data[1]);    //显示乘积高位
 318   3             lcd_wdat(0x20);
 319   3                 key_num=1;
 320   3           }
 321   2         }
 322   1      
 323   1         if(key_num==1)
 324   1         {
 325   2           keydown();
 326   2           if(key_buf==0x0c)          //C 键显示正确答案
 327   2               {
 328   3             right();
 329   3                 key_num=0;
 330   3               }
 331   2           if(key_buf<10)
 332   2           {            
 333   3             key_buf=key_buf+0x30;    //转换为ASCII码
 334   3             in_data[0]=key_buf;      //输入乘积低位
 335   3             lcd_pos(0x4c);
 336   3             lcd_wdat(in_data[0]);    //显示乘积低位
 337   3                 key_num=0;
 338   3           }         
 339   2         }
 340   1      }
 341          /**********************************************************
 342          
 343            数据比较函数
 344          
 345          **********************************************************/
 346          void  datacomp()
 347          {
 348   1         if(testdata[1]-in_data[1]==0)    //比较乘积高位
 349   1         {
 350   2            if(testdata[0]-in_data[0]==0) //比较乘积低位
 351   2                {
 352   3                   beep();                //计算正确蜂鸣器响3声
 353   3                       beep();
 354   3                       beep();
 355   3                       truer=1;               //比较正确
 356   3               F_in=0;                //可以重新出题
 357   3                }
 358   2            else  truer=0;            //比较错误
 359   2         }
 360   1         else  truer=0;               //比较错误
 361   1        
 362   1         if(truer==0)          
 363   1         {
 364   2               lcd_pos(0x4B);             //清除错误答案
 365   2           lcd_wdat(0x20);
C51 COMPILER V8.02   FORMULA                                                               01/04/2007 09:53:28 PAGE 7   

 366   2               lcd_wdat(0x3f);
 367   2               F_in=1;                    //禁止重新出题
 368   2         }
 369   1      }
 370          
 371          /**********************************************************
 372          
 373            主函数
 374          
 375          **********************************************************/
 376          main()
 377          {
 378   1         uchar  m;
 379   1         lcd_init();                  //初始化LCD             
 380   1              
 381   1         lcd_pos(0x00);               //设置显示位置为第一行
 382   1         for(m=0;m<16;m++)
 383   1         lcd_wdat(cdis1[m]);
 384   1      
 385   1         lcd_pos(0x40);               //设置显示位置为第二行     
 386   1         for(m=0;m<16;m++)
 387   1         lcd_wdat(cdis2[m]);
 388   1      
 389   1         TMOD=0x21;                   //将T1设置为8位自动重装工作方式。
 390   1         TH1=175;                         //对T1定时常数进行预置。
 391   1         TL1=175;
 392   1         TR1=1;                       //启动T1。
 393   1      
 394   1         while(1)                
 395   1         {
 396   2           keydown();
 397   2           if(key_buf==0x0f)          //F 键为模拟出题开关
 398   2               {
 399   3                 rubric();
 400   3                 lcd_pos(0x47); 
 401   3             lcd_wdat(testdata[3]);   //显示被乘数
 402   3             lcd_pos(0x49); 
 403   3             lcd_wdat(testdata[2]);   //显示乘数
 404   3      
 405   3             lcd_pos(0x4B);
 406   3             lcd_wdat(0x20);
 407   3             lcd_wdat(0x3f);          //显示 ?
 408   3                 key_buf=0x00;
 409   3                 F_in=1;                  //出题目完毕标志
 410   3               }
 411   2           
 412   2           while(F_in==1)
 413   2               {
 414   3                 key_input();
 415   3             datacomp();
 416   3               }
 417   2         } 
 418   1      }
 419          
 420          /*********************************************************/
 421          
 422          
 423          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    726    ----
C51 COMPILER V8.02   FORMULA                                                               01/04/2007 09:53:28 PAGE 8   

   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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