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

📄 bussys.lst

📁 语音报站系统,功能说明:键盘显示
💻 LST
📖 第 1 页 / 共 4 页
字号:
 215   1              Delay(100);
 216   1              return(d);
 217   1      }
 218          
 219          /***************************************
 220          * 名称: Disp_word0(unsigned char posx,unsigned char *p,unsigned char n)
 221          * 说明: 
 222          * 功能: 显示一串汉字
 223          * 参数: pos:显示位置(第一行:0-6,第二行:7-13),
 224                          p:汉字码的地址指针,
 225                          n:显示字的个数,
 226          * 返回值: 无
 227          ****************************************/
 228          void Disp_word0(unsigned char posx,unsigned char *p,unsigned char n)
 229          {
 230   1              unsigned char i=0;
 231   1              unsigned char pos;
 232   1              for(i=0;i<n;i++)
 233   1              {
 234   2                      pos=posx;
 235   2                      if((pos<8)||((pos>15)&&(pos<24)))
 236   2                      {
 237   3                              if(pos>15)pos=pos-8;
 238   3                              Write_com(0x80|pos);
 239   3                              Write_data(p[0]);
 240   3                              Write_data(p[1]);
 241   3                      }
C51 COMPILER V8.08   BUSSYS                                                                03/01/2008 06:10:47 PAGE 5   

 242   2                      else
 243   2                      {
 244   3                              if(pos<16)
 245   3                              {
 246   4                                      pos =pos-8;
 247   4                              }
 248   3                              else
 249   3                              {
 250   4                                      pos =pos-16;
 251   4                              }               
 252   3                              Write_com(0x90|pos);
 253   3                              Write_data(p[0]);
 254   3                              Write_data(p[1]);
 255   3                      }
 256   2                      posx++;
 257   2                      p=p+2;
 258   2              }
 259   1      }
 260          
 261          /***************************************
 262          * 名称: Disp_row(unsigned char row,unsigned char pos,unsigned char dat)
 263          * 说明: 
 264          * 功能: 显示一个字母或数字
 265          * 参数: row:行选择,pos:显示位置(0-15),dat:数字码
 266          * 返回值: 无
 267          ****************************************/
 268          void Disp_row(unsigned char row,unsigned char pos,unsigned char dat)
 269          {
 270   1              unsigned char dat0;
 271   1              unsigned char pos0;
 272   1              row = row%2;
 273   1              row = row<<4;
 274   1              pos0 = pos/2;
 275   1              if((pos+1)/2==pos0)
 276   1              {
 277   2                      Write_com((0x80+row)|pos0);
 278   2                      Write_data(dat);
 279   2              }
 280   1              else
 281   1              {
 282   2                      Write_com((0x80+row)|pos0);
 283   2                      dat0 = Read_data();
 284   2                      Write_data(dat);                        
 285   2              }
 286   1      }
 287          
 288          /***************************************
 289          * 名称: Disp_char(unsigned char pos,unsigned char dat)
 290          * 说明: 
 291          * 功能: 显示一个字母或数字
 292          * 参数: pos:显示位置(第一行:0-15,第二行:16-31,第一行:32-47,第二行:48-63),dat:数字码
 293          * 返回值: 无
 294          ****************************************/
 295          void Disp_char(unsigned char pos,unsigned char dat)
 296          {
 297   1              if(pos<16)
 298   1              {
 299   2                      Disp_row(0,pos,dat);
 300   2              }
 301   1              if((pos<32)&&(pos>15))
 302   1              {
 303   2                      Disp_row(1,pos-16,dat);
C51 COMPILER V8.08   BUSSYS                                                                03/01/2008 06:10:47 PAGE 6   

 304   2              }
 305   1              if((pos<48)&&(pos>31))
 306   1              {
 307   2                      Disp_row(2,pos-16,dat);
 308   2              }
 309   1              if((pos<64)&&(pos>47))
 310   1              {
 311   2                      Disp_row(3,pos-32,dat);
 312   2              }
 313   1      }
 314          
 315          /***************************************
 316          * 名称: void Disp_number(unsigned char pos,unsigned long dat)
 317          * 说明: 
 318          * 功能: 显示一个数(0-65536)
 319          * 参数: pos:显示位置,dat:显示数据
 320          * 返回值: 无
 321          ****************************************/
 322          void Disp_number(unsigned char pos,unsigned int dat)
 323          {
 324   1              unsigned int d;
 325   1              unsigned char i=0;
 326   1      
 327   1              unsigned char addr;                             
 328   1              unsigned char tab[5]={0};               //
 329   1              d =dat;
 330   1      
 331   1              while(d)
 332   1              {
 333   2                      tab[i] = d%10;          
 334   2                      d=d/10;
 335   2                      i++;
 336   2              }
 337   1              if(i<p_last)
 338   1              {
 339   2                      for(addr=0;addr<p_last-i;addr++)
 340   2                      Disp_char(addr+pos+i,0x20);
 341   2                      for(addr=0;addr<i;addr++)
 342   2                      Disp_char(addr+pos,tab[i-addr-1]+48);
 343   2              }
 344   1              else
 345   1              {
 346   2                      for(addr=0;addr<i;addr++)
 347   2                      {
 348   3                              Disp_char(addr+pos,tab[i-addr-1]+48);           
 349   3                      }
 350   2      
 351   2              }
 352   1              if(0==i)Disp_char(pos,48);
 353   1              p_last=i;
 354   1      }
 355          
 356          /**********************
 357          *
 358          * 名称:  delay0()
 359          * 说明: 晶振采用24.0MHz
 360          * 功能: 延时
 361          *       延时(t*0.1)ms
 362          * 输入: t(时间参数)
 363          * 返回值: 无
 364          ***********************/
 365          void delay0(unsigned int t)
C51 COMPILER V8.08   BUSSYS                                                                03/01/2008 06:10:47 PAGE 7   

 366          {
 367   1              tm=t;
 368   1        do
 369   1          {
 370   2           TH0 = 0xFF;
 371   2           TL0 = 0x38;
 372   2           TR0 = 1;
 373   2           while ( !TF0 );
 374   2           TF0 = 0;
 375   2           TR0 = 0;
 376   2          } while (--tm);
 377   1      }
 378          
 379          /**********************
 380          *
 381          * 名称:  time1()
 382          * 说明: 晶振采用24.0MHz
 383          * 功能: 监视红外线信号是否结束
 384          *       如果2ms内输入信号没有沿跳变,就结束译码
 385          * 输入: 无
 386          * 返回值: flag0
 387          ***********************/
 388          void time1()interrupt 3  using 2
 389          {
 390   1           flag0 = 0;
 391   1      }
 392          
 393          /**********************
 394          *
 395          * 名称:  bit hw_yima()
 396          * 说明: 
 397          * 功能: 红外线译码
 398          * 输入: 无
 399          * 返回值: ym:解码成功(1),失败(0)。
 400          ***********************/
 401          bit hw_yima()
 402          {
 403   1          unsigned int   ymdata = 0;
 404   1              unsigned char       n = 0;
 405   1              bit ym=0;
 406   1              ymcode=0xffff;
 407   1              s = P1_0;
 408   1          if(0==P1_0)
 409   1          {
 410   2                      
 411   2                  while(flag0)
 412   2                      {
 413   3                          while(P1_0==s);
 414   3                              if(1==flag0)
 415   3                              {
 416   4                              TR1 = 0;
 417   4                      TH1 = 0xF0;
 418   4                      TL1 = 0x60;
 419   4                              TR1 = 1;
 420   4                              delay0(12);
 421   4                              ymdata = ymdata<<1;
 422   4                              if(0==P1_0)
 423   4                              {
 424   5                                  ymdata |= 0x01;
 425   5                              }
 426   4                              n++;
 427   4                              s = P1_0;
C51 COMPILER V8.08   BUSSYS                                                                03/01/2008 06:10:47 PAGE 8   

 428   4                              }
 429   3                      }
 430   2                      if(n>9)                 //此参数直接影响接受的灵敏度
 431   2                      {
 432   3                           ymcode = ymdata>>1;
 433   3                               ymcode = ~ymcode;
 434   3                               ym=1;          //解码成功
 435   3                               delay0(400);           //减少连码

⌨️ 快捷键说明

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