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

📄 demo.lst

📁 单片机实现直流数控稳压电源,可调电压为0-9.9伏,步进为0.1伏,可以自动扫描键盘以增加或者减少电压
💻 LST
📖 第 1 页 / 共 2 页
字号:
 196   2                              dispbuff[0]=(ResetBuff[0]%16)|0x80;
 197   2                  dispbuff[1]=ResetBuff[1]%16;
 198   2                  display();
 199   2                              delay(10000);
 200   2                              RKC=ReadKeyCode();          
 201   2                       }
 202   1         else if(RKC==0x0d)
 203   1              {
 204   2                       if(ResetBuff[1]==0x09)
 205   2                   if(ResetBuff[0]==0x04)
 206   2                                      ;
 207   2                   else
 208   2                          { ResetBuff[1]=0x00; ResetBuff[0]++;        }
 209   2                   else ResetBuff[1]++;
 210   2                       dispbuff[0]=(ResetBuff[0]%16)|0x80;
 211   2               dispbuff[1]=ResetBuff[1]%16;
 212   2               display();
 213   2                       delay(10000);
 214   2               RKC=ReadKeyCode();
 215   2                              }
 216   1        else return RKC;
 217   1      }
 218          
 219          
 220          /******************************************************************
 221          函数名称:void FlagSign()
 222          函数功能:通过按键输入一个初始电压,取值范围:0~9.9V
 223          入口参数:无
 224          出口参数:无
 225          全局变量:flag 
 226                           KeyCode
 227                           ResetBuff[0],ResetBuff[1]
 228                           dispbuff[0],dispbuff[1]
 229                           MidKeyCode
 230          调用模块:main
 231          ******************************************************************/
 232          
 233          void FlagSign()
 234          {
 235   1             
 236   1                if(flag==0x01)
 237   1               if(KeyCode==0x0f)                                //判断是否为16号置初值键
 238   1                   ;
 239   1                   else flag=0x00;
 240   1                else if(flag==0x02)
C51 COMPILER V7.01  DEMO                                                                   06/24/2005 22:51:56 PAGE 5   

 241   1                       if(KeyCode>=0x00 && KeyCode<=0x04)
 242   1                                  {  MidKeyCode=ResetBuff[0]; ResetBuff[0]=KeyCode; }          
 243   1                               else flag=0x00;
 244   1                else if(flag==0x03)
 245   1                   if(KeyCode>=0x00 && KeyCode<=0x09)
 246   1                       {
 247   2                    ResetBuff[1]=KeyCode;
 248   2                                dispbuff[0]=ResetBuff[0]%16;
 249   2                        dispbuff[1]=ResetBuff[1]%16;
 250   2                                flag=0x00;
 251   2                               }
 252   1                           else { ResetBuff[0]=MidKeyCode;  flag=0x00;  }
 253   1      }
 254          
 255          
 256          /******************************************************************
 257          函数名称:void sent(unsigned char sent_buf)
 258          函数功能:发读键盘命令
 259          入口参数:sent_buf 
 260          出口参数:无
 261          全局变量:CS
 262                           CLK
 263                           DIO
 264          调用模块:display
 265                           ReadKeyCode
 266                           ReadKB
 267          ******************************************************************/
 268          
 269          void sent(unsigned char sent_buf)
 270          {
 271   1      char i;
 272   1      CLK=0;                                        //置SPI时钟线为低
 273   1      CS=0;                                         //置SPI片选线为低
 274   1      delay (50);                                   //延时50us
 275   1      
 276   1      for(i=0;i<8;i++)                              //发送8位数据
 277   1      {
 278   2      sent_buf=sent_buf<<1;                         //从数据最高位开始,将要发发送的数据位移入进位位CY
 279   2      DIO=CY;                                       //数据位送数据线
 280   2      CLK=1;                                        //置SPI时钟线为高
 281   2      delay (10);                                   //延时10us
 282   2      CLK=0;                                        //置SPI时钟线为低,发送完1位数据
 283   2      delay (10);                                   //延时10us
 284   2      }
 285   1      delay (50);
 286   1      DIO=0;
 287   1      }
 288          /******************************************************************
 289          函数名称:void delay(char time)
 290          函数功能:延迟
 291          入口参数:time    延迟时间
 292          出口参数:无
 293          全局变量:无
 294          调用模块:ReadKeyCode
 295                           ReadKB
 296                           sent
 297          ******************************************************************/
 298          
 299          void delay(unsigned int time)
 300          {
 301   1        unsigned int i;
 302   1        for(i=0;i<time;i++);
C51 COMPILER V7.01  DEMO                                                                   06/24/2005 22:51:56 PAGE 6   

 303   1      }
 304          
 305          
 306          /******************************************************************
 307          函数名称:void display()
 308          函数功能:显示输出缓冲池dispbuff[0]~dispbuff[7]的内容
 309          入口参数:无
 310          出口参数:无
 311          全局变量:CS
 312          调用模块:Timer0
 313                           ReadKeyCode
 314          ******************************************************************/     
 315          
 316          void display()
 317          {
 318   1       char i;
 319   1       for(i=0;i<2;i++)
 320   1         {
 321   2           CS=1;
 322   2               sent(0xc8+i);
 323   2               sent(dispbuff[i]);
 324   2               CS=1;
 325   2           sent(0xc8+6+i);
 326   2               sent(dispbuff[6+i]);
 327   2               CS=1;
 328   2         }
 329   1      }
 330          
 331          
 332          /******************************************************************
 333          函数名称:main()
 334          函数功能:主函数
 335          入口参数:无
 336          出口参数:无
 337          全局变量:CS
 338                           TICK
 339                           dispbuff       输出缓冲池 
 340                           ResetBuff
 341                           ADresult       AD转换结果
 342          调用模块:无
 343          ******************************************************************/
 344          
 345          main()
 346          {
 347   1         int mid1;
 348   1         char i;
 349   1         EX1=1;
 350   1         EA=1;
 351   1         CS=1;
 352   1         IT1=1;
 353   1         TMOD=0x01;                                             //定时器初始化
 354   1         TH0=0x3c;
 355   1         TL0=0xb0;
 356   1         ET0=1;
 357   1         TR0=1;
 358   1         TICK=0;
 359   1         dispbuff[0]=(ResetBuff[0]%16)|0x80;
 360   1         dispbuff[1]=ResetBuff[1]%16;
 361   1         for (i=2;i<6;i++)
 362   1         { 
 363   2         dispbuff[i]=1+i;
 364   2         }
C51 COMPILER V7.01  DEMO                                                                   06/24/2005 22:51:56 PAGE 7   

 365   1         ADresult=0x00;
 366   1         dispbuff[6]=(ADresult/16)|0x80;
 367   1         dispbuff[7]=(ADresult%16)&0x0f;
 368   1         while(1)
 369   1         {
 370   2            FlagSign();
 371   2            
 372   2                *DAResult=DASource();                                //数据送DA转换器
 373   2                ADresult=adconvert(2);                               //读取AD转换结果
 374   2            
 375   2            dispbuff[0]=(ResetBuff[0]%16)|0x80;
 376   2            dispbuff[1]=ResetBuff[1]%16;
 377   2                
 378   2                mid1=ADresult*0.196;
 379   2                dispbuff[6]=mid1/10+128;
 380   2            dispbuff[7]=mid1%10;
 381   2         }
 382   1      
 383   1       }
 384          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    974    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     17      18
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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