当前位置: 首页 > news >正文

项目三简易计算器 任务3-6六位密码锁2

任务描述:单片机连接8位共阳极数码管和4*4矩阵键盘,
编程完成六位密码校验,结果正确显示“HELLO”,结果错误显示“ERROR。

一次扫描,多次记录。会造成空翻。所以需要key4(),释放。

strcmp函数用于字符串比较:

首先必须要有头文件 #include<string.h>,其次字符串必须是ASCII码(比较对象)。

可加双引号"字符串",将其转换为ASCII 码(0~9任意一个数加上48等于其对应的ASCII码)。

可加单引号'字符',将单个字符转换为ASCII 码。

/************************* 项目名称:项目三简易计算器 任务名称:任务3-6六位密码锁2 任务描述:单片机连接8位共阳极数码管和4*4矩阵键盘, 编程完成六位密码校验,结果正确显示“HELLO”,结果错误显示“ERROR” *************************/ #include<reg51.h> #include<intrins.h> #include<string.h> //51单片机寄存器定义头文件 sbit row0=P1^0; sbit row1=P1^1; sbit row2=P1^2; sbit row3=P1^3; sbit col0=P1^4; sbit col1=P1^5; sbit col2=P1^6; sbit col3=P1^7; int n;//存放按键编号0~9数字,10-确认 int t;//记录用户输入密码和位数(平铺记录密码) char pass1[10];//存放用户输入的密码 char pass2[]="240423";//系统预存密码 int m1[]={0x89,0x86,0xc7,0xc0};//HELO int m2[]={0x86,0x88,0xc0,0x88};//EROR int dis[2];//存放结果的十位和个位 int seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定义0~9共阳极七段码 void key1();//等待按键按下,无限查询 void key2();//扫描按键位置,行列扫描 void key3();//处理按键请求,显示编号 void key4();//等待按键释放,防止空翻(一次按键,多次生效) void display();//显示HELLO或者ERROR /**********************************************/ void delay(int i) { int k,j; for(k=0;k<i;k++) for(j=0;j<100;j++); } /**********************************************/ void main() { while(1) { key1(); key2(); key3(); key4(); } } /**********************************************/ void key1() { while(1) { P1=0x0f; if(P1!=0x0f)//有变化,一定是有按键按下,导致某行某列短路 delay(10);//延时10毫秒,去掉按键抖动 if(P1!=0x0f) break;//退出查询 } } /**********************************************/ void key4() { while(1) { P1=0x0f; if(P1==0x0f)//某行某列短路消失,按键释放 delay(10);//延时10毫秒,去掉按键抖动 if(P1==0x0f) break;//退出查询 } } /**********************************************/ void key2() { P1=0xff;//行列都写1 col0=0;//清零0列 if(row0==0) n=0; if(row1==0) n=1; if(row2==0) n=2; if(row3==0) n=3; P1=0xff;//行列都写1 col1=0;//清零1列 if(row0==0) n=4; if(row1==0) n=5; if(row2==0) n=6; if(row3==0) n=7; P1=0xff;//行列都写1 col2=0;//清零2列 if(row0==0) n=8; if(row1==0) n=9; if(row3==0) n=10;//确认键:保存用户输入密码,键值10 } /**********************************************/ void key3() { if(n<10)//按下数字键,显示数字 { P2=0xfe;//1111 1110 P0=seg[n]; pass1[t]=n+48;//保存本次用户输入密码的ASCII值 t++; } else//按下等号键 display();//显示两位结果 } /**********************************************/ void display() { int i,j; while(1) { for(i=0,j=0xf7;i<4;i++)//0111 1111 { P2=j; if(strcmp(pass1,pass2)==0)//字符串比较函数校验多位密码 P0=m1[i];//取HELLO else P0=m2[i];//ERROR delay(5); j=_cror_(j,1); } } }

效果:

新增:只能试错三次,第一次输入错误后,显示eror,三秒后消失,按键可以重复输入,重复三次,三次后若还错,锁定。若输入正确,则显示helo,且不变。

/************************* 项目名称:项目三简易计算器 任务名称:任务3-6六位密码锁2 任务描述:单片机连接8位共阳极数码管和4*4矩阵键盘, 编程完成六位密码校验,结果正确显示“HELLO”,结果错误显示“ERROR” *************************/ #include<reg51.h> #include<intrins.h> #include<string.h> //51单片机寄存器定义头文件 sbit row0=P1^0; sbit row1=P1^1; sbit row2=P1^2; sbit row3=P1^3; sbit col0=P1^4; sbit col1=P1^5; sbit col2=P1^6; sbit col3=P1^7; int n;//存放按键编号0~9数字,10-确认 int t;//记录用户输入密码和位数(平铺记录密码) int m=3; char pass1[10];//存放用户输入的密码 char pass2[]="240423";//系统预存密码 int m1[]={0x89,0x86,0xc7,0xc0};//HELO int m2[]={0x86,0x88,0xc0,0x88};//EROR int dis[2];//存放结果的十位和个位 int seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定义0~9共阳极七段码 void key1();//等待按键按下,无限查询 void key2();//扫描按键位置,行列扫描 void key3();//处理按键请求,显示编号 void key4();//等待按键释放,防止空翻(一次按键,多次生效) void display();//显示HELLO或者ERROR /**********************************************/ void delay(int i) { int k,j; for(k=0;k<i;k++) for(j=0;j<100;j++); } /**********************************************/ void main() { while(1) { key1(); key2(); key3(); key4(); } } /**********************************************/ void key1() { while(1) { P1=0x0f; if(P1!=0x0f)//有变化,一定是有按键按下,导致某行某列短路 delay(10);//延时10毫秒,去掉按键抖动 if(P1!=0x0f) break;//退出查询 } } /**********************************************/ void key4() { while(1) { P1=0x0f; if(P1==0x0f)//某行某列短路消失,按键释放 delay(10);//延时10毫秒,去掉按键抖动 if(P1==0x0f) break;//退出查询 } } /**********************************************/ void key2() { P1=0xff;//行列都写1 col0=0;//清零0列 if(row0==0) n=0; if(row1==0) n=1; if(row2==0) n=2; if(row3==0) n=3; P1=0xff;//行列都写1 col1=0;//清零1列 if(row0==0) n=4; if(row1==0) n=5; if(row2==0) n=6; if(row3==0) n=7; P1=0xff;//行列都写1 col2=0;//清零2列 if(row0==0) n=8; if(row1==0) n=9; if(row3==0) n=10;//确认键:保存用户输入密码,键值10 } /**********************************************/ void key3() { if(n<10)//按下数字键,显示数字 { P2=0xfe;//1111 1110 P0=seg[n]; pass1[t]=n+48;//保存本次用户输入密码的ASCII值 t++; } else//按下等号键 display();//显示两位结果 } /**********************************************/ void display() { int i,j; int num=100; int flag; m--; if(strcmp(pass1,pass2)==0) flag=0; else flag=1; while(num-- |flag==0 |m==0)//无限显示结果,按键失效 { for(i=0,j=0xf7;i<4;i++)//1111 0111 { P2=j; if(flag==0)//字符串比较函数校验多位密码 P0=m1[i];//取HELLO else P0=m2[i];//ERROR delay(5); j=_cror_(j,1); } } P2=0xff; t=0; }
http://www.gsyq.cn/news/1499738.html

相关文章:

  • 2026年6月最新版湖州第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • 2026年6月最新版黑河第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • CodeX Docs配置指南:轻松自定义你的免费文档系统
  • LLM Cursor Rules开源项目贡献指南:如何参与这个AI编程规则库
  • 如何快速掌握QMK固件:机械键盘爱好者的完整入门指南
  • Pixelle-Video终极指南:5个简单步骤让AI自动生成专业短视频
  • Lune测试与调试:单元测试、集成测试与性能分析完全指南
  • LLPlayer语言学习播放器终极指南:从零到精通掌握AI学习工具
  • 2026年6月最新版德州第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • Android11下APK调用USB serialn每次开机弹窗问题
  • JBrowserDriver vs 传统浏览器驱动:为什么纯Java无头方案更适合自动化测试?
  • TanStack Ranger:打造现代化滑块组件的终极无头UI解决方案
  • sublime-phpcs与版本控制集成:提交代码前自动检查的实现方法
  • 2026年6月最新版固原第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • 2026深圳拆装搬家服务专业服务商推荐:家具/空调/热水器专业拆移搬迁一站式服务 - 从来都是英雄出少年
  • 扎根青岛24年!本土老牌防水楼长修楼真实测评 - 青岛防水品牌推荐
  • 邮件配置与测试:awesome-checker-services邮件相关检查工具完全手册
  • Baserow企业级无代码平台:生产环境架构解析与高性能部署指南
  • RPCS3终极指南:如何通过开源模拟器在PC上完美运行PS3游戏
  • vue表格使用 vxe-table 展开行实现产品列表与明细列表
  • Obsidian效率工具:Claudian插件的批量操作技巧
  • 如何让Continue成为你的AI编程搭档:从入门到精通的完整指南
  • 儿童益智玩具市场持续增长!国内十大新款竹蜻蜓厂家综合实力盘点(附选型建议) - 企师傅推荐官
  • MuJoCo肌腱系统深度解析:从生物力学建模到工程实践
  • 2026年6月最新版定西第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • Point Cloud Utils终极指南:5个专业技巧实现高效3D点云处理
  • 2026年6月最新版东莞第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • 2026年郑州航空港区搬家公司权威分析:专业服务深度解析与选择指南 - 品研笔录
  • 如何用Mermaid.js快速绘制专业图表:从入门到精通的完整指南
  • 2026上海爱马仕包包回收推荐:首选收的顶当面鉴定高价收 - 奢侈品回收评测