资源描述
资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。
课 程 设 计( 论文)
课程名称 单 片 机
题目名称简易密码锁的设计
学 院 高等技术学院
专业班级 高 1 1 0 9
学 号 3869
学生姓名 刘 欢
指导教师 胡 立 强
11月 28 日
目录
一, 任务目的………………………………………………………3
二, 任务要求………………………………………………………3
三, 电路与元器件…………………………………………………4
四, 程序设计………………………………………………………5
五, 程序运行测试…………………………………………………6
六, 任务小结………………………………………………………7
七, 心得体会………………………………………………………8
八, 参考文献………………………………………………………9
1.任务目的
经过对具有四个按键输入和一个数码管显示的简易密码锁的设计与制作, 让读者理解C语言中数组的基本概念和应用技术, 并初步了解单片机与键盘和LED数码管的接口电路设计及编程控制方法。
2.任务要求
在一些智能门控管理系统, 需要输入正确的密码才能开锁。基于单片机控制的密码锁硬件电路包括三部分: 按键、 数码显示和电控开锁驱动电路, 三者的对应关系如图表3.16所示。
表3.16 简易密码锁状态
按键输入状态
数码管显示信息
锁驱动状态
无密码输入
—
锁定
输入与设定密码相同
P
打开
输入与设定密码不同
E
锁定
简易密码锁的基本功能如下: 4个按键, 分别代表数字0,1,2,3: 密码在程序中事先设定, 为0-3之间的一个数字; 上电复位后, 密码锁初始状态为关闭, 密码管显示符号”—”; 当按下数字键后, 若与事先设定的密码相同, 则数码管显示字符”P”, 打开锁, 3秒后恢复锁定状态, 等待下一次密码的输入, 否则显示字符”E”持续3秒, 保持锁定状态并等待下次输入。
3.电路与元器件
根据任务要求, 用一位LED数码管作为显示器件, 显示密码锁的状态信息, 数码管采用静态连接方式; 4个按键连接到P0口的低四位P0.0-P0.3引脚, 设P0.0连接数字”0”按键、 P0.1连接数字”1”按键, 依次类推; 锁的开、 关电路用P3.0控制的一个发光二极管代替, 发光二极管点亮表示锁打开, 熄灭表示锁定。根据以上分析, 采用如图3.21所示的连接电路。
图3.21 简易密码锁电路
简易密码锁电路所需元器件清单如表3.17所示。
元器件名称
参数
数量
元器件名称
参数
数量
插座
DIP40
1
电阻
103
1
单片机
AT89SC51
1
电解电容
22UF
1
晶体振荡器
12MHZ
1
弹性按键
5
瓷片电容
30PF
2
电阻
511
9
LED数码管
共阳极数码管
1
电阻
102
4
发光二级管
1
4.程序设计
程序设计思路: 主程序主要负责按键输入、 密码比较判断与显示处理。设初始密码关闭, 显示符号为”—”。当按下数字键后, 若与预先设计的密码相同则显示”P”, 打开锁, 过3秒后恢复锁定状态, 等待下一次密码输入; 否则显示”E”持续3秒, 保持锁定状态并等待下一次密码输入。
LED数码管采用共阳极显示方式, 密码设定为”2”。
程序流程图如图3.22所示
简易密码锁主程序
初始显示/关闭锁
Y
0#键按下了吗?
N
Y
1#键按下了吗?
N
2#键按下了吗?
显示”P”并开锁
N
Y
3#键按下了吗?
N
显示”E”
图3.22 简易密码锁的程序流程图
程序如下
#include<reg51.h>
Sbit p3_0=p3^0;
void delay(unsigned int i);
void main()
{
unsigned char buttion;
unsigned char code tab[7]={0xc0,0xf9,0xa4,0xb0,0xbf,0x86,0x8c};
p0=0xff;
while(1){
p1=tab[4];
p3_0=1;
button=p0;
button&=0x0f;
switch (button)
{case 0x0e: p1=tab[0];delay(400);p1=tab[5];dealy(1200);break;
case 0x0d: p1=tab[1];delay(400);p1=tab[5];dealy(1200);break;
case 0x0b: p1=tab[2];delay(400);p1=tab[6];p3_0=0;dealy(1200);break;
case 0x07: p1=tab[3];delay(400);p1=tab[5];dealy(1200);break;
}
}
}
void delay(unsigned int i)
{
unsigned int k ;for(k=0;k<I;k++);
}
5.程序运行测试
( 1) 输入并编译源程序
( 2) 将程序下载到密码锁电路的单片机中
( 3) 接通电路板电源, 观察初始显示符号”—”是否正确, 锁是否关闭( 发光二级管灭) 。
( 4) 分别按下各数字键, 根据LED数码管显示及二极管的亮灭, 判断结果是否正确。
6.任务小结
本任务采用MSC51系列的单片机实现了简易密码锁功能。电路中使用了4个独立式按键
实现密码输入, 用一个LED数码管显示密码锁的状态, 让读者初步了解了单片机与键盘和数码显示管接口电路设计及编程控制方法。
在ex3_10.c程序中, 使用了名为tab的无符号字符数组, 定义如下:
Unsigned char code tab [7]={0xc9,0xf9,0xa4,0xb0,0xbf,0x86,0x8c};
该数组包含7个分量tab[0]、 tab[1]…..tab[6], 数组名为tab, 表示数组的地址, 即数组的第一个分量tab[0]所在的地址。在这个数组定义语句中, 关键字”code”是为了把tab数组存储在片内程序存储器ROM中, 该数组与程序代码一起固化在程序存储器中。
7.心得体会
单片机课程设计是的做的第三个课程设计, 在设计过程中, 遇到了很多困难, 但最终我还是坚持了下来, 虽然实现的功能有些单一, 可是自己付出了努力, 还是有些收获的首先经过这次课程设计, 让我比较全面而且系统的回顾了有关单片机的知识, 对于以前老师在讲课过程中听的似懂非懂的知识, 进一步加深了理解。其次, 对于自己已经了解和掌握的东西能够在实践中应用, 把抽象的东西具体化。对于编程软件keil的应用也更加的熟练。在设计中, 也有自己好多迷糊和不懂的东西, 这些是在课堂上和书本中没有的, 因此只好采用在图书馆查看资料和上网查询的方法把这些问题一一解决。可是由于时间有限, 这次的设计最大的遗憾就是实现的功能太少了, 原来是想加个
计数器密码错误输入三次就会出现报警, 可是最终没有实现。不过并不可惜和遗憾, 因为单片机课程设计的结束不是我学习单片机知识的结束, 假期就要到了, 这段时间我会花更多的时间和经历用在单片机上, 争取学以致用。课程设计完成后, 我最大的感受就是勤奋加上实践才能有所收获。
8, 参考文献
[1] 王新颖、 李贞主编《单片机原理及应用》北京大学出版社
[2]江志红主编《51单片机技术与应用系统开发案例精选》清华大学出版社
[3]陈权昌、 李兴富主编《单片机原理及应用》华南理工大学出版社
展开阅读全文