当前位置: 首页 > 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.jsqmd.com/news/987996/

相关文章:

  • RK3566-OS11自动更新时区
  • 2026年6月最新版黑河第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • 2026年6月最新版湖州第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • 腾讯云Redis与自建方案技术经济性对比 - 领先技术探路人
  • Unity毛发系统常见问题解决:10个常见错误与修复方法
  • CodeX Docs配置指南:轻松自定义你的免费文档系统
  • 188数码管新版本,简单易懂
  • 2026北京公司注册代办机构专业度排行:5家主流机构实测对比(附精准选型指南) - 互联网科技品牌测评
  • 2026年 内蒙建筑膜/家具贴膜/居家隔热防晒膜TOP5推荐:专业防晒隔热与隐私保护膜品牌实力精选! - 品牌发掘
  • LLM Cursor Rules开源项目贡献指南:如何参与这个AI编程规则库
  • 如何快速掌握QMK固件:机械键盘爱好者的完整入门指南
  • 3分钟快速上手RollToolsApi:免费API接口的完整使用指南
  • 2026北京公司注册代办机构实测排行:合规性+效率双维度对比(附避坑指南) - 互联网科技品牌测评
  • Pixelle-Video终极指南:5个简单步骤让AI自动生成专业短视频
  • Lune测试与调试:单元测试、集成测试与性能分析完全指南
  • 重力场模型计算的布格重力异常值用于一、二等水准重力异常改正计算
  • pinche_xcx商业变现模式分析:拼车小程序的7大盈利策略
  • 2026年 男士衬衫推荐榜:纯棉短袖衬衫/休闲商务衬衫,质感与版型俱佳之选 - 品牌发掘
  • 为什么选择Step-Audio-EditX?解析3B参数RL模型的核心技术优势
  • MediaManager元数据集成终极指南:3步完成TMDB与TVDB自动化配置
  • 题解:学而思编程 降雨统计
  • LLPlayer语言学习播放器终极指南:从零到精通掌握AI学习工具
  • 2026年6月最新版合肥第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • 2026澳洲本地留学移民机构口碑排行 附避坑指南及FAQ - 互联网科技品牌测评
  • 2026深圳同城搬家服务推荐:当日达、响应快、不加价的5家正规搬家机构 - 从来都是英雄出少年
  • 2026年6月最新版贺州第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • 武汉变压器回收公司排行:5家合规服务商盘点 - 起跑123
  • 2026年6月最新版广元第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • Triton Inference Server自动扩缩容与负载均衡:生产环境最佳实践
  • 2026年广东喜糖/结婚喜糖/深圳混合喜糖/婚庆喜糖/高端喜糖/宴会喜糖推荐榜:吉佬王、爱哆哆、双囍品牌口碑与甜蜜之选 - 品牌发掘