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

📄 text1.lst

📁 个人单片机入门程序集合 。很适合刚学单片机的人。用的是keil proteus
💻 LST
📖 第 1 页 / 共 2 页
字号:
 200          
 201          ***************/
 202          
 203          void lcd1602_wrcmd(unsigned char lcdcmd)
 204          {
 205   1              while(lcd1602_busy());     //等待空闲
 206   1              lcd1602_bus=lcdcmd;
 207   1              rs_1602=0;
 208   1              rw_1602=0;
 209   1              _nop_();
 210   1              e_1602=1;
 211   1              _nop_();
 212   1              _nop_();
 213   1              e_1602=0;      //产生一个下沿     
 214   1      }
 215          
 216          
 217          
 218          /***************向液晶写数据******************/
 219          
 220          void lcd1602_wrdata(unsigned char lcddata)
 221          {
 222   1       while(lcd1602_busy());       //等待空闲
 223   1       lcd1602_bus=lcddata;             //在下沿的时候写数据
 224   1       rs_1602=1;
 225   1       rw_1602=0;
 226   1       _nop_();
 227   1       e_1602=1;
 228   1       _nop_();
 229   1       _nop_();
 230   1       e_1602=0;
 231   1       //lcd_bus=0xff;
 232   1      }
 233          
 234          
 235          /************液晶的清屏************/
 236          
 237          void lcd1602_clear(void)
 238          {
 239   1        lcd1602_wrcmd(0x01);     //液晶清屏控制字     并延时>40us
 240   1        delay_1602(100);
 241   1      }
C51 COMPILER V7.20   TEXT1                                                                 07/19/2007 09:52:58 PAGE 5   

 242          
 243          
 244          /***********1602液晶的初始化***************/
 245          
 246          void lcd1602_init(void)
 247          {
 248   1        lcd1602_wrcmd(0x38);          //功能设置-----8位数据接口,两行显示,5*7点阵字符显示
 249   1        delay_1602(100);
 250   1        lcd1602_wrcmd(0x0c);         //显示开关控制----显示开关开,光标开关关,闪烁开关关
 251   1        delay_1602(100);
 252   1        lcd1602_wrcmd(0x06);         //输入方式设置,AC自增1, S=0;
 253   1        delay_1602(100);                 
 254   1        lcd1602_wrcmd(0x01);         //清屏
 255   1        delay_1602(100);
 256   1      }
 257          
 258          /************键盘扫描*************/
 259          uchar keyscan(void)
 260          {
 261   1              uchar scancode,tmpcode;
 262   1              P3 = 0xf0;
 263   1              if ((P3&0xf0)!=0xf0)
 264   1              {
 265   2                      delay_1602(125);
 266   2                      if ((P3&0xf0)!=0xf0)
 267   2                      {
 268   3                              scancode = 0xfe;
 269   3                              while((scancode&0x10)!=0)
 270   3                              {
 271   4                                      P3 = scancode;
 272   4                                      if ((P3&0xf0)!=0xf0)
 273   4                                      {
 274   5                                              tmpcode = (P3&0xf0)|0x0f;
 275   5                                              return((~scancode)+(~tmpcode));
 276   5                                      }
 277   4                                      else scancode = (scancode<<1)|0x01;     
 278   4                              }
 279   3                      }
 280   2              }
 281   1              return(0);
 282   1      }
 283          
 284          void fen(unsigned int hex,uchar a[4])
 285          {
 286   1         a[0]=table[hex/1000];
 287   1         hex=hex%1000;
 288   1         a[1]=table[hex/100];
 289   1         hex=hex%100;
 290   1         a[2]=table[hex/10];
 291   1         hex=hex%10;
 292   1         a[3]=table[hex]; 
 293   1      }
 294          
 295          void jia(n)
 296          {
 297   1         uchar i;
 298   1         set[j]=table[n];
 299   1         lcd1602_wrcmd(0x8a-j);
 300   1         for(i=0;i<=j;i++)
 301   1           lcd1602_wrdata(set[i]);
 302   1         j++;
 303   1         data5620=data5620*10+n;      
C51 COMPILER V7.20   TEXT1                                                                 07/19/2007 09:52:58 PAGE 6   

 304   1      }
 305          
 306             
 307          
 308          main()
 309          {
 310   1        uchar key,i;
 311   1        unsigned char str0[]="setting:   *10mA ";
 312   1        unsigned char str1[]="measure:    mA ";
 313   1        uchar data549=0;
 314   1        unsigned int  cov549=0;
 315   1        b=0;j=0;
 316   1        data5620=0;
 317   1        delay_1602(2);
 318   1        lcd1602_bus=0xff;
 319   1        lcd1602_init();
 320   1        lcd1602_wrcmd(0x80);
 321   1        for(i=0;i<16;i++)   
 322   1          lcd1602_wrdata(str0[i]);
 323   1        while(1)
 324   1        {
 325   2          lcd1602_wrcmd(0x8a);
 326   2          key=0;
 327   2          while(key==0)
 328   2                key=keyscan();
 329   2              while(P3!=0xf0)
 330   2                P3=0xf0;
 331   2          if(key==0x18)
 332   2              {
 333   3                dac_5620(data5620,data5620,data5620,data5620);
 334   3                b=1;j=0;
 335   3                data549=adc_0838convert();
 336   3                cov549=data549*19.6;
 337   3                fen(cov549,mea);
 338   3                lcd1602_wrcmd(0xc0);
 339   3                for(i=0;i<14;i++)   
 340   3              lcd1602_wrdata(str1[i]);
 341   3                lcd1602_wrcmd(0xc8);
 342   3                for(i=0;i<4;i++)   
 343   3              lcd1602_wrdata(mea[i]);
 344   3              }
 345   2              else if(key==0x12)
 346   2              {
 347   3                 if(j>0)
 348   3                 {
 349   4                   j--;
 350   4               data5620=(data5620-(set[j]-0x30))/10;
 351   4                   lcd1602_wrcmd(0x8a-j);
 352   4               lcd1602_wrdata(0); 
 353   4               for(i=0;i<j;i++)
 354   4                 lcd1602_wrdata(set[i]);   
 355   4                 }    
 356   3          }
 357   2              else
 358   2              {
 359   3                if(j<3)
 360   3                {
 361   4                if(b==1)
 362   4                {
 363   5                  set[0]=0;set[1]=0;set[2]=0;
 364   5                      data5620=0;
 365   5                      j=0;
C51 COMPILER V7.20   TEXT1                                                                 07/19/2007 09:52:58 PAGE 7   

 366   5                  lcd1602_wrcmd(0xc0);
 367   5                      for(i=0;i<14;i++)   
 368   5                lcd1602_wrdata(0);
 369   5              lcd1602_wrcmd(0x87);
 370   5                      for(i=0;i<3;i++)   
 371   5                lcd1602_wrdata(0);
 372   5                      b=0;
 373   5                }
 374   4            switch(key)
 375   4                {
 376   5                   case 0x14:jia(0);break;
 377   5                       case 0x28:jia(1);break;
 378   5                       case 0x24:jia(2);break;
 379   5                       case 0x22:jia(3);break;
 380   5                       case 0x48:jia(4);break;
 381   5                       case 0x44:jia(5);break;
 382   5                       case 0x42:jia(6);break;
 383   5                       case 0x88:jia(7);break;
 384   5                       case 0x84:jia(8);break;
 385   5                       case 0x82:jia(9);break;
 386   5                       default : break;
 387   5                }
 388   4               }
 389   3              }
 390   2        }
 391   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1102    ----
   CONSTANT SIZE    =     44    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11      47
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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