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

📄 验钞机程序.c

📁 一款新型能识别钞票面值的验钞机程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************预处理程序***************************************/
#include<C:\WAVE6000\COMP51V6\REG51.h>
#define GW 0
#define SW 1
#define BW 2
#define uint unsigned int
#define uchar unsigned char
uint TIME,DFICLD_TIMER,XS_TIME,DFICLD_NUMBER,MOTOL_DELAY_TIME;
uchar RMB,PULSE_NUMBER;
uchar XS_TYPE=1;
bit DFICLD_BZ;
/****************************************************************************************/

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

/*************************************显示程序*******************************************/
void xs(uint data1,uchar 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                        /*定时器中断服务程序每5mS中断一次*****/
        {uint RMB1;
         uint RMB2;
         uint RMB3;
         TIME++;
         XS_TIME++;
         DFICLD_TIMER++;
         MOTOL_DELAY_TIME++;
         RMB1=(RMB%10)%10;
         RMB2=(RMB/10)%10;
         RMB3=RMB/100;
         if(XS_TYPE==1)                             /*显示类型1,正常显示*****************/
           {P0_3=0;P0_4=1;                          /*绿灯亮,红灯灭**********************/
            xs(RMB1,GW);                            /*在个位上显示数字*******************/
            delay(10);xs(0xff,GW);                  /*延时期间始终显示该数字,后消隐数字**/
            xs(RMB2,SW);                            /*在十位上显示数字*******************/
            delay(10);xs(0xff,SW);
            xs(RMB3,BW);                            /*在百位上显示数字*******************/
            delay(10);xs(0xff,BW);
            TH0=0xec;TL0=0x78;TR0=1;                /*重装初值并启动定时器0**************/
           }
         else if(XS_TYPE==2)                        //显示类型2,币总额与红灯闪烁显示*****/
                                                    //起到警示的作用*********************/
                {if(XS_TIME>60)
                    XS_TIME=0;
                 if((XS_TIME>0)&&(XS_TIME<=59))
                   {P0_3=1;P0_4=0;
                    xs(RMB1,GW);
                    delay(10);xs(0xff,GW);
                    xs(RMB2,SW);
                    delay(10);xs(0xff,SW);
                    xs(RMB3,BW);
                    delay(10);xs(0xff,BW);
                    TH0=0xec;TL0=0x78;TR0=1;
                   }
                 else if((XS_TIME>59)&&(XS_TIME<=60))
                        P0_3=1;P0_4=1;
                }
         else if(XS_TYPE==3)                        //显示类型3,币总额与红,绿灯均闪烁显示/
                                                    //在开机时出现这种现象***************/
                {if(XS_TIME>60)
                    XS_TIME=0;
                 if((XS_TIME>0)&&(XS_TIME<=59))
                   {P0_3=0;P0_4=0;
                    xs(RMB1,GW);
                    delay(10);xs(0xff,GW);
                    xs(RMB2,SW);
                    delay(10);xs(0xff,SW);
                    xs(RMB3,BW);
                    delay(10);xs(0xff,BW);
                    TH0=0xec;TL0=0x78;TR0=1;
                   }
                 else if((XS_TIME>59)&&(XS_TIME<=60))
                        {P0_3=1;P0_4=1;}
                }
        }
/****************************************************************************************/

/***********************************码盘脉冲数测量***************************************/
void PULSE(void) interrupt 0
          {PULSE_NUMBER++;}
/****************************************************************************************/

/*********************************外部中断1,用于磁信号脉冲测量***************************/
void DFICLD(void) interrupt 2
           {DFICLD_NUMBER++;}
/****************************************************************************************/

/************************************初使化程序******************************************/
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*****/
             IT1=1;                                   /*设置外部中断1为脉冲触发方式1*****/
             IP=0x05;                                 /*设置外部中断0为高优先级别(01)****/
             IE=0x82;                                 /*开总中断允许位,定时计数器0中断**/
             TR0=1;                                   /*使定时器0启动********************/
            }
/****************************************************************************************/

/**************************************主程序********************************************/
void main(void)
         {uint j,i=0;
          uchar rmb_type;
          uchar ZB,WJ;                                /*定义真币标志位,钱未进标志位*****/
          initial();                                  /*程序初始化***********************/
          RMB=0;                                      /*人民币数清零*********************/
/***********************************开机测试程序*****************************************/
          XS_TYPE=3;                                  /*使显示变为第三种显示方式*********/
          P2_0=1;P2_1=1;P2_2=0;P2_3=0;                /*电机反转*************************/
          TIME=0;
          while(1)
               {if(TIME>=100)
                  break;

⌨️ 快捷键说明

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