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

📄 脉冲数检测.c

📁 一款新型能识别钞票面值的验钞机程序
💻 C
字号:
#include<C:\WAVE6000\COMP51V6\REG51.h>
#define GW 0
#define SW 1
#define BW 2
int TIME;
int TIME1;
int PULSE_NUMBER=0;
int PULSE_NUMBER1=0;

void delay(long int s)                              /*延时函数*/
          {
           long int j;
           for(j=0;j<s;)j++;
          }

void xs(unsigned int data1,unsigned char adr)      /*在相应位显示相应的数字*/
     {
        switch(data1)                              /*数据*/
              {case 0:data1=0x02;break;
               case 1:data1=0x9e;break;
               case 2:data1=0x24;break;
               case 3:data1=0x0c;break;
               case 4:data1=0x98;break;
               case 5:data1=0x48;break;
               case 6:data1=0x40;break;
               case 7:data1=0x1e;break;
               case 8:data1=0x00;break;
               case 9:data1=0x08;break;
               default :break;
              }
        switch(adr)                                /*地址*/
              {case 0:P2_4=0;P2_5=1;P2_6=1;break;
               case 1:P2_4=1;P2_5=0;P2_6=1;break;
               case 2:P2_4=1;P2_5=1;P2_6=0;break;
               default :break;
              }
        P1_6=0;
        SBUF=data1;
        while(!TI){}                                /*当八位数字全都移进去后就锁存*/
        P1_6=1;
        TI=0;
       }

void xscx(void) interrupt 1                         /*定时器中断服务程序每50S中断一次*/
         {unsigned int PULSE_NUMBER1;
          unsigned int PULSE_NUMBER2;
          unsigned int PULSE_NUMBER3;
          TIME++;TIME1++;
          PULSE_NUMBER1=(PULSE_NUMBER%10)%10;
          PULSE_NUMBER2=(PULSE_NUMBER/10)%10;
          PULSE_NUMBER3=PULSE_NUMBER/100;
          xs(PULSE_NUMBER1,GW);                     /*在个位上显示数字*/
          delay(10);xs(0xff,GW);                    /*延时期间始终显示该数字,之后隐数字*/
          xs(PULSE_NUMBER2,SW);                     /*在十位上显示数字*/
          delay(10);xs(0xff,SW);                    /*延时期间始终显示该数字,之后隐数字*/
          xs(PULSE_NUMBER3,BW);                     /*在百位上显示数字*/
          delay(10);xs(0xff,BW);                    /*延时期间始终显示该数字,之后隐数字*/
          TH0=0xec;TL0=0x78;TR0=1;                  /*重装初值并启动定时器0*/
         }

void pulse(void) interrupt 0                        /*脉冲数测量*/
          {//if(P1_3==0)
              PULSE_NUMBER1++;                       /*只有当钱进去后才计数*/
          }

void initial(void)
            {TIME=0;P1_6=0;
             P2_0=1;P2_1=1;P2_2=1;P2_3=1;           /*电机停转*/
             TH0=0xec;                              //使溢出时间为5ms,实验出来的数字,
             TL0=0x78;                              //这样才没有闪烁感,同时速度也合适
             TMOD=0x01;                             /*定时/计数器0工作方式为16位定时器*/
             SCON=0x00;                             /*设置串行口中断为工作方式0(八位同步移位寄存器)*/
             IT0=1;                                 /*设置外部中断0为脉冲触发方式1,(电平触发方式为0)*/
             IT1=1;                                 /*设置外部中断1为脉冲触发方式1,(电平触发方式为0)*/
             IP=0x01;                               /*设置外部中断0为高优先级别(01)*/
             IE=0x82;                               //开总中断允许位,定时计数器1中断允许位
             //IE=0X87;                              //,外部中断0中断允许位
             TR0=1;                                 /*使定时器0启动*/
            }

void main(void)
         {PULSE_NUMBER=888;                         /*显示测试数字*/
          initial();
          while(1)
               {if(P1_4==0)
                  {PULSE_NUMBER=0;
                   PULSE_NUMBER1=0;                 /*脉冲数清0*/
                   TIME=0;                          /*时间清零*/
                   P2_0=0;P2_1=0;P2_2=1;P2_3=1;     /*电机正转*/
                   while(1)
                        {if((P1_2==0)&&(P1_3==0))
                           {delay(1);
                            if((P1_2==0)&&(P1_3==0))
                              {IE=0X83;
                               break;
                              }
                            if(TIME>=8000)
                              break;
                           }
                         }
                   while(1)
                        {if((P1_2==1)&&(P1_3==1))
                           {delay(1);
                            if((P1_2==1)&&(P1_3==1))
                              {IE=0X82;
                               TIME1=0;
                               while(1)
                                    {if(TIME1==10)
                                       break;
                                    }
                               break;
                              }
                           }
                        }
                   PULSE_NUMBER=PULSE_NUMBER1;
                   initial();
                  }
               }
        }

⌨️ 快捷键说明

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