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

📄 ch451_b.lst

📁 IC卡购电软件实现
💻 LST
字号:
C51 COMPILER V7.08   CH451_B                                                               09/27/2006 09:13:59 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE CH451_B
OBJECT MODULE PLACED IN CH451_B.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CH451_B.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************************
   2          *  标题:  北京蓝海微芯LJD-SY-5200单片机开发系统演示程序                        *
   3          *  文件:  CH451.C                                                              *
   4          *  日期:  2006-8-9                                                             *
   5          *  版本:  1.0                                                                  *
   6          *  作者:  蓝海微芯                                                             *
   7          *  网站: http://www.ljd-2008.com                                              *
   8          ********************************************************************************
   9          *  描述:                                                                       *
  10          *           CH451程序模块                                                      *                          
             -                 
  11          *                                                                              *
  12          *                                                                              *
  13          ********************************************************************************
  14          * 【版权】 Copyright(C)微芯科技 http://www.bluemcu.com    All Rights Reserved  *          
  15          * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
  16          *******************************************************************************/
  17          #include<reg51.h>                  /*=== 头文件包含 ===*/
  18          #include<intrins.h>
  19          #include<absacc.h>
  20          #include  <IC_CARD_B.h>
  21          
  22          uchar ch451_key;
  23          uchar key_flag;
  24          uint  M;
  25          uchar m0;
  26          uchar m1;
  27          uchar m2;
  28          uchar m3;
  29          bit   flag_enter;
  30          bit   flag_show;
  31          uchar flag_num;
  32          uchar flag_cnt=0;
  33          uchar input_code[4];
  34          uchar pdata ds_num[10]="0123456789";
  35          void  decide_num(void);
  36          void  input_num(void);
  37          /********************************************************************
  38          函 数 名:ch451中断服务程序
  39          功    能:获取键值
  40          说    明:
  41          调    用:
  42          入口参数:
  43          返 回 值:ch451_key
  44          设    计:蓝海微芯           
  45          ***********************************************************************/
  46          
  47          void ch451_inter() interrupt 2 using 1
  48          {
  49   1        unsigned char i;                  /*定义循环变量*/
  50   1        unsigned char command,keycode;    /*定义控制字寄存器,和中间变量定时器*/
  51   1        command=0x07;                     /*读取键值命令的高4位0111B*/
  52   1        EX1 = 0;
  53   1        ch451_load=0;                     /*命令开始*/
  54   1        for(i=0;i<4;i++)
C51 COMPILER V7.08   CH451_B                                                               09/27/2006 09:13:59 PAGE 2   

  55   1        {
  56   2          ch451_din=command&1;            /*低位在前,高位在后*/
  57   2          ch451_clk=0;
  58   2          command>>=1;                    /*右移一位*/
  59   2          ch451_clk=1;                    /*产生时钟上升沿锁通知CH451输入位数据*/
  60   2        }
  61   1        ch451_load=1;                     /*产生加载上升沿通知CH451处理命令数据*/
  62   1        keycode=0;                        /*清除keycode*/
  63   1        for(i=0;i<7;i++)
  64   1        {
  65   2          keycode<<=1;                    /*数据作移一位,高位在前,低位在后*/
  66   2          keycode|=ch451_dout;            /*从高到低读入451的数据*/
  67   2          ch451_clk=0;                    /*产生时钟下升沿通知CH451输出下一位*/
  68   2          ch451_clk=1;        
  69   2        }
  70   1        ch451_key=keycode;                /*保存上次的键值*/
  71   1        decide_num();
  72   1        input_num();
  73   1        EX1 = 1;
  74   1        IE1=0;                            /*清中断标志*/
  75   1      }
  76          /********************************************************************
  77          
  78          函 数 名:ch451_init()
  79          功    能:对ch451芯片进行初始化
  80          说    明:
  81          调    用:
  82          入口参数:
  83          返 回 值:
  84          设    计:蓝海微芯           
  85          ***********************************************************************/
  86          void ch451_init(void)
  87          {
  88   1        ch451_din  = 0;           /*先低后高,选择4线输入*/
  89   1        ch451_din  = 1;       
  90   1        ch451_load = 1;
  91   1        ch451_clk  = 1;
  92   1        _nop_();      
  93   1      }
  94          /********************************************************************
  95          
  96          函 数 名:ch451_write()
  97          功    能:把12位的指令或数据写入ch451
  98          说    明:12位数据或指令的写入顺序是低位
  99          调    用:
 100          入口参数:command
 101          返 回 值:
 102          设    计:蓝海微芯           
 103          ***********************************************************************/
 104          void ch451_write(uint command)
 105          {
 106   1        unsigned char i;
 107   1         
 108   1        EX1=0;                                   /*禁止键盘中断*/     
 109   1        ch451_load=0;                            /*命令开始*/    
 110   1        for(i=0;i<12;i++)
 111   1        {                                        /*送入12位数据,低位在前*/
 112   2          ch451_din=command&1;                                
 113   2          ch451_clk=0;
 114   2          command>>=1;
 115   2          ch451_clk=1;                           /*上升沿有效*/
 116   2        }
C51 COMPILER V7.08   CH451_B                                                               09/27/2006 09:13:59 PAGE 3   

 117   1        ch451_load=1;                            /*加载数据*/  
 118   1        EX1=1; 
 119   1      }
 120          
 121          /********************************************************************
 122          函 数 名:input_num()
 123          功    能:获取由键盘输入的数值
 124          说    明:将由键盘输入的密码值存入到数组input_code[6]中。
 125          调    用:
 126          入口参数:
 127          返 回 值:
 128          设    计:蓝海微芯           
 129          ***********************************************************************/
 130          void input_num(void)
 131          {
 132   1      
 133   1        if(flag_cnt==3)
 134   1        {
 135   2          flag_num=0x0a;
 136   2        }
 137   1          
 138   1        switch(flag_num){
 139   2        case 0x00:
 140   2        flag_num=0x0a;
 141   2        write_GLCD(ds_num[0]);
 142   2        input_code[flag_cnt]=0x00;
 143   2        break;
 144   2       
 145   2        case 0x01:
 146   2        flag_num=0x0a;
 147   2        write_GLCD(ds_num[1]);
 148   2        input_code[flag_cnt]=0x01;
 149   2        break;
 150   2      
 151   2        case 0x02:
 152   2        flag_num=0x0a;
 153   2        write_GLCD(ds_num[2]);
 154   2        input_code[flag_cnt]=0x02;
 155   2        break;
 156   2      
 157   2        case 0x03:
 158   2        flag_num=0x0a;
 159   2        write_GLCD(ds_num[3]);
 160   2        input_code[flag_cnt]=0x03;
 161   2        break;
 162   2          
 163   2        case 0x04:
 164   2        flag_num=0x0a;
 165   2        write_GLCD(ds_num[4]);
 166   2        input_code[flag_cnt]=0x04;
 167   2        break;
 168   2          
 169   2        case 0x05:
 170   2        flag_num=0x0a;
 171   2        write_GLCD(ds_num[5]);
 172   2        input_code[flag_cnt]=0x05;
 173   2        break;
 174   2      
 175   2        case 0x06:
 176   2        flag_num=0x0a;
 177   2        write_GLCD(ds_num[6]);
 178   2        input_code[flag_cnt]=0x06;
C51 COMPILER V7.08   CH451_B                                                               09/27/2006 09:13:59 PAGE 4   

 179   2        break;
 180   2      
 181   2        case 0x07:
 182   2        flag_num=0x0a;
 183   2        write_GLCD(ds_num[7]);
 184   2        input_code[flag_cnt]=0x07;
 185   2        break;
 186   2      
 187   2        case 0x08:
 188   2        flag_num=0x0a;
 189   2        write_GLCD(ds_num[8]);
 190   2        input_code[flag_cnt]=0x08;
 191   2        break;
 192   2      
 193   2        case 0x09:
 194   2        flag_num=0x0a;
 195   2        write_GLCD(ds_num[9]);
 196   2        input_code[flag_cnt]=0x09;
 197   2        break;
 198   2        default:
 199   2        break;
 200   2        }
 201   1        if((flag_cnt!=3)&&(flag_enter==0))
 202   1        {
 203   2          flag_cnt++;
 204   2        }
 205   1      }
 206          /********************************************************************
 207          函 数 名:decide_num()
 208          功    能:将相应的按键识别成对应的数值
 209          说    明:
 210          调    用:
 211          入口参数:
 212          返 回 值:
 213          设    计:蓝海微芯           
 214          ***********************************************************************/
 215          void decide_num(void)
 216          {
 217   1        switch(ch451_key){
 218   2        case 0x40:
 219   2        flag_num=0x00;
 220   2        break;
 221   2        case 0x41:
 222   2        flag_num=0x01;
 223   2        break;
 224   2        case 0x42:
 225   2        flag_num=0x02;
 226   2        break;
 227   2        case 0x43:
 228   2        flag_num=0x03;
 229   2        break;
 230   2        case 0x48:
 231   2        flag_num=0x04;
 232   2        break;
 233   2        case 0x49:
 234   2        flag_num=0x05;
 235   2        break;
 236   2        case 0x4a:
 237   2        flag_num=0x06;
 238   2        break;
 239   2        case 0x4b:
 240   2        flag_num=0x07;
C51 COMPILER V7.08   CH451_B                                                               09/27/2006 09:13:59 PAGE 5   

 241   2        break;
 242   2        case 0x50:
 243   2        flag_num=0x08;
 244   2        break;
 245   2        case 0x51:
 246   2        flag_num=0x09;
 247   2        break;
 248   2        case 0x52:
 249   2        flag_enter=1;
 250   2        break;
 251   2        default:
 252   2        break;
 253   2        }
 254   1        ch451_key=0xff;
 255   1      }
 256          /********************************************************************
 257          函 数 名:decide_num()
 258          功    能:将相应的按键识别成对应的数值
 259          说    明:
 260          调    用:
 261          入口参数:
 262          返 回 值:
 263          设    计:蓝海微芯           
 264          ***********************************************************************/
 265          void input_money(void)
 266          {
 267   1        if(flag_cnt==3)        /*确认按键按下时意输入了3位数的购电金额*/
 268   1        {
 269   2          m0=input_code[0];
 270   2          m1=input_code[1];
 271   2          m2=input_code[2];
 272   2          input_code[0]=0x00;
 273   2          input_code[1]=0x00;
 274   2          input_code[2]=0x00;
 275   2          M=m0*100+m1*10+m2;
 276   2        }
 277   1        if(flag_cnt==2)        /*确认按键按下时意输入了2位数的购电金额*/
 278   1        {
 279   2          m0=input_code[0];
 280   2          m1=input_code[1];
 281   2          input_code[0]=0x00;
 282   2          input_code[1]=0x00;
 283   2          M=m0*10+m1;
 284   2        }
 285   1        if(flag_cnt==1)        /*确认按键按下时意输入了1位数的购电金额*/
 286   1        {
 287   2          M=input_code[0];
 288   2          input_code[0]=0x00;
 289   2        }
 290   1        if(flag_cnt==0)        /*确认按键按下时意输入了0位数的购电金额*/
 291   1        {
 292   2          M=0;
 293   2        }
 294   1          
 295   1      }
 296            


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    589    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V7.08   CH451_B                                                               09/27/2006 09:13:59 PAGE 6   

   PDATA SIZE       =     10    ----
   DATA SIZE        =     14    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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