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

📄 yijia.lst

📁 一个大型洗衣设备晾衣架的光电控制系统的C51程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V3.20,  SN-50203013  YIJIA                                                    06/29/07  20:42:04  PAGE 1   


DOS C51 COMPILER V3.20, COMPILATION OF MODULE YIJIA
OBJECT MODULE PLACED IN C:\MC\YIJIA.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE C:\MC\YIJIA.C DB SB OE

stmt level    source

   1          #include <reg51.h>
   2          
   3          #define USE_KEY
   4          #define CH451_RESET     0x0201                           /*复位    */
   5          #define CH451_LEFTMOV   0x0300		            /*设置移动方式-左移 */
   6          #define CH451_LEFTCYC   0x0301		            /*设置移动方式-左循 */
   7          #define CH451_RIGHTMOV  0x0302		            /*设置移动方式-右移        */
   8          #define CH451_RIGHTCYC  0x0303		            /*设置移动方式-右循        */
   9          #define CH451_SYSOFF    0x0400                      /*关显示、键盘、看门狗     */
  10          #define CH451_SYSON1    0x0401                      /*开显示                   */
  11          #define CH451_SYSON2    0x0403                      /*开显示、键盘、关看门狗   */
  12          #define CH451_SYSON3    0x0407                      /*开显示、键盘、看门狗功能 */
  13          #define CH451_DSP       0x0500                      /*设置默认显示方式   */
  14          #define CH451_BCD       0x0580                      /*设置BCD译码方式  */
  15          #define CH451_USER      0x05c0                      /*设置BCD译码方式、4位数码管、最亮*/
  16          #define CH451_TWINKLE   0x0600		            /*设置闪烁控制的命令码,无闪烁    */
  17          #define CH451_TWINKLE1   0x0601		            /*设置闪烁控制--从右向左计数,1闪烁(DIG0驱动)    */
  18          #define CH451_TWINKLE2   0x0602		            /*设置闪烁控制--从右向左计数,2闪烁(DIG1驱动)     */
  19          #define CH451_TWINKLE3   0x0604		            /*设置闪烁控制--从右向左计数,3闪烁(DIG2驱动)     */
  20          #define CH451_TWINKLE4   0x0608		            /*设置闪烁控制--从右向左计数,4闪烁(DIG3驱动)     */
  21          #define CH451_TWINKLE5   0x0610		            /*设置闪烁控制--从右向左计数,5闪烁(DIG4驱动)     */
  22          #define CH451_TWINKLE6   0x0620		            /*设置闪烁控制--从右向左计数,6闪烁(DIG5驱动)     */
  23          #define CH451_TWINKLE7   0x0640		            /*设置闪烁控制--从右向左计数,7闪烁(DIG6驱动)     */
  24          #define CH451_TWINKLE8   0x0680		            /*设置闪烁控制--从右向左计数,8闪烁(DIG7驱动)     */
  25          #define CH451_DIG0       0x0800                     /*送数码管位0显示的数据,本值或上一个要显示的值即可   
             -*/
  26          #define CH451_DIG1       0x0900		            /*送数码管位1显示的数据,本值或上一个要显示的值即可   */
  27          #define CH451_DIG2       0x0a00		            /*送数码管位2显示的数据,本值或上一个要显示的值即可   */
  28          #define CH451_DIG3       0x0b00		            /*送数码管位3显示的数据,本值或上一个要显示的值即可   */
  29          #define CH451_DIG4       0x0c00		            /*送数码管位4显示的数据,本值或上一个要显示的值即可   */
  30          #define CH451_DIG5       0x0d00	                    /*送数码管位5显示的数据,本值或上一个要显示的值即可   
             -*/
  31          #define CH451_DIG6       0x0e00	                    /*送数码管位6显示的数据,本值或上一个要显示的值即可  *
             -/
  32          #define CH451_DIG7       0x0f00		            /*送数码管位7显示的数据,本值或上一个要显示的值即可  */
  33          #define CH451_KEY        0x07		            /*读取键值的命令码  */
  34          
  35          #define maxp            3000
  36          #define minp            30
  37          
  38          typedef  unsigned char   U8 ;
  39          typedef  unsigned int    U16;
  40          
  41           bit pf;                                            /* 有脉冲信号标志*/
  42           bit t10msf;                                        /* 10ms 间隔到标志  */
  43           bit udf;                                           /*需要显示更新标志 */
  44          
  45           bit kf;                                            /*有按键按下标志*/
  46           bit k1f;                                           /*按键k1按下标志--左键--启动、确认*/
  47          // bit k2f;                                           /*按键k2按下标志--中左键--移位*/
  48          // bit k3f;                                           /*按键k3按下标志--中右键--增1*/
  49          // bit k4f;                                           /*按键k3按下标志--右键--减1*/
  50          
  51           sbit HC14=P3^2;                                     /* INT0, 光电信号输入口*/
  52           sbit jout=P2^0;                                    /* 喷码信号输出口*/
C51 COMPILER V3.20,  SN-50203013  YIJIA                                                    06/29/07  20:42:04  PAGE 2   

  53          
  54          
  55           /* CH451接口*/
  56           sbit ch451_dout=P3^3;                             /* INT1,键盘中断和键值数据输入,接CH451的数据输出*/
  57           sbit ch451_load=P1^0;                             /*串行命令加载,上升延激活 */
  58           sbit ch451_din=P1^1;	                           /*串行数据输出,接CH451的数据输入 */
  59           sbit ch451_dclk=P1^7;                             /*串行数据时钟上升延激活 */
  60           U8   ch451_key;		                   /* 存放键盘中断中读取的键值 */
  61          
  62           sbit s=P1^2;         /* 93c46的片选 */
  63           sbit c=P1^3;         /* 93c46的串行时钟 */
  64           sbit d=P1^4;         /* 93c46的数据输入 */
  65           sbit q=P1^6;         /* 93c46的数据输出 */
  66          
  67           U8 skv[4];                                         /*显示缓存,4字节,分别存放要显示的个、十、百、千*/
  68           U16  setv;                                         /*设置的脉冲数值*/
  69           U16  cv;                                        /*当前接受的脉冲数值*/
  70          
  71            void int0() interrupt 0  using 1      /*光电输入中断*/
  72            {
  73   1                                      /*设置光电输入标志   */
  74   1           pf=1;
  75   1      
  76   1        }
  77            /*void int1() interrupt 2  using 1      /* 键盘输入中断*/
  78            /*{
                                              /*设置按键按下标志   */
  80            /*   kf=1;
              
                } */
  83            void time0() interrupt 1 using 1     /* 设置T0为10ms中断*/
  84            {
  85   1            TH0=0xdc;                        /* 重装时间常数*/
  86   1            TL0=0x0;
  87   1            t10msf=1;
  88   1        }
  89          
  90          
  91          void  updatedisp(unsigned char* disp,bit twif,unsigned char twip); /* 更新显示*/
  92          U16 read93(U8 ax);
  93          void write93(U8 ax, U16 dx);
  94          void erwren93(void);
  95          void erwrdisen93(void);
  96          void erase93(U8 ax);
  97          void eraseall93(void);
  98          void writeall93(U16 dx);
  99          U8 ch451_read();
 100          void ch451_init();
 101          void ch451_write(U16 command);
 102          void delay();
 103          
 104          void main()
 105          {
 106   1          U16 temp1,temp2,temp3;
 107   1          U8 ck,shift;
 108   1          /* 初始化*/
 109   1          P1=0x00;                 /* 初始化输出端口*/
 110   1          P2=0x00;
 111   1      
 112   1          SP=0x5f;                /* 初始化堆栈指针*/
 113   1      
 114   1          /* 初始化变量*/
C51 COMPILER V3.20,  SN-50203013  YIJIA                                                    06/29/07  20:42:04  PAGE 3   

 115   1          pf=0;
 116   1          k1f=0;
 117   1          kf=0;
 118   1      
 119   1          temp1=read93(2);
 120   1          temp2=read93(4);
 121   1          temp3=read93(6);
 122   1          if(temp1==temp2)
 123   1              setv=temp1;
 124   1          else if(temp2==temp3)
 125   1              setv=temp2;
 126   1          else
 127   1              setv=temp1;
 128   1          if(setv<minp)
 129   1          {
 130   2               setv=3000;
 131   2               erwren93();
 132   2               write93(2,0xaaaa);
 133   2               write93(4,0xaaaa);
 134   2               write93(6,0xaaaa);
 135   2               erwrdisen93();
 136   2          }
 137   1          cv=0;
 138   1          skv[0]=setv%10;
 139   1          skv[1]=(setv%100)/10;
 140   1          skv[2]=(setv%1000)/100;
 141   1          skv[3]=(setv/1000);
 142   1          udf=1;
 143   1      
 144   1          /* 初始化芯片ch451*/
 145   1          ch451_init();                                  /*调用初始化 */
 146   1      
 147   1          /* 初始化CPU*/
 148   1          IP=0x05;                  /* 两个外中断为高优先级*/
 149   1          TCON=0x05;                /*设置外中断为下降沿触发 */
 150   1          /* 允许两个外中断*/
 151   1          EX0=1;
 152   1          EX1=1;
 153   1      
 154   1         // TMOD=0x21;              /* 设置T0/T1工作方式:T0为方式1, 16位定时器,T1为波特率发生器,8位自装入方式
             -*/
 155   1         // TH0=0x0dc;               /* 设置T0为10ms中断--12Mp:d8f0*///10*1000/(12/12M)=10000(T), (65536-10000)=
             -0xd8f0
 156   1         // TL0=0x0;                 //11.0592Mp:10ms=10*1000us, 10*1000/(12/11.0592M)=9216(T), (65536-9216)=0xd
             -c00
 157   1         // TR0=1;                  /* 启动T0*/
 158   1         // ET0=1;                  /* 允许T0中断*/
 159   1      
 160   1         // ES=1;                   /* 允许串口中断*/
 161   1      
 162   1         EA=1;                      /* 开中断*/
 163   1      
 164   1          /* 开始运行*/
 165   1          while(1)
 166   1          {
 167   2              if(pf)            /* 有光电信号*/
 168   2              {
 169   3                  pf=0;
 170   3                  cv++;         /*当前脉冲数值增1 */
 171   3                  if(cv>=setv)  /*如果当前脉冲数与设置值相等,则重新开始计数,并发出一个脉冲--用于喷码机动作 *
             -/
 172   3                  {
C51 COMPILER V3.20,  SN-50203013  YIJIA                                                    06/29/07  20:42:04  PAGE 4   

 173   4                      cv=0;
 174   4      
 175   4                      jout=1;
 176   4                      jout=0;
 177   4                  }
 178   3                  /*更新显示*/
 179   3                  skv[0]=cv%10;
 180   3                  skv[1]=(cv%100)/10;
 181   3                  skv[2]=(cv%1000)/100;
 182   3                  skv[3]=(cv/1000);
 183   3                  udf=1;       /*脉冲数改变,需要更新显示 */
 184   3      
 185   3              }
 186   2              if(kf)          /*有按键--按键处理 */
 187   2              {
 188   3                 kf=0;
 189   3                 if(k1f)    /*已经按过启动键的按键操作处理  */
 190   3                 {
 191   4                    if(ch451_key==0x40)  /*减1键操作,当前设置位之值发生改变*/
 192   4                    {
 193   5                       if(ck==0)
 194   5                          ck=9;
 195   5                       else
 196   5                          ck--;
 197   5                    }
 198   4                    else if(ch451_key==0x41)  /*增1键操作,当前设置位之值发生改变*/
 199   4                    {
 200   5                       if(ck==9)
 201   5                          ck=0;
 202   5                       else
 203   5                          ck++;
 204   5                    }
 205   4                    else if(ch451_key==0x42)  /*移位键操作*/
 206   4                    {
 207   5                       skv[shift]=ck;       /*获取修改过的当前设置位之值,暂存起来 */
 208   5                       if(shift==3)         /*改变设置位*/
 209   5                          shift=0;
 210   5                       else
 211   5                          shift++;
 212   5                       ck=skv[shift];       /*取得新设置位之值,用于修改 */
 213   5                    }
 214   4                    else if(ch451_key==0x43)   /*确认键--与启动按键操作是同一键,第1次按是启动,第2次按是确认 
             -*/
 215   4                    {
 216   5                       k1f=0;
 217   5      
 218   5                       /*计算新的设置值,并保存新的设置值*/
 219   5                       setv=skv[3]*1000+skv[2]*100+skv[1]*10+skv[0];
 220   5                       erwren93();
 221   5                       write93(2,setv);
 222   5                       write93(4,setv);
 223   5                       write93(6,setv);
 224   5                       erwrdisen93();
 225   5                       /*设置完毕,重新显示为当前脉冲数 */
 226   5                       skv[0]=cv%10;
 227   5                       skv[1]=(cv%100)/10;
 228   5                       skv[2]=(cv%1000)/100;
 229   5                       skv[3]=(cv/1000);
 230   5                    }
 231   4      
 232   4                 }
 233   3                 else if(ch451_key==0x43)    /*启动键--与确认按键操作是同一键,第1次按是启动,第2次按是确认*/
C51 COMPILER V3.20,  SN-50203013  YIJIA                                                    06/29/07  20:42:04  PAGE 5   

 234   3                 {
 235   4                    k1f=1;            /*k1f=1表明当前在操作按键设置,显示设置值,并闪烁*/
 236   4                    skv[0]=setv%10;
 237   4                    skv[1]=(setv%100)/10;
 238   4                    skv[2]=(setv%1000)/100;
 239   4                    skv[3]=(setv/1000);
 240   4      
 241   4                    /*首先设置个位,个位闪烁 */
 242   4                    shift=0;           /*表明当前设置位--也是闪烁位 */
 243   4                    ck=skv[shift];     /*取当前要设置的值 */
 244   4                 }
 245   3                 else
 246   3                 {
 247   4                  /*没有按启动键,先按了其它键,则其它的功能处理*/
 248   4      
 249   4                 }

⌨️ 快捷键说明

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