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

📄 mimaiic.lst

📁 2010年新增TX-1C程序
💻 LST
字号:
C51 COMPILER V8.02   MIMAIIC                                                               07/14/2010 14:43:21 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MIMAIIC
OBJECT MODULE PLACED IN mimaiic.OBJ
COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE mimaiic.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************************
   2                                                  “天祥电子”    倾情奉献
   3                                                                  www.txmcu.cn
   4                                                                  www.txmcu.com
   5          ********************************************************************************
   6                                                                          功能键
   7                                                          S6---S15        数字键0-9
   8                                          S16---更改密码          S17---更改密码完毕后确认
   9                                          S18---重试密码、重新设定        S19---关闭密码锁
  10                                          初始密码:000000        密码位数:6位
  11                                          注意:掉电后,所设密码会丢失,重新上点时,密码恢复为原始的000000
  12                                          与P1相连的8位发光LED点亮代表锁被打开;熄灭代表锁被锁上
  13          
  14          程序功能: 本程序结合了24C02存储器的存储功能,可以掉电保存密码。
  15                                  第一次运行时,若输入000000原始密码后无反应,可以试验着将主程序中前面的
  16                                  一小段被注释线屏蔽的程序前的注释线删掉,然后重新编译下载(可以将密码还原为000000)。
  17                                  此后,再将这小段程序屏蔽掉,再编译下载。方可正常使用。
  18                            1、开锁:
  19                            下载程序后,直接按六次S7(即代表数字1),8位LED亮,锁被打开,输入密码时,
  20                            六位数码管依次显示小横杠。
  21                            2、更改密码:
  22                            只有当开锁(LED亮)后,该功能方可使用。
  23                            首先按下更改密码键S16,然后设置相应密码,此时六位数码管会显示设置密码对应
  24                            的数字。最后设置完六位后,按下S17确认密码更改,此后新密码即生效。
  25                            3、重试密码:
  26                            当输入密码时,密码输错后按下键S18,可重新输入六位密码。
  27                            当设置密码时,设置中途想更改密码,也可按下此键重新设置。
  28                            4、关闭密码锁:
  29                            按下S19即可将打开的密码锁关闭。
  30          推荐初级演示步骤:输入原始密码000000---按下更改密码按键S16---按0到9设置密码---按S17
  31                                  确认密码更改---按S18关闭密码锁---输入新的密码打开密码锁
  32          *******************************************************************************/
  33          #include<reg52.h>
  34          #include <intrins.h>
  35          #define uint unsigned int
  36          #define uchar unsigned char
  37          
  38          uchar old1,old2,old3,old4,old5,old6; //原始密码000000
  39          uchar new1,new2,new3,new4,new5,new6;  //每次MCU采集到的密码输入
  40          uchar a=16,b=16,c=16,d=16,e=16,f=16; //送入数码管显示的变量
  41          uchar wei,key,temp;
  42          
  43          bit allow,genggai,ok,wanbi,retry,close;  //各个状态位
  44          
  45          sbit dula=P2^6;
  46          sbit wela=P2^7;
  47          sbit beep=P2^3;
  48          sbit sda=P2^0;                          //IO口定义
  49          sbit scl=P2^1;
  50          
  51          unsigned char code table[]=
  52          {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
  53          0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
  54          
  55          /*****************IIC芯片24C02存储器驱动程序************************************/
C51 COMPILER V8.02   MIMAIIC                                                               07/14/2010 14:43:21 PAGE 2   

  56          
  57          void nop()
  58          {
  59   1              _nop_();
  60   1              _nop_();
  61   1      }
  62          /////////24C02读写驱动程序////////////////////
  63          void delay1(unsigned int m)
  64          {       unsigned int n;
  65   1              for(n=0;n<m;n++);
  66   1      }
  67          
  68          void init()  //24c02初始化子程序
  69          {
  70   1              scl=1;
  71   1              nop();
  72   1              sda=1;
  73   1              nop();
  74   1      }
  75          
  76          void start()        //启动I2C总线
  77          {
  78   1              sda=1;
  79   1              nop();
  80   1              scl=1;
  81   1              nop();
  82   1              sda=0;
  83   1              nop();
  84   1              scl=0;
  85   1              nop();
  86   1      }
  87          
  88          void stop()         //停止I2C总线
  89          {
  90   1              sda=0;
  91   1              nop();
  92   1              scl=1;
  93   1              nop();
  94   1              sda=1;
  95   1              nop();
  96   1      }
  97          
  98          void writebyte(unsigned char j)  //写一个字节
  99          {
 100   1              unsigned char i,temp;
 101   1              temp=j;
 102   1              for (i=0;i<8;i++)
 103   1         {
 104   2                 temp=temp<<1;
 105   2                 scl=0;
 106   2                 nop();
 107   2                 sda=CY;              //temp左移时,移出的值放入了CY中
 108   2                 nop();
 109   2                 scl=1;               //待sda线上的数据稳定后,将scl拉高
 110   2                 nop();
 111   2         }
 112   1         scl=0;
 113   1         nop();
 114   1         sda=1;
 115   1         nop();
 116   1      }
 117          
C51 COMPILER V8.02   MIMAIIC                                                               07/14/2010 14:43:21 PAGE 3   

 118          unsigned char readbyte()   //读一个字节
 119          {
 120   1         unsigned char i,j,k=0;
 121   1         scl=0; nop(); sda=1;
 122   1         for (i=0;i<8;i++)
 123   1         {  
 124   2                      nop(); scl=1; nop();
 125   2              if(sda==1) 
 126   2                      j=1;
 127   2              else
 128   2                      j=0;
 129   2              k=(k<<1)|j;
 130   2                      scl=0;
 131   2              }
 132   1              nop();
 133   1              return(k);
 134   1      }
 135          
 136          void clock()         //I2C总线时钟
 137          {
 138   1         unsigned char i=0;
 139   1         scl=1;
 140   1         nop();
 141   1         while((sda==1)&&(i<255))
 142   1                i++;
 143   1         scl=0;
 144   1         nop();
 145   1      }
 146          
 147          ////////从24c02的地址address中读取一个字节数据/////
 148          unsigned char read24c02(unsigned char address)
 149          {
 150   1         unsigned char i;
 151   1         start();
 152   1         writebyte(0xa0);
 153   1         clock();
 154   1         writebyte(address);
 155   1         clock();
 156   1         start();
 157   1         writebyte(0xa1);
 158   1         clock();
 159   1         i=readbyte();
 160   1         stop();
 161   1         delay1(100);
 162   1         return(i);
 163   1      }
 164          
 165          //////向24c02的address地址中写入一字节数据info/////
 166          void write24c02(unsigned char address,unsigned char info)
 167          {
 168   1         start();
 169   1         writebyte(0xa0);
 170   1         clock();
 171   1         writebyte(address);
 172   1         clock();
 173   1         writebyte(info);
 174   1         clock();
 175   1         stop();
 176   1         delay1(5000); //这个延时一定要足够长,否则会出错。因为24c02在从sda上取得数据后,还需要一定时间的烧录过

⌨️ 快捷键说明

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