用单片机设计一个简易的密码锁,用键盘输入0~9三位数的密码.密码输入正确显示“P”约3s,并通过P3.0端口将

作者&投稿:太策 (若有异议请与网页底部的电邮联系)
任务:用单片机实现一个简单的电子密码锁,用4×4键盘组成一个0-9数字键以及确认、取消键,用·6位7段数码~

我可以提供给你做一个,但有几个问题
1、加点后是什么意思,不是没有小数点吗,加电后?
2、用什么型号的的单片机
3、要存密码必须有存储器,24C02什么的行吗

  #include
  #define uint unsigned int
  #define uchar unsigned char
  #define KEY P3 //键盘输入端口
  #define No_key 20 //无按键时的返回值
  #define lcddata P2 //1602的数据输入端口
  sbit lcden= P1^2;
  sbit lcdrs= P1^0;
  sbit lcdrw= P1^1;
  sbit light= P1^3;
  sbit light1= P1^4;
  uchar j ; //用来统计输入 个数的全局变量
  uchar aa; //用来在定时器中计数的 全局变量

  uchar code table[]= " Hello!";
  uchar code table1[]=" OK! " ;
  uchar code table2[]="Enter please:" ;
  uchar code key_table[16] =
  {
  1,2,3,10,
  4,5,6,11,
  7,8,9,12,
  0,13,14,15
  };
  uchar password[]={2,0,1,0,9,3} ; //设定初始密码
  uchar save[6]; //保存输入的数据
  uchar conflag ; //确认标志
  uchar lockflag; //锁键盘标志
  uchar startflag; //开始标志

  void delay(uint z); //延时子函数
  void wright_com(uchar com); //写指令函数
  void wright_data(uchar date) ; //写数据函数
  void init(); //初始化
  void display_OK(); // 显示OK
  void delete(); //删除输入的最后一个数

  uchar keyscan() ; //带返回值的键盘扫描程序

  void enter_code(uchar t); //输入密码函数,把输入的数据存入数组中并在屏幕上显示相应的东西,
  void confirm(); //确认密码对不对,把输入的数据与密码逐一对比,完全一样刚正确,
  void succeed_an(); //输入密码成功时的 响应,
  void fail_an(); //输入密码 失败时 响应
  void lockkey(); //锁键盘三秒
  void alarm(); //发出警报声
  void reset(); //复位函数
  void display_enter(); //显示输入
  void main(void)
  {
  uchar temp;
  init();
  while(1)
  {

  if(lockflag)
  {
  temp=keyscan(); // 锁键期间也要进行键盘扫描
  if(temp!=No_key) //重新记时三秒
  {
  aa=0; //重新在定时器中计数
  }

  }
  else
  {
  temp=keyscan(); //反复扫描输入,等待随时输入


  if(temp!=No_key) //有按键按下才进行下面的操作
  {
  if(temp==10)
  {
  reset();
  startflag=1; //开始标志置位
  }
  if(startflag)
  {
  enter_code(temp); //每扫描一次键盘就要进行一次处理,保存输入的数值

  if(temp==13) //按下确认键盘就要进行密码确认
  {
  confirm(); //进行确认判断
  if(conflag) //密码确认为正确
  {
  succeed_an(); //密码正确,作出相应的反应
  }
  else
  {
  fail_an(); //密码错误,作相应反应
  }
  }

  if(temp==14)
  {
  delete(); //作删除操作
  }
  }
  }
  }

  }
  }
  /****** 显示enter********/
  void display_enter()
  {
  uchar num;
  wright_com(0x80);
  for(num=0;num<13;num++)
  {
  wright_data(table2[num]);
  }
  }
  /****** 显示OK********/
  void display_OK()
  {
  uchar num;
  wright_com(0x80);
  for(num=0;num<13;num++)
  {

  wright_data(table1[num]);
  }
  }
  /****** 删除最后一个********/
  void delete()
  {
  wright_com(0x80+0x40+j); //确定删除对象
  wright_data(' '); //显示空格即为删除
  save[--j]=0; //删除后数据清零
  wright_com(0x80+0x40+j); //为下次输入数据时写好位置,必须是在最后一个后面
  }
  /****** 对各种变量进行复位********/
  void reset()
  {
  uchar num;
  display_enter();
  wright_com(0x80+0x40); //擦除屏幕上的显示
  for(num=0;num<6;num++)
  {
  save[num]=0; //对输入的数值进行清零
  wright_data(' '); //显示的是空格
  }
  wright_com(0x80+0x40); //下次再输入时可以又从起始位置输入
  lockflag=0; //各种变量要清零回起始状态
  conflag=0;
  j=0;
  }
  /****** 输入密码正确进行响应********/
  void succeed_an()
  {


  light=0; //灯亮
  display_OK(); //显示成功
  delay(1000);
  light=1; //灯灭
  }
  /****** 输入密码错误进行响应********/
  void fail_an()
  {
  alarm();
  lockkey();
  }
  /****** 发出警报声**********/
  void alarm() //这个以后再扩展它
  {

  }
  /******锁键盘三秒************/
  void lockkey()
  {
  lockflag=1;
  }
  /******输入密码并在屏幕上显示星号******/
  void enter_code(uchar t)
  {

  if(t>=0&&t<10)
  {

  if(j==0)
  {
  wright_com(0x80+0x40) ; //第一输入时要先写入地址指令,否则无法显示
  wright_data('*') ;
  }
  else
  {
  wright_data('*') ;//不是第一个输入则不用再写地址
  }
  save[j++]=t; //保存输入的数据
  }
  }

  /******校对密码以确定是不是正确的**********/
  void confirm()
  {
  uchar k;
  for(k=0;k<6;k++)
  {
  if(password[k]!=save[k]) //对数组中的内容进行逐一比较,一旦有数据不对马上退出循环
  {
  break;
  }
  }
  if(k==6) //要是条件退出的话说明六个数全对密码
  {
  conflag=1; // 进行标志密码正确
  }

  }


  /******中断服务程序**********/
  void timer0() interrupt 1
  {

  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256; //重装初值
  if(lockflag)
  {
  aa++;
  light1=0;
  if(aa>=60) //三秒到了
  {
  aa=0; //清零可以方便下次再使用
  light1=1; //关闭警报
  lockflag=0; //标志清零解除键锁,方便下次使用

  }
  }

  }
  /******初始化***********/
  void init()
  {
  uchar num;
  /*****定时器初始化****/
  TMOD=1;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  ET0=1;
  EA=1; //开启总中断
  TR0=1;//把定时器关闭


  /****1602初始化******/
  lcdrw=0; //这个必须要置 零,否则无法正常显示
  lcden=0;
  wright_com(0x38) ; //初始化
  wright_com(0x0c) ; //打开光标 0x0c不显示光标 0x0e光标不闪,0x0f光标闪
  wright_com(0x01) ; //清显示
  wright_com(0x80) ;
  for(num=0;num<9;num++)
  {
  wright_data(table[num]);
  delay(1);
  }
  }
  /******1602写入指令************/
  void wright_com(uchar com)
  {
  lcdrs=0;
  lcddata=com;
  delay(1);
  lcden=1;
  delay(1);
  lcden=0;
  }
  /******1602写入数据***********/
  void wright_data(uchar date)
  {
  lcdrs=1;
  lcddata=date;
  delay(1);
  lcden=1;
  delay(1);
  lcden=0;
  }
  /******延时函数************/
  void delay(uint z)
  {
  uint x,y;
  for(x=z;x>0;x--)
  for(y=110;y>0;y--) ;
  }

  /**********4x4矩阵键盘扫描函数*********/
  uchar keyscan()
  {
  uchar temp,num=No_key; //num的初值要为无键盘按下时的返回值
  /*********扫描第一行****************/
  KEY=0xfe;
  temp=KEY;
  temp=temp&0xf0; //读出高四位
  while(temp!=0xf0)
  {

  delay(5); //延时消抖
  temp=KEY;
  temp=temp&0xf0;
  while(temp!=0xf0) //确认确实有按键按下
  {

  temp=KEY;
  switch(temp) //根据这八个电平可以确定是哪个按键按下
  {
  case 0xee:num=1;
  break;
  case 0xde:num=2;
  break;
  case 0xbe:num=3;
  break;
  case 0x7e:num=10;
  break;
  }
  while(temp!=0xf0) //等待松手
  {
  temp=KEY;
  temp=temp&0xf0;
  }

  }
  }
  /*********扫描第二行***************/
  KEY=0xfd;
  temp=KEY;
  temp=temp&0xf0;
  while(temp!=0xf0)
  {
  delay(5);
  temp=KEY;
  temp=temp&0xf0;
  while(temp!=0xf0)
  {

  temp=KEY;
  switch(temp)
  {
  case 0xed:num=4;
  break;
  case 0xdd:num=5;
  break;
  case 0xbd:num=6;
  break;
  case 0x7d:num=11;
  break;
  }
  while(temp!=0xf0)
  {
  temp=KEY;
  temp=temp&0xf0;
  }

  }
  }
  /*********扫描第三行****************/
  KEY=0xfb;
  temp=KEY;
  temp=temp&0xf0;
  while(temp!=0xf0)
  {
  delay(5);
  temp=KEY;
  temp=temp&0xf0;
  while(temp!=0xf0)
  {
  temp=KEY;
  switch(temp)
  {
  case 0xeb:num=7;
  break;
  case 0xdb:num=8 ;
  break;
  case 0xbb:num=9;
  break;
  case 0x7b:num=12;
  break;
  }
  while(temp!=0xf0)
  {
  temp=KEY;
  temp=temp&0xf0;
  }

  }
  }
  /*********扫描第四行****************/
  KEY=0xf7;
  temp=KEY;
  temp=temp&0xf0;
  while(temp!=0xf0)
  {
  delay(5);
  temp=KEY;
  temp=temp&0xf0;
  while(temp!=0xf0)
  {
  temp=KEY;
  switch(temp)
  {
  case 0xe7:num=0;
  break;
  case 0xd7:num=13;
  break;
  case 0xb7:num=14;
  break;
  case 0x77:num=15;
  break;
  }
  while(temp!=0xf0)
  {
  temp=KEY;
  temp=temp&0xf0;
  }

  }
  }

  return num;
  }

你这个问题内容量太大,不可能有谁那么多时间给你开发,我这边有个做过的类似的,代码送你了。

#include <msp430x14x.h>
#include "Delay.h"
#include "x24c02.h"
#include "LCD1602.h"

uchar LCD_ID_1[16] = {"Password: ------"};
uchar LCD_ID_2[16] = {"Old Code: ------"};
uchar LCD_ID_3[16] = {"                "};
uchar LCD_ID_4[16] = {"New Code: ------"};

#define JI_OPEN P3OUT|=BIT6
#define JI_CLOSE P3OUT&=~BIT6

uchar a=10,b=10+0x40,c=0,i=0,j=0,k=0,super=0;

uchar flag=0;

uchar table1[6]={1,2,3,4,5,6};
uchar table2[6]={0,0,0,0,0,0};
uchar table3[6]={0,0,0,0,0,0};
uchar supercode[6]={8,8,8,8,8,8};
//SCL时钟线
#define SCO_SET P1OUT|=BIT3//输出高
#define SCO_RESET P1OUT&=(~BIT3)//输出低
#define SCO_IN (P1IN&BIT3)//输出
#define SCOIN P1DIR&=(~BIT3)//设置输入
#define SCOOUT P1DIR|=BIT3//设置输出
//SDA数据线
#define SDO_SET P1OUT|=BIT2
#define SDO_RESET P1OUT&=(~BIT2)
#define SDO_IN (P1IN&BIT2)
#define SDOIN P1DIR&=(~BIT2)
#define SDOOUT P1DIR|=BIT2

void shuru(void);
void shezhi(void);
void bijiao(void);

uchar chumo_read(void)
{
  uchar i,dat;
  SCOOUT;//设置输出
  SCO_RESET;//输出低
  
  SDOOUT;
  SDO_SET;
  delay_us(93);
  SDO_RESET;
  delay_us(10);
  SDOIN;
  
  for(i=0;i<16;i++)
  {
    SCO_SET;
    delay_us(5);
    
    if(SDO_IN!=0)
    {
      dat=i+1;
    }
    
    SCO_RESET;
    delay_us(5);
  }
  delay_ms(2);
  return dat;
}   

void OPEN(void)
{
  P1OUT |= BIT4;
  P3OUT &=~BIT5;
  delay_ms(1000);delay_ms(1000);
  P3OUT &=~BIT5;
  P1OUT &=~BIT4;
}
void CLOSE(void)
{
  P3OUT |= BIT5;
  P1OUT &=~BIT4;
  delay_ms(1000);delay_ms(1000);
  P3OUT &=~BIT5;
  P1OUT &=~BIT4;
}
void main( void )
{
  //系统初始化
  WDT_Init();  //STOP WDT
  MCLK_Init(); //MCLK=8M
  Port_Init(); //CLOSE ALL PORT
  
  P3DIR |= BIT5;
  P1DIR |= BIT4;
  P3OUT &=~BIT5;
  P1OUT &=~BIT4;
  d24c_init();
  
  L1602_Init();
  L1602_string(1, 1, LCD_ID_1);
  
  P3DIR|=BIT6;
  P3DIR&=~BIT7;
  P6DIR|=BIT2;
  JI_CLOSE;
  
  delay_ms(10);
  table1[0]=d24c_read(1);
  delay_ms(20);
  table1[1]=d24c_read(2);
  delay_ms(20);
  table1[2]=d24c_read(3);
  delay_ms(20);
  table1[3]=d24c_read(4);
  delay_ms(20);
  table1[4]=d24c_read(5);
  delay_ms(20);
  table1[5]=d24c_read(6);
  delay_ms(500);
  
  while(1)
  {
    delay_ms(100);

    shuru();
    shezhi();
    bijiao();
  }
}

void shuru(void)
{
  wcmd(0x80+a+c);
  wcmd(0x0f);
  
  if((chumo_read()!=0)&&(chumo_read()<11))
  {
    delay_ms(10);
    if(chumo_read()!=0)
    {
      table2[c]=chumo_read();
      L1602_char(1,a+c+1,(chumo_read()%10)+0X30);
      c++;
      delay_ms(500);
      if(c==6)
      {
        c=0;
        L1602_string(1, 1, LCD_ID_1);
      }
    }
  }
  
  j=0;
  for(i=0;i<6;i++)
  {
    if(table1[i]!=table2[i])
    {
      j=1;
      break;
    }
  } 

  if(chumo_read()==13)
  {
    delay_ms(10);
    if(chumo_read()==13)
    {
      c=0;
      L1602_string(1, 1, LCD_ID_1);
      delay_ms(1000);
    }
  }
}

void shezhi(void)
{
  if(chumo_read()==16)
  {
    delay_ms(10);
    if(chumo_read()==16)
    {
      L1602_string(1, 1, LCD_ID_3);
      L1602_string(2, 1, LCD_ID_2);
      flag=1;
      c=0;
      delay_ms(500);
    }
  }
  while(flag==1)
  {
    wcmd(0x80+0x40+a+c);
    wcmd(0x0f);
    
      if((chumo_read()!=0)&&(chumo_read()<11))
  {
    delay_ms(10);
    if(chumo_read()!=0)
    {
      table2[c]=chumo_read();
      L1602_char(2,a+c+1,(chumo_read()%10)+0X30);
      c++;
      delay_ms(500);
      if(c==6)
      {
        c=0;
        L1602_string(2, 1, LCD_ID_2);
          super=1;
          for(i=0;i<6;i++)
          {
            if(supercode[i]!=table2[i])
            {
              super=0;
              break;
            }
          } 
      }
    }
  }
  
  k=1;
  for(i=0;i<6;i++)
  {
    if(table1[i]!=table2[i])
    {
      k=0;
      break;
    }
  } 

  if(chumo_read()==13)
  {
    delay_ms(10);
    if(chumo_read()==13)
    {
      c=0;
      L1602_string(2, 1, LCD_ID_2);
      delay_ms(1000);
    }
  }
    
  if(k==1 || super == 1)
  {
     L1602_string(2, 1, LCD_ID_4);
  }
    while(k==1 || super==1)
    {
      wcmd(0x80+0x40+a+c);
      wcmd(0x0f);

      if((chumo_read()!=0)&&(chumo_read()<11))
      {
        delay_ms(10);
        if(chumo_read()!=0)
        {
          table1[c]=chumo_read();
          L1602_char(2,a+c+1,(chumo_read()%10)+0X30);
          c++;
          if(c==6)
          {
            delay_ms(1000);
            c=0;
            flag=0;
            k=0;
            super = 0;
            d24c_write(1,table1[0]);
            delay_ms(30);
            d24c_write(2,table1[1]);
            delay_ms(30);
            d24c_write(3,table1[2]);
            delay_ms(30);
            d24c_write(4,table1[3]);
            delay_ms(30); 
            d24c_write(5,table1[4]);
            delay_ms(30);
            d24c_write(6,table1[5]);
            delay_ms(30);    
  
            L1602_string(1, 1, LCD_ID_1);
            L1602_string(2, 1, LCD_ID_3);
           }
         }
         delay_ms(400);
      }
      delay_ms(100);
      if(chumo_read()==13)
      {
        delay_ms(10);
        if(chumo_read()==13)
        {
          c=0;
          L1602_string(2, 1, LCD_ID_2);
          delay_ms(500);
        }
      }
   }
  }
}
void bijiao()
{
  if((j==0)||((P3IN&BIT7)!=0))
  {
    JI_OPEN;
    P6OUT&=~BIT2;
    OPEN();
    delay_ms(2000);
    L1602_string(1, 1, LCD_ID_1);
    for(i=0;i<6;i++)
    {
      table2[i]=0;
    }
    JI_CLOSE;
    CLOSE();
  }
  else
  {
    P6OUT|=BIT2;
  }
}


我以前写过一个程序,要是找找,还是能找到的,要比你的电路简单多了.
输出就不讲了,输出电平时间是可以设置的.
输入我讲一下,我用的是1个按键,密码输入方法类似摩尔斯码,如输入2,就是连续的按2下,如果输入8,就连续按8下,在这个按键上并一个LED,这个LED为状态显示,当密码输入正确时,LED闪一下.
如果密码都正确,输出脚输出高电平.
这个电路简单吧.

按你说的有点麻烦 不过还是可以完成的

还可以不难
懂事电子设计 Vgz


设计一个计时为1分钟的电子秒表单片机实验如何实现LED的动态扫描?_百...
要设计一个使用单片机实现的计时为1分钟的电子秒表,同时实现LED的动态扫描,你可以按照以下步骤进行:硬件准备:单片机:如Arduino UNO,具有数字和模拟输入\/输出引脚。LED:根据你的需要选择LED的数量和颜色。7段显示器:用于显示秒表的数字,可选。按键:用于启动、暂停和重置秒表。适当的电阻:用于限制...

有人可以帮我设计一个关于单片机的交通灯的程序吗,不需要太复杂_百度知 ...
include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit RED_A=P0^0; \/\/东西向灯sbit YELLOW_A=P0^1;sbit GREEN_A=P0^2;sbit RED_B=P0^3; \/\/南北向灯sbit YELLOW_B=P0^4;sbit GREEN_B=P0^5;uchar Flash_Count=0,Operation_Type=1; \/\/闪烁次数操作类型变量\/\/...

单片机的电路怎么设计
完成单片机最小系统后再完成LED灯的控制,LED灯与单片机的IO端口连接时,需要将LED灯串联220Ω的电阻限流。然后单片机的一组IO口最多串联2个LED灯,如果要多个LED灯,那最多可以在单片机的IO口并联4组2个串接在一起的LED灯。单片机有32个IO口,如此算下来,你一个IO口做多可以控制8个LED灯,那么32...

设计一个简单的单片机实例附加源代码加原理图(在线求!!!)
\/* 名称:闪烁的 LED 说明:LED 按设定的时间间隔闪烁 *\/ include<reg51.h> define uchar unsigned char define uint unsigned int sbit LED=P10;\/\/延时 void DelayMS(uint x){ uchar i;while(x--){ for(i=0;i<120;i++);} } \/\/主程序 void main(){ while(1){ LED=~LED;Delay...

求一段为51单片机编写的LCD电子时钟的设计,简单就好!高分伺候!
简单的时钟,不用1302即可办到。题目要求的设计已经完成,电路图如下。程序稍长,放在我的百度空间了。可以用百度、网页,进行查找:做而论道 用 LCD1602 显示的时钟 百度一下,即可查到。

51单片机简易电子钟设计。汇编语言编写
#0 CLR PAUSE SETB EA SETB ET1 SETB TR1LOOP: LCALL KEYSEL MOV A,KEYVAL CJNE A,#0FFH,LOOP1 SJMP LOOPLOOP1: CJNE A,#10,LOOP2 ;“ON”启动 SETB TR0 SETB ET0 SETB PAUSE SJMP LOOPLOOP2: CJNE A,#11,LOOP3 ;“=”清零 MOV SEC,#0 MOV MIN,#0 ...

用单片机设计简易计算器
;堆栈需求:1 UDIV: CLR C CLR A MOV R2,A MOV R3,A MOV B,#10H MOVBIT: MOV A,R7;R6、R7中数据左移一位到R2、R3中,C到R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A CLR C ...

用51单片机写一个程序:用定时中断T0T1控制4个数码管显示1...
用51单片机写一个程序:用定时中断T0T1控制4个数码管显示1...分内容转自:《51单片机C语言创新教程》温子祺等著。原理:软件设计方面使用动态驱动数码管的方式,即要保证当数码管显示时的效果没有闪烁的现象出现,亮 度一致,没有拖尾现象。由于人眼对频率大于对24Hz以上的光的闪烁不敏感,这是利用了...

设计一个单片机输入显示系统,要求每按一下按键数码管显示数据加1(数码...
设计一个单片机输入显示系统,要求每按一下按键数码管显示数据加1(数码管初始值为0,9加1 后显示0)...void DelayNms( uint N )\/\/ 利用x、y作简单的自减运算,消耗单片机指令周期,达到延时的目的

我想设计一个单片机C51按键控制发送不同个数脉冲的实验
【脉冲产生电路中方案】由电阻,电容,按键开关和施密特触发器构成。按键一下,输出一个负脉冲,其中电阻R和电容C主要用来去除抖动,对于按键的效果尤为重要。取VCC=5V ,对于R,C的选择必须满足按键 闭合后,能使电容C充电到VT+以上,从而使施密特触发器输出翻转 。其电路的结构为:...

贡山独龙族怒族自治县13018542577: 基于单片机的智能电子密码锁怎么做 -
致庙丹莪: //实例80:矩阵式键盘实现的电子密码锁 #include<reg51.h> //包含51单片机寄存器定义的头文件 sbit P14=P1^4; //将P14位定义为P1.4引脚 sbit P15=P1^5; //将P15位定义为P1.5引脚 sbit P16=P1^6; //将P16位定义为P1.6引脚 sbit P17=P1^7...

贡山独龙族怒族自治县13018542577: 如何利用51单片机设计一个电子密码锁系统 -
致庙丹莪: 用单片机最小系统,外扩一个4*4矩阵键盘,再加一个显示设备,蜂鸣器,就可以设计出一个密码锁系统了.

贡山独龙族怒族自治县13018542577: 求51单片机C语言编的简易密码锁程序 -
致庙丹莪: 首先得说明我这个可是自己原创手打的,但是没去仿真了,程序可能有错误,你自己修改下吧 #include<reg52.h> typedef unsigned char uchar; typedef unsigned int uint;sbit key1=P0^0; sbit key2=P0^1; sbit key3=P0^2; sbit key4=P0^3;sbit wela=...

贡山独龙族怒族自治县13018542577: 求单片机简单密码程序! -
致庙丹莪: 这个简单.就象手机,开屏时,按圆圈连起来一样 要用个循环语句,一直扫描键盘输入.有输入就付给一个变量,连起来.最后和123原密对照

贡山独龙族怒族自治县13018542577: 用at89c51单片机制作密码锁,8位密码,用键盘操作,有一个清屏按键,密码正确PASS错误FALL -
致庙丹莪: 使用类似手机的阵列键盘,12个按键就足够了,只需要用到3X4,七个端口.在就是弄个液晶显示器.这个是最简单的一个单片机系统了.

贡山独龙族怒族自治县13018542577: (80C51单片机)设计4*4键盘及8位数码管显示构成的电子密码锁.的C语言程序. -
致庙丹莪: 4*4矩阵键盘检测程序(新手用),本程序用于检测4*4矩阵按键,先检测是否有按 键按下,如果有按键按下,由P1口读出相应的编码值,由P0经两片74HC573输出给8位数码管,P2^0位选,P2^1段选,P1接4*4矩阵按键#include #include //头文...

贡山独龙族怒族自治县13018542577: 基于ATMEL52单片机的密码锁程序
致庙丹莪: 思路应该是用52单片机连个i2c接口的存储器芯片+个液晶屏显示密码+按键 存储器芯片存储密码,上电的时候单片机从存储器读出设置的密码,单片机判断按键是否按对密码,显示屏就提示正确,不然就是错误,其实很简单的.

贡山独龙族怒族自治县13018542577: 求用80c51单片机做一个简单的4位或6位密码锁的c程序,不需要很复杂,简单的就行 -
致庙丹莪: 有例子 自己设计个键盘电路 再用EEPROM存密码 每次开机核对一下 再转入程序

贡山独龙族怒族自治县13018542577: 求单片机电子密码锁的程序设计??? -
致庙丹莪: 这是我写的一个关于火灾报警的小程序的密码锁部分,我想这里面的大部分东西你都可以借鉴.你只要稍微做一些修改... 说明:我用得到的器件----凌阳单片机,lcd(128*64),256(e2prom)蜂鸣器,7279. 主要地方我给你家上了注释,如果还有...

贡山独龙族怒族自治县13018542577: 用单片机AT89C51 简易密码锁+流水灯设计 -
致庙丹莪: #include<reg51.h> #define uchar unsigned char #define uint unsigned int void delay(uint); void main(void) {uint i; uchar temp; uint jwhile(1){if(P3^0==0){if(P3&0X1E==0x04;){temp=0x01;for(i=0;i<4;i++){P1=~temp;delay();//自己写延...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网