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

📄 1602.lst

📁 单片机密码锁c程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V6.12  1602                                                                   10/12/2012 11:14:18 PAGE 1   


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

stmt level    source

   1          #include <REG51.h>
   2          #include<intrins.h>
   3          #define LCM_Data  P0
   4          #define uchar unsigned char 
   5          #define uint  unsigned int
   6          #define w 6				//定义密码位数
   7          sbit lcd1602_rs=P2^5;
   8          sbit lcd1602_rw=P2^6;
   9          sbit lcd1602_en=P2^7;
  10          
  11          sbit Scl=P3^4;			//24C02串行时钟
  12          sbit Sda=P3^5;			//24C02串行数据
  13          
  14          sbit ALAM = P2^1;		//报警	
  15          sbit KEY = P2^0;		//开锁
  16          
  17          sbit open_led=P2^2;		//开锁指示灯
  18          
  19          bit  operation=0;		//操作标志位
  20          bit  pass=0;			//密码正确标志
  21          bit  ReInputEn=0;		//重置输入充许标志	
  22          bit  s3_keydown=0;		//3秒按键标志位
  23          bit  key_disable=0;		//锁定键盘标志
  24          
  25          unsigned char countt0,second;	//t0中断计数器,秒计数器
  26          
  27          void Delay5Ms(void);
  28          
  29          unsigned char code a[]={0xFE,0xFD,0xFB,0xF7}; 											//控盘扫描控制表
  30          
  31          unsigned char code start_line[]	= {"password:       "};
  32          unsigned char code name[] 	 	= {"Coded Management"};												//显示名称
  33          unsigned char code Correct[] 	= {"     correct    "};			 								//输入正确
  34          unsigned char code Error[]   	= {"      error     "};  											//输入错误
  35          unsigned char code codepass[]	= {"      pass      "}; 
  36          unsigned char code LockOpen[]	= {"      true      "};												//OPEN
  37          unsigned char code SetNew[] 	= {"SetNewWordEnable"};
  38          unsigned char code Input[]   	= {"input:          "};												//INPUT
  39          unsigned char code ResetOK[] 	= {"ResetPasswordOK "};
  40          unsigned char code initword[]	= {"Init password..."};
  41          unsigned char code Er_try[]		= {"error,try again!"};
  42          unsigned char code again[]		= {"input again     "};
  43          
  44          unsigned char InputData[6];																//输入密码暂存区
  45          unsigned char CurrentPassword[6]={1,3,1,4,2,0}; 														//当前密码值
  46          unsigned char TempPassword[6];
  47          unsigned char N=0;				//密码输入位数记数
  48          unsigned char ErrorCont;			//错误次数计数
  49          unsigned char CorrectCont;			//正确输入计数
  50          unsigned char ReInputCont; 			//重新输入计数
  51          unsigned char code initpassword[6]={1,2,3,4,5,6};
  52          
  53          
  54          //=====================5ms延时==============================
  55          void Delay5Ms(void)
C51 COMPILER V6.12  1602                                                                   10/12/2012 11:14:18 PAGE 2   

  56          {
  57   1      	unsigned int TempCyc = 5552;
  58   1      	while(TempCyc--);
  59   1      }
  60          
  61          //===================400ms延时==============================
  62          void Delay400Ms(void)
  63          {
  64   1       unsigned char TempCycA = 5;
  65   1       unsigned int TempCycB;
  66   1       while(TempCycA--)
  67   1       {
  68   2        TempCycB=7269;
  69   2        while(TempCycB--);
  70   2       }
  71   1      }
  72          
  73          //=============================================================================================
  74          //================================24C02========================================================
  75          //=============================================================================================
  76          
  77          void mDelay(uint t) //延时
  78          { 
  79   1      	uchar i;
  80   1         	while(t--)
  81   1         	{
  82   2         		for(i=0;i<125;i++)
  83   2         		{;}
  84   2         	}
  85   1      }
  86             
  87          
  88          void Nop(void)		  //空操作
  89          {
  90   1       	_nop_();
  91   1       	_nop_();
  92   1       	_nop_();
  93   1       	_nop_();
  94   1      }
  95          
  96          
  97          /*起始条件*/
  98          
  99          void Start(void)
 100          {
 101   1       	Sda=1;
 102   1       	Scl=1;
 103   1       	Nop();
 104   1       	Sda=0;
 105   1       	Nop();
 106   1      }
 107          
 108          
 109           /*停止条件*/
 110          void Stop(void)
 111          {
 112   1       	Sda=0;
 113   1       	Scl=1;
 114   1       	Nop();
 115   1       	Sda=1;
 116   1       	Nop();
 117   1      }
C51 COMPILER V6.12  1602                                                                   10/12/2012 11:14:18 PAGE 3   

 118          
 119          /*应答位*/
 120          void Ack(void)
 121          {
 122   1      	Sda=0;
 123   1      	Nop();
 124   1      	Scl=1;
 125   1      	Nop();
 126   1      	Scl=0;
 127   1      }
 128          
 129          /*反向应答位*/
 130          void NoAck(void)
 131          {
 132   1       	Sda=1;
 133   1       	Nop();
 134   1       	Scl=1;
 135   1       	Nop();
 136   1       	Scl=0;
 137   1      }
 138          
 139           /*发送数据子程序,Data为要求发送的数据*/
 140          void Send(uchar Data)
 141          {
 142   1         	uchar BitCounter=8;
 143   1         	uchar temp;
 144   1         	do
 145   1         	{
 146   2         		temp=Data;
 147   2         		Scl=0;
 148   2         		Nop();
 149   2         		if((temp&0x80)==0x80)
 150   2         		Sda=1;
 151   2         		else 
 152   2         		Sda=0;
 153   2         		Scl=1;
 154   2         		temp=Data<<1;
 155   2         		Data=temp;
 156   2         		BitCounter--;
 157   2         	}
 158   1         	while(BitCounter);
 159   1         	Scl=0;
 160   1      }
 161          
 162          /*读一字节的数据,并返回该字节值*/
 163          uchar Read(void)
 164          {
 165   1          uchar temp=0;
 166   1      	uchar temp1=0;
 167   1      	uchar BitCounter=8;
 168   1      	Sda=1;
 169   1      	do{
 170   2      	Scl=0;
 171   2      	Nop();
 172   2      	Scl=1;
 173   2      	Nop();
 174   2      	if(Sda)
 175   2      	temp=temp|0x01;
 176   2      	else
 177   2      	temp=temp&0xfe;
 178   2      	if(BitCounter-1)
 179   2      	{
C51 COMPILER V6.12  1602                                                                   10/12/2012 11:14:18 PAGE 4   

 180   3      	temp1=temp<<1;
 181   3      	temp=temp1;
 182   3      	}
 183   2      	BitCounter--;
 184   2      	}
 185   1      	while(BitCounter);
 186   1      	return(temp);
 187   1      	}
 188          
 189          void WrToROM(uchar Data[],uchar Address,uchar Num)
 190          {
 191   1        uchar i;
 192   1        uchar *PData;
 193   1        PData=Data;
 194   1        for(i=0;i<Num;i++)
 195   1        {
 196   2        Start();
 197   2        Send(0xa0);
 198   2        Ack();
 199   2        Send(Address+i);
 200   2        Ack();
 201   2        Send(*(PData+i));
 202   2        Ack();
 203   2        Stop();
 204   2        mDelay(20);
 205   2        }
 206   1      }
 207          
 208          void RdFromROM(uchar Data[],uchar Address,uchar Num)
 209          {
 210   1        uchar i;
 211   1        uchar *PData;
 212   1        PData=Data;
 213   1        for(i=0;i<Num;i++)
 214   1        {
 215   2        Start();
 216   2        Send(0xa0);
 217   2        Ack();
 218   2        Send(Address+i);
 219   2        Ack();
 220   2        Start();
 221   2        Send(0xa1);
 222   2        Ack();
 223   2        *(PData+i)=Read();
 224   2        Scl=0;
 225   2        NoAck();
 226   2        Stop();
 227   2        }
 228   1      }
 229          
 230          
 231          //==================================================================================================
 232          //=======================================LCD1602====================================================
 233          //==================================================================================================
 234          
 235          #define yi 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)
 236          #define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)
 237          
 238          
 239          //----------------延时函数,后面经常调用----------------------
 240          void delay(uint xms)//延时函数,有参函数
 241          {
C51 COMPILER V6.12  1602                                                                   10/12/2012 11:14:18 PAGE 5   

 242   1      	uint x,y;
 243   1      	for(x=xms;x>0;x--)
 244   1      	 for(y=110;y>0;y--);
 245   1      }
 246          
 247          //--------------------------写指令---------------------------
 248          write_1602com(uchar com)//****液晶写入指令函数****
 249          {
 250   1      	lcd1602_rs=0;//数据/指令选择置为指令
 251   1      	lcd1602_rw=0; //读写选择置为写
 252   1      	P0=com;//送入数据
 253   1      	delay(1);
 254   1      	lcd1602_en=1;//拉高使能端,为制造有效的下降沿做准备
 255   1      	delay(1);
 256   1      	lcd1602_en=0;//en由高变低,产生下降沿,液晶执行命令
 257   1      }
 258          
 259          //-------------------------写数据-----------------------------
 260          write_1602dat(uchar dat)//***液晶写入数据函数****
 261          {
 262   1      	lcd1602_rs=1;//数据/指令选择置为数据
 263   1      	lcd1602_rw=0; //读写选择置为写
 264   1      	P0=dat;//送入数据
 265   1      	delay(1);
 266   1      	lcd1602_en=1; //en置高电平,为制造下降沿做准备
 267   1      	delay(1);
 268   1      	lcd1602_en=0; //en由高变低,产生下降沿,液晶执行命令
 269   1      }
 270          
 271          //-------------------------初始化-------------------------
 272          void lcd_init(void)
 273          {
 274   1      	write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据
 275   1      	write_1602com(0x0c);//开显示不显示光标
 276   1      	write_1602com(0x06);//整屏不移动,光标自动右移
 277   1      	write_1602com(0x01);//清显示
 278   1      }
 279          //========================================================================================

⌨️ 快捷键说明

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