结果图:

4.png (839.58 KB, 下载次数: 5)

2020-10-17 20:57 上传

一、目的概述(收集相关资料、选设计方案、电路设计):

本设计是以STC89C52单片机为控制核心的电子密码锁,属于单片机的应用。做本设计有助于对单片机矩阵键盘,数码管以及串行通信原理的深入了解。电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐。

系统设计方案为:

(1)系统设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。

(2)密码可由用户自己设定,在开锁状态下,用户可自行修改密码。

(3)具有自动报警功能,密码输入错误时,报警由扬声器发出“滴滴”报警声。而密码输入正确则是“叮咚”声。

系统设计结构图:

屏幕截图 2020-10-17 205131.png (26.31 KB, 下载次数: 4)

2020-10-17 20:52 上传

本设计由主控芯片51单片机,单片机时钟电路,键盘,数码管组成。单片负责控制整个系统的控制执行过程。开锁成功由数码管显示OPEN,以及蜂鸣器“叮咚”表示,开锁失败由数码管显示Err,以及蜂鸣器“滴滴”表示。

二、实验原理图

电路设计:

2.png (180.44 KB, 下载次数: 1)

2020-10-17 20:54 上传

1.png (96.78 KB, 下载次数: 3)

2020-10-17 20:54 上传

程序设计:(只展示核心部分)

主程序

1.  //4×4 键盘及8 位数码管显示构成的电子密码锁

2.  void main() //主程序

3.  {

4.      uchar key;

5.      Timer0_Init();

6.      while(1)

7.      {

8.          key = KeyScan();

9.          password(key);

10.     }

11. }

核心程序:数码管的动态扫描显示

12. void Display()

13. {

14.     uchar i;

15.     Segment_sel=0x00;//消隐

16.     switch(i)    //位选,选择点亮的数码管,

17.     {

18.         case(0):

19.             LSA=0;LSB=0;LSC=0; break;

20.         case(1):

21.             LSA=1;LSB=0;LSC=0; break;

22.         case(2):

23.             LSA=0;LSB=1;LSC=0; break;

24.         case(3):

25.             LSA=1;LSB=1;LSC=0; break;

26.         case(4):

27.             LSA=0;LSB=0;LSC=1; break;

28.         case(5):

29.             LSA=1;LSB=0;LSC=1; break;

30.     }

31. }

核心程序:矩阵键盘的扫描输入

32. uchar KeyScan()

33. {

34.     for(i=0;i<8;i++)

35.     {

36.         P1 = P1Pin[ i];

37.         Button = P1;

38.         if(Button != P1Pin[ i])

39.         {

40.             Delayms(5);

41.             Button = P1;

42.             if(Button != P1Pin[ i])

43.             {

44.                 KeyState=1;

45.                 key8 = Button;

46.             }

47.             while(Button != P1Pin[ i])

48.             { Button = P1; }

49.         }

50.     }

51.     switch(key8)

52.     {

53.         case 0x77:{key = 1;break;}

54.         case 0x7b:{key = 2;break;}

55.         case 0x7d:{key = 3;break;}

56.         case 0xb7:{key = 4;break;}

57.         case 0xbb:{key = 5;break;}

58.         case 0xbd:{key = 6;break;}

59.         case 0xd7:{key = 7;break;}

60.         case 0xdb:{key = 8;break;}

61.         case 0xdd:{key = 9;break;}

62.         case 0xeb:{key = 0;break;}  //0

63.         case 0x7e:{key = 10;break;}  //÷

64.         case 0xbe:{key = 11;break;}  //×

65.         case 0xde:{key = 12;break;}  //+

66.         case 0xee:{key = 13;break;}  //-

67.         case 0xed:{key = 14;break;}  //=

68.         case 0xe7:{key = 15;break;}  //ENTER

69.         default:{key = 0xff;break;}

70.     }

71.     return key;

72. }

核心程序:输入密码以及校对和处理

73. void password(uchar key)//0~9 数字键,10 输入密码,11 设置密码,12 删除上一个数,13 重新输入 15 确定

74. {

75.     uchar i=0;

76.     if(KeyState==1)

77.     {

78.         switch(state)

79.         {

80.             case 0:

81.             {

82.                 if(key == 10)

83.                 {

84.                     state = 1;

85.                     LSA=1;LSB=1;LSC=1;

86.                     Segment_sel=0xff;  //显示8

87.                 }

88.                 else if(key == 11)

89.                 {

90.                     state = 2;

91.                     LSA=1;LSB=1;LSC=1;

92.                     Segment_sel=0xfd;  //显示P

93.                 }

94.                 break;

95.             }

96.             case 1:

97.             {

98.                 if(key>=0 && key <= 9)  //输入

99.                 {

100.                     InPassword[5]=InPassword[4];

101.                     InPassword[4]=InPassword[3];

102.                     InPassword[3]=InPassword[2];

103.                     InPassword[2]=InPassword[1];

104.                     InPassword[1]=InPassword[0];

105.                     InPassword[0]=smgduan[key];

106.                     KeyState=0;

107.                 }

108.                 else if(key == 15)  //确定

109.                 {

110.                     if(Compare(InPassword))

111.                     {

112.                         for(i=17;i<23;i++)

113.                             InPassword[ i]=smgduan;

114.                         Delayms(1000);

115.                     }//open

116.                     else

117.                     {

118.                         for(i=23;i<27;i++)

119.                             InPassword[ i]=smgduan;

120.                         Delayms(1000);

121.                     }//err

122.                 state = 0;

123.                 }

124.                 else if(key == 13)  //重新输入

125.                 {

126.                     for(i=0;i<6;i++)

127.                         InPassword[ i] = 0xff;  // 全亮

128.                     Delayms(1000);

129.                     state = 0;

130.                 }

131.                 break;

132.             }

133.     else//如果没有按键按下

134.     {

135.         if(state == 0)

136.         {

137.             Segment_sel= 0x00;// 不显示

138.         }

139.     }

140. }

C语言代码51hei下载地址:

电子密码锁程序.zip

(1.79 KB, 下载次数: 52)

2020-10-17 20:59 上传

点击文件名下载附件

下载积分: 黑币 -5

电子密码锁程序C语言,基于51单片机的电子密码锁程序相关推荐

  1. 万年历设计单片机c语言,基于51单片机的电子万年历的设计

    基于51单片机的电子万年历的设计(论文9400字) 功能要求 1. 万年历能用数码管显示阳历年.月.日.星期.[小]时.分.秒并设置指定时间的闹铃. 2. 数字式温度计要求测温范围-50~100°C, ...

  2. 51单片机电机测速程序c语言,基于51单片机光电编码器测速.doc

    基于51单片机光电编码器测速 PAGE PAGE 2 课程设计报告 课程名称: 微机原理课程设计 题 目: 基于51单片机的光电编码器测速 摘要 光电编码器是高精度位置控制系统常用的一种位移检测传感器 ...

  3. 声控灯程序C语言,基于51单片机的声控灯设计设计-包含完整设计与指导文件.doc...

    基于51单片机的声控灯设计设计-包含完整设计与指导文件 工 学 院 毕 业 设 计(论文) 题 目:基于单片机的智能光控路灯的设计 专 业: 机电技术教育 班 级: *** 姓 名: *** 学 号: ...

  4. 声控灯程序C语言,基于51单片机的声控灯的设计.doc

    PAGE 3 基于51单片机的声控小灯 电子信息工程技术信息工程系 电子信息工程技术 信息工程系 年 10 月 20 日 诚 信 声 明 本人郑重声明:所呈交的毕业设计文本和成果,是本人在指导老师的指 ...

  5. 电子密码锁课设单片机c语言,基于51单片机的电子密码锁综合课程设计

    5.大容量片内EEPROM,擦写次数10万次以上 EEPROM,擦写次数10万次以上,擦写次数10万次以上 6.ISP/IAP,在系统可编程/在应用可编程,无需编程器/仿真器 7.共8通道10位高速A ...

  6. 避障机器人程序c语言,基于51单片机小车寻迹、避障源程序(注释很详细)

    /* * 作者:赵新 * 功能:实现小车躲避障碍,通过检测三个方向的距离,选择最大距离转弯 * 日期:2015/3/14 * 说明:STC89c52RC,12MHz * 注意:1000ms和100ms ...

  7. 智能窗帘定时程序c语言,基于51单片机的智能窗帘程序设计

    #include #include #define uchar unsigned char                // 以后unsigned char就可以用uchar代替 #define u ...

  8. 基于51单片机的电子血压温度计(单片机健康检测系统设计)proteus仿真设计(仿真+程序+演示视频)

    基于51单片机的电子血压温度计proteus仿真设计 (仿真+程序+演示视频) 仿真图proteus 8.9 程序编译器:keil 5 编程语言:C语言 设计编号:S0026 演示视频: 51单片机的 ...

  9. c51单片机时钟c语言程序设计,基于51单片机的电子时钟设计..doc

    -- I -- - - I -- 设计题目: 基于 51 单片机的电子时钟设计 摘要 单片机,是集 CPU ,RAM ,ROM ,定时器,计数器和多种接口于一体的微控制器.自 20 世纪 70 年代问 ...

  10. 51单片机八人抢答器c语言,抢答器 - 基于51单片机 - 8人有程序较完整.doc

    抢答器 - 基于51单片机 - 8人有程序较完整 课程题目: 基于单片机---8路抢答器 学 院: 职业技术学院 专 业: 电子信息科学与技术 年 级: 091 学 号: 0920020088 学生姓 ...

最新文章

  1. pytorch Bert 情感分类
  2. 白话Elasticsearch70-ES生产集群部署之production mode下启动时的bootstrap check
  3. python django model定义
  4. JVM调优:GC标记清除回收算法
  5. 三十年TCP与七年QUIC 谁才是未来?
  6. java求数组的最小值_JAVA编程求数组最大值和最小值
  7. 【高并发】JUC底层工具类Unsafe
  8. PHP模板引擎smarty详细介绍
  9. Django常用命令
  10. mysql dateofweek_日历表-月的周数
  11. 086-Python生成Wifi二维码 一扫联网
  12. 658. 一元二次方程公式
  13. JNDI全攻略(一)
  14. JavaScript弹性透明的图片放大代码
  15. python训练Word2Vec词向量
  16. wxpython制作excel表格_怎么做一个精美的excel表格
  17. 播放器实战07 av_read_frame与av_seek_frame
  18. android studio 中配置groovy源码_麻省理工教程:使用Unity AR Foundation在AR中查看模型...
  19. python爬虫小说教程_python制作小说爬虫实录
  20. my fav html

热门文章

  1. 1959年第一台电子计算机,1、 一般认为,世界上第一台电子数字计算机诞生于______。 A.1946年 B.1952年 C.1959年 D.1962年...
  2. Excel 日期时间格式讲解
  3. 计算机硬件知识调查表,计算机硬件的调研报告(精).docx
  4. 人再囧途之泰囧.BD高清1280国语中英双字 附下载地址
  5. 戴珊接替蒋凡,掌管淘宝天猫,阿里太子已被废?
  6. 【TypeScript】使用CRA创建支持TS的React项目(从踩坑到放弃)
  7. Android扩展知识 - 减轻C盘压力,扩大C盘空闲容量
  8. 怎么压缩PNG图片的大小?如何对PNG图片进行压缩
  9. android崩溃日志 2016,常用获取Android崩溃日志的几种方法
  10. 无法获得 VMCI 驱动程序的版本: 句柄无效解决