技术标签: 单片机
设计要求:
1) 通过程序预先设置4位数字作为开锁密码
2) 按键为0~9数字键、退位键、开锁键等,用4位数码管显示输入的数字
3) 先通过按钮输入4位密码,再按开锁键;如密码正确,绿色指示灯亮,锁打开;密码错误,红色指示灯亮,蜂鸣器报警,一秒钟后停止。连续3次密码错误,红色指示灯闪烁5秒,蜂鸣器报警(另一种频率的声响)
4) 连续3次输入密码错误,系统锁定,可设定为30秒后自动解锁或通过输入管理员密码解锁
电路组成:5V电源+51单片机最小系统+LCD1602显示屏+4*4矩阵键盘+无源蜂鸣器
1602LCD驱动
/*----------------------------------------------- ���ƣ�LCD1602 ���Ŷ������£�1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK ------------------------------------------------*/ #include "1602.h" #include "delay.h" #define CHECK_BUSY sbit RS = P2^4; //����˿� sbit RW = P2^5; sbit EN = P2^6; #define RS_CLR RS=0 #define RS_SET RS=1 #define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0 #define EN_SET EN=1 #define DataPort P0 /*------------------------------------------------ ��æ���� ------------------------------------------------*/ bit LCD_Check_Busy(void) { #ifdef CHECK_BUSY DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80); #else return 0; #endif } /*------------------------------------------------ д������� ------------------------------------------------*/ void LCD_Write_Com(unsigned char com) { while(LCD_Check_Busy()); //æ��ȴ� RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR; } /*------------------------------------------------ д�����ݺ��� ------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) { while(LCD_Check_Busy()); //æ��ȴ� RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; } /*------------------------------------------------ �������� ------------------------------------------------*/ void LCD_Clear(void) { LCD_Write_Com(0x01); DelayMs(5); } /*------------------------------------------------ д���ַ������� ------------------------------------------------*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { while (*s) { LCD_Write_Char(x,y,*s); s ++; x++; } } /*------------------------------------------------ д���ַ����� ------------------------------------------------*/ void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) { LCD_Write_Com(0x80 + x); } else { LCD_Write_Com(0xC0 + x); } LCD_Write_Data( Data); } /*------------------------------------------------ ��ʼ������ ------------------------------------------------*/ void LCD_Init(void) { LCD_Write_Com(0x38); /*��ʾģʽ����*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*��ʾ�ر�*/ LCD_Write_Com(0x01); /*��ʾ����*/ LCD_Write_Com(0x06); /*��ʾ����ƶ�����*/ DelayMs(5); LCD_Write_Com(0x0C); /*��ʾ�����������*/ }
文章浏览阅读909次,点赞16次,收藏14次。在信息抽取任务上,GPT还落后于专用的有监督模型; 对于困难的任务,落后的更多;提出使用软匹配更准确的评估效果;对鲁棒性和错例进行了分析
文章浏览阅读1.9w次,点赞25次,收藏19次。《未来对话:激进AI崛起,探索国内CHATGPT,开启超智!》文章聚焦于中国国内的一股激进AI力量,正是这股力量将开启我们对CHATGPT和GPT-4的全新探索。博客生动地描绘了中国国内ChatGPT项目,这个引人注目的力量直面全球AI竞技场,成为“全球第一直接对标ChatGPT ja GPT-4的顶级力量”。文章详细介绍了该项目独具的技术优势,突显了其在智能对话领域的卓越性能。通过独特技术手段,开发者成功打造了一个与ChatGPT及GPT-4直接竞争的系统,标志着中国在全球AI领域的引领地位。
文章浏览阅读6.8k次,点赞28次,收藏186次。IC验证的经验总结 ----IC验证工程师的“易筋经” 有人认为我验证做得很牛,也有人认为我的验证早就丢下了;有人认为我发现了各个项目的不少问题,也有人认为我在CMM库的几百个问题单大部分属纯净水。 好吧,无论怎样,我还是把我在验证中如何发现和定位Bug的思路稍微描述总结一下,纯属灌水。以前华仔曾经叫我写过一次,我随手写了一点点,这次还是详细一点吧,主要分几点:视..._ic验证经验《总结我的思路-如何在验证中发现和定
文章浏览阅读2.5k次。Ubuntu AUbuntu Bubuntu A IP:192.168.43.49ubuntu B IP:192.168.43.11方法一:使用pjsua1. 进入目录pjsip-apps/binubuntu A: ./pjsua-x86_64-unknown-linux-gnuubuntu B发起呼叫: ./pjsua-x86_64-unkno_pjsua2 点对点sip电话 二次开发
文章浏览阅读2.4k次。嵌入式系统开发学习:(载自:http://blog.csdn.net/leoocn/archive/2008/02/26/2121703.aspx) 随着现代社会信息化进程的加快,嵌入式系统被广泛的地应用于军事、家用、工业、商业、办公、医疗等社会各个方面,表现出很强的投资价值。从国际范围来看,作为数字化电子信息产品核心的嵌入式系统目前其硬件和软件开发工具市场已经突破2000亿美元,嵌入式系统带来的全球工业年产值更是达到了一万亿美元,随着全_嵌入式系统需要开发版配合,本课程将使用何种开发版?搜寻开发版图形标出重要名称?
文章浏览阅读1.7k次。该篇主要介绍使用flask如何实现用户注册登录功能,使用SQLAlchemy操作数据库,密码进行动态加密解密验证,以及基本登录逻辑和表单提交,项目中用到的东西前几篇都有介绍,如有不足请留言指出谢谢1. 项目结构2. HTML页面登录页面 login.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>登录</title._登陆密码加密是动态的 如何做登录器
文章浏览阅读5.1k次。从QListWidget中删除选中的QListWidgetItem QList list = ListWidget->selectedItems(); if(list.size() == 0) return; QListWidgetItem* sel = list[0]; if (sel) { int r = ListWidget->row(_qlistwidget删除自定义item
文章浏览阅读102次。1、li 45 300.0chang 30 200.0chang2、#includestruct students{char sid[100];char name[100];float score[3];}student;void main(){ int i; float j;printf("\nPlease input sid: ");scanf("%s",student...._"(\"\\naverage:\")"
文章浏览阅读142次。1. XSS(跨站脚本攻击):XSS是一种网络攻击,攻击者通过在目标网站中注入恶意脚本,使得用户在访问被注入脚本的页面时,恶意脚本在用户的浏览器中执行,窃取用户的敏感信息。此外,我们还尝试了不同的XSS攻击方式,发现反射型和存储型攻击都能够成功。2. SQL注入:SQL注入是一种针对数据库的攻击手段,攻击者通过在输入字段中注入SQL代码,使数据库执行非预期的查询或命令,从而窃取、篡改或删除数据。SQL注入实验:在SQL注入实验中,我们发现当用户在搜索框中输入特定的SQL代码时,数据库会返回非预期的结果。
文章浏览阅读2.3k次。压缩图片方法_c#图片压缩到1m大小不变
文章浏览阅读4.1k次,点赞2次,收藏19次。一、安装Anaconda二、进入Anaconda Prompt三、指令操作conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --set show_channel_urls yes(连接清华镜像)接下来安装TensorFlow:1)创建环境(环境名为:tensorflow(可以自己设置))conda create -n te.._清华镜像安装tensorflow
文章浏览阅读524次。在原理图方面,我们对驱动器的电路结构进行了详细的分析,包括功率电路、控制电路和保护电路等方面。雷塞HBS86H 86闭环电机驱动器是一种混合伺服电机驱动器,其内置了86型电机的闭环控制系统,可以实现非常高的精度和控制性能。为了更好地理解雷塞HBS86H 86闭环电机驱动器的工作原理和设计方案,我们对其进行了详细的原理图、PCB设计以及代码方面的分析。其中,我们将重点放在信号传输的可靠性和抗干扰性上,并采用了多种技术手段,如隔离、屏蔽等,保障了驱动器的稳定性和可靠性。原理图+PCB+代码。_hbs86手册