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

📄 密码锁.lst

📁 基于51单片机的电子密码锁
💻 LST
字号:
C51 COMPILER V6.12  胈码__                                                                 05/17/2007 10:44:51 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE 胈码__
OBJECT MODULE PLACED IN .\密码锁.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE .\密码锁.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //==================================================================
   2          //工程名称:
   3          //工程功能:
   4          //作者: 
   5          //审核:
   6          //版本: 0001.02.03
   7          //日期:2007.04.12
   8          //==================================================================
   9          #include "reg51.h"
  10          #include "intrins.h"
  11          
  12          #define  uchar unsigned char 
  13          #define  uint  unsigned int
  14          
  15          //==================液晶12864 端口定义
  16          sbit E=P1^0;
  17          sbit RW=P1^1;
  18          sbit RS=P1^2;
  19          //====================================
  20          
  21          //==================IIC 24c04 端口定义
  22          sbit SDA=P1^0;
  23          sbit SCL=P1^0;
  24          //====================================
  25          
  26          uchar code table1[]={"B :密码锁系统"};
  27          uchar code table2[]={"作者:潘素琴"};
  28          uchar code table3[]={"日期:2007.05.16"};
  29          
  30          /*****************************/
  31          /*延时子程序*/
  32          /****************************/
  33          void delayms (uchar k)
  34          	{
  35   1      		uchar j;
  36   1      		while((k--)!=0)
  37   1      			{
  38   2      				for(j=0;j<115;j++)
  39   2      					{;}
  40   2      			}
  41   1      	}			
  42          
  43          //=============================================================
  44          //函数名称:void check_busy(void)
  45          //函数功能:检测LCM是不是处于忙状态,并等待忙结束
  46          //作者:
  47          //日期:2007.03.31
  48          //=============================================================
  49          void check_busy(void)
  50          {  
  51   1          uchar i;
  52   1      	RS=0;
  53   1      	RW=1;
  54   1      	E=1;
  55   1      	P0=0xff;
C51 COMPILER V6.12  胈码__                                                                 05/17/2007 10:44:51 PAGE 2   

  56   1      	while(P0&0x01);
  57   1      	i=6;
  58   1      	while(i--);
  59   1      	E=0;
  60   1      }
  61          
  62          //=====================================================
  63          
  64          //======================================================
  65          //函数名称:void sendorder(uchar order)
  66          //函数功能:给LCM发送指令
  67          //作者:
  68          //日期:2007.03.31
  69          //======================================================
  70          void sendorder(uchar order)
  71          {
  72   1      	uchar i,temp1=0,temp2=0;
  73   1      	check_busy();
  74   1      	RS=0;
  75   1      	RW=0;
  76   1      	for(i=0;i<8;i++)
  77   1      	{
  78   2      		temp1=order&0x01;
  79   2      		temp2|=temp1;
  80   2      		order>>=1;
  81   2      		temp2<<=1;
  82   2      	}
  83   1      	P0=temp2;
  84   1      	i=7;
  85   1      	while(i--);
  86   1      	E=1;
  87   1      	E=0;
  88   1      }
  89          
  90          //=====================================================
  91          
  92          //=====================================================
  93          //函数名称:void sendbyte(uchar byte)
  94          //函数功能:给LCM发送数据
  95          //作者:
  96          //日期:2007.03.31
  97          //=====================================================
  98          
  99          void sendbyte(uchar byte)
 100          {
 101   1          uchar i,temp1=0,temp2=0;
 102   1      	check_busy();
 103   1      	for(i=0;i<8;i++)
 104   1      	{
 105   2      		temp1=byte&0x01;
 106   2      		temp2|=temp1;
 107   2      		byte>>=1;
 108   2      		temp2<<=1;
 109   2      	}
 110   1      	RS=1;
 111   1      	RW=0;
 112   1      	P0=temp2;
 113   1      	i=7;
 114   1      	while(i--);
 115   1      	E=1;
 116   1      	E=0;
 117   1      }
C51 COMPILER V6.12  胈码__                                                                 05/17/2007 10:44:51 PAGE 3   

 118          
 119          //=======================================================
 120          
 121          /*----------------------------------------------------------------------
 122          调用方式:void start_bit(void)
 123          函数说明:开始位-
 124          -----------------------------------------------------------------------*/
 125          void start_bit(void)
 126          {
 127   1          SCL=1;
 128   1      	_nop_();
 129   1          SDA=1;
 130   1      	_nop_();
 131   1          SDA=0;
 132   1      	_nop_();
 133   1          SCL=0;
 134   1      	_nop_();
 135   1      }
 136          /*-------------------------------------------------------------------
 137          调用方式:void stop_bit(void)
 138          函数说明:停止位
 139          --------------------------------------------------------------------*/
 140          void stop_bit(void)
 141          {
 142   1          SDA=0;
 143   1      	_nop_();
 144   1          SCL=1;
 145   1      	_nop_();
 146   1          SDA=1;
 147   1      	_nop_();
 148   1      }
 149          /*-----------------------------------------------------------------
 150          调用方式:void mast_ack(void)-
 151          函数说明:主答函数
 152          -----------------------------------------------------------------*/
 153          void mast_ack(void)
 154          {
 155   1          SCL=0;
 156   1      	_nop_();
 157   1          SDA=0;
 158   1      	_nop_();
 159   1          SCL=1;
 160   1      	_nop_();
 161   1          SCL=0;
 162   1      	_nop_();
 163   1          SDA=1;
 164   1      	_nop_();
 165   1      }
 166          
 167          /*-----------------------------------------------
 168          调用方式:void ack(void)
 169          函数说明:应答函数
 170          -----------------------------------------------*/
 171          void ack(void)
 172          {
 173   1          SDA=1;
 174   1          SCL=0;
 175   1      	_nop_();
 176   1          SCL=1;
 177   1      	_nop_();
 178   1          while(SDA){;}
 179   1          SCL=0;
C51 COMPILER V6.12  胈码__                                                                 05/17/2007 10:44:51 PAGE 4   

 180   1      	_nop_();
 181   1      }
 182          /*-----------------------------------------------
 183          调用方式:void no_ack(void)
 184          函数说明:无需应答位,在读程序中用到
 185          -----------------------------------------------*/
 186          void no_ack(void)
 187          {
 188   1          SDA=1;
 189   1      	_nop_();
 190   1          SCL=1;
 191   1      	_nop_();
 192   1          SCL=0;
 193   1      	_nop_();
 194   1      }
 195          /*-----------------------------------------------
 196          调用方式:write_8bit(unsigned char ch)
 197          函数说明:写一个字节(8位)数据
 198          -----------------------------------------------*/
 199          write_8bit(unsigned char ch)
 200          {
 201   1          unsigned char i=8;
 202   1          SCL=0;
 203   1      	_nop_();
 204   1          while(i--)
 205   1          {
 206   2              SDA=(bit)(ch&0x80);
 207   2      		_nop_();
 208   2              ch<<=1;
 209   2              SCL=1;
 210   2      		_nop_();
 211   2              SCL=0;
 212   2      		_nop_();
 213   2          }
 214   1      }
 215          /*----------------------------------------------
 216          调用方式:unsigned char read24c16(unsigned int address)
 217          函数说明:读24c16指定地址数据(字节读)
 218          -----------------------------------------------*/
 219          unsigned char read24c16(uchar addh)
 220          {
 221   1          unsigned char data rdata;
 222   1          unsigned char i=8;
 223   1          start_bit();
 224   1      	write_8bit(0xa0);
 225   1          ack();
 226   1          write_8bit(addh);
 227   1          ack();                //伪写
 228   1          start_bit();
 229   1          write_8bit(0xa1);
 230   1          ack();
 231   1          while(i--)
 232   1          {
 233   2              rdata<<=1;
 234   2              SCL=0;
 235   2      		_nop_();
 236   2      		SCL=1;
 237   2              _nop_();
 238   2              if(SDA) rdata|=0x01;
 239   2          }
 240   1          no_ack();
 241   1          stop_bit();
C51 COMPILER V6.12  胈码__                                                                 05/17/2007 10:44:51 PAGE 5   

 242   1          return(rdata);
 243   1      }
 244          /*-----------------------------------------------
 245          调用方式:void write24c16(unsigned int address,unsigned char ddata)
 246          函数说明:写数据到24c16的指定地址(字节写)
 247          -----------------------------------------------*/
 248          void write24c16(unsigned int addr_h,unsigned char ddata)
 249          {
 250   1          start_bit();
 251   1          write_8bit(0xa0);
 252   1          ack();
 253   1          write_8bit(addr_h);
 254   1          ack();
 255   1          write_8bit(ddata);
 256   1          ack();
 257   1          stop_bit();
 258   1          delayms(4);
 259   1      }
 260          //=======================================================================
 261          
 262          //=======================================================================
 263          //函数名:void LCD_init()
 264          //函数功能:
 265          //参数:
 266          //作者:
 267          //日期:
 268          //======================================================================= 
 269          void LCD_init()
 270          {
 271   1      	uchar i;
 272   1      	sendorder(0x30);             ///功能设置 8位控制界面   基本指令
 273   1      	sendorder(0x0c);			 ///显示打开  光标关  反白显示关
 274   1      	sendorder(0x01);			 ///清除屏幕显示  将DDRAM的地址计数器清零
 275   1      	sendorder(0x80);			 ///设置DDRAM地址为0000000
 276   1      	for(i=0;i<14;i++)
 277   1      	{
 278   2      		sendbyte(table1[i]);
 279   2      	}
 280   1      	sendorder(0x88);			 
 281   1      	for(i=0;i<12;i++)
 282   1      	{
 283   2      		sendbyte(table2[i]);
 284   2      	}
 285   1      	sendorder(0x98);		
 286   1      	for(i=0;i<16;i++)
 287   1      	{
 288   2      		sendbyte(table3[i]);
 289   2      	}
 290   1      }
 291          //=======================================================================
 292          
 293          //=======================================================================
 294          //函数名:
 295          //函数功能:
 296          //参数:
 297          //作者:
 298          //日期:
 299          //======================================================================= 
 300          void main()
 301          {
 302   1      	LCD_init();
 303   1      	while(1);
C51 COMPILER V6.12  胈码__                                                                 05/17/2007 10:44:51 PAGE 6   

 304   1      }
 305          //=======================================================================


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    403    ----
   CONSTANT SIZE    =     45    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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