赞
踩
源文件:http://www.jh-tec.cn/archives/7104
之前讲了密码锁,接下来讲一下类似的超市存包密码柜,本次设计的方式是存包之后会自动随机生成一个密码,下次取包的时候输入该密码即可完成取包。
0.本系统采用STC89C52作为单片机
1.显示器采用的是LCD1602液晶,作为人机交互界面,显示密码输入情况
2.按键采用的是矩阵键盘,具有取包 存包 清楚 确认以及数字按键等功能
3.系统采用两个LED作为密码指示灯,红灯亮起表示密码错误,绿灯亮起表示密码正确
4.采用DC002作为电源接口可直接输入5V给整个系统供电
5.电磁锁是通过继电器来控制
以下是整体仿真图,矩阵键盘作为输入,具有蜂鸣器和LED作为声光报警器,采用一路继电器作为模拟密码柜的闭合和开启。
#include <reg51.h> #include <intrins.h> #include <stdlib.h> #include <string.h> #include<absacc.h> #include "lcd1602.h" #include "main.h" #include "key.h" sbit Lock = P3^7; //代表锁控的继电器IO 高电平关锁,低电平开锁 sbit LEDRED = P2^0; //代表密码输入错误的红灯IO 高电平熄灭,低电平点亮 sbit LEDGREEN = P2^1; //代表密码输入正确的绿灯IO 高电平熄灭,低电平点亮 sbit beep=P1^5; uchar genPasswd[4]; //存储生成的四位随机数密码 uchar inpPasswd[4]; //存储取包时输入的四位密码 uchar code welcome[8]="welcome"; //开机显示的欢迎标语 uchar code set[7]="Passwd"; //显示生成的密码标题 uchar code close[12]="close door!"; //提示关门 uchar code input[13] = "input passwd"; //提示请输入密码 /****************定时器设置相关的变量***********************/ unsigned char TL0_temp; /*暂存TL0的初值*/ unsigned char TH0_temp; /*暂存TH0的初值*/ #define INT_CLOCK 10 /*INT_CLOCK为定时值,单位为ms ,此处定义为10ms*/ #define CRY_FREQUENCY 11059200 /*CRY_FREQUENCY为晶振频率,单位为Hz*/ /*延时程序*/ void delay(uint z) { unsigned int i,j; for(i=0;i<z;i++) for(j=0;j<100;j++); } /****************************** 显示首页 welcome ******************************/ void display1() { unsigned char i; for(i = 0;i < 7;i++) { wr_com(0x85+i); wr_dat(welcome[i]); } } /************************************ 显示密码生成界面 ************************************/ void display2() { unsigned char i; for(i = 0;i < 6;i++) { wr_com(0x85+i); wr_dat(set[i]); } for(i = 0;i < 4;i++) { wr_com(0xc6+i); wr_dat(genPasswd[i]+0x30); } } /************************************ 显示请关门界面 ************************************/ void display3() { unsigned char i; for(i = 0;i < 11;i++) { wr_com(0x83+i); wr_dat(close[i]); } } /************************************ 显示密码输入界面 ************************************/ void display4() { unsigned char i; for(i = 0;i < 12;i++) { wr_com(0x82+i); wr_dat(input[i]); } for(i = 0;i < 4;i++) { wr_com(0xc6+i); wr_dat(inpPasswd[i]+0x30); } } /*********************************** 定时器0初始化 ***********************************/ void Timer0_init() { unsigned long T0_temp; /*暂存T0的初始值 */ T0_temp = 65536-((INT_CLOCK *CRY_FREQUENCY /1000)/12); /*T0初始值计算公式,参考教科书*/ TL0_temp = T0_temp & 0xff; TH0_temp = T0_temp >> 8; TL0 = TL0_temp; TH0 = TH0_temp; TMOD |= 0x01; TR0 = 1; /*开定时器0中断*/ ET0 = 1; EA = 1; /*开总中断*/ } /*主函数*/ uchar global_state = 0; uchar count_num = 0; //输入的数字个数 void main() { uchar i,j; uchar passwd;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。