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

中小型网站开发湘潭响应式网站建设 磐石网络

中小型网站开发,湘潭响应式网站建设 磐石网络,东莞建设工程招标网,.net网站目录 一、基本功能简介 1.四位密码锁 2.输入密码 3.删除已经输入一位数字 4.删除已经输入的所有数字 5.确认密码 二、进阶功能介绍 1.输入错误密码#xff0c;进行锁机操作 2.执行开锁步骤#xff0c;并可以自定义开锁后展示内容 3.重新设定密码 三、模块化代码和主代…目录 一、基本功能简介 1.四位密码锁 2.输入密码 3.删除已经输入一位数字 4.删除已经输入的所有数字 5.确认密码 二、进阶功能介绍 1.输入错误密码进行锁机操作 2.执行开锁步骤并可以自定义开锁后展示内容 3.重新设定密码 三、模块化代码和主代码 1.LCD1602初始化代码 2.LCD1602初始化代码调用.h 3.延时函数 4.延时函数调用.h 5.矩阵按键初始化代码 6.矩阵按键初始化代码.h 7.主函数 四、设备和原理图 1.LCD1602 2.STC89C52 3.矩阵键盘模块 4.Keil5界面 一、基本功能简介 1.四位密码锁 默认密码为1201小彩蛋*1后续可自由修改密码。 2.输入密码 按下不同按键输入相应的数字最多输入四位输入少于四位使用0补全 按键与数字对应表 按键数字S11S22S33S44S55S66S77S88S99S100 if(KeyNum10)//如果S1~S10按键按下输入密码{if(InputCount4){Password* 10;Password KeyNum%10;InputCount;//1~9/101~9//10/100 }LCD_ShowNum(2,1,Password,4);} 3.删除已经输入一位数字 按下按键S12删除已经输入的一位数字。 if(KeyNum12) //如果S12按下删除已经输入的一位密码{Password Password/10;InputCount--;LCD_ShowNum(2,1,Password,4);} 4.删除已经输入的所有数字 按下按键S13删除已经输入的四位数字。 if(KeyNum13) //如果S13按下删除已经输入的所有密码{Password 0;InputCount0;LCD_ShowNum(2,1,Password,4);LCD_ShowString(2,1,****); } 5.确认密码 按下按键S11确认将输入的数字与密码比较。 相同则显示PASS。 不同则会显示xx秒后重试倒计时阶段类似锁机不能进行操作。 if(KeyNum11) //如果S11按键按下时确认输入密码并且与已保存的密码进行比较{if(Passwordsecret){LCD_ShowString(1,13,PASS);Password0; //密码清零InputCount0; //输入计数清零LCD_ShowNum(2,1,Password,4);LCD_ShowString(2,1,****); state1;}else{/*每输入错一次增加5秒的等待时间变量ErrorCount记录累计输错次数变量InputCount控制每次只能输入4位密码*/ LCD_ShowString(1,11,ERROR );LCD_ShowString(2,1,****);ErrorCount;LCD_ShowString(1,1,AFTER );LCD_ShowNum(1,8,ErrorCount*5,4);LCD_ShowString(1,13,S);LCD_ShowString(2,1,AND TRY AGAIN);state0;for( iErrorCount*5;i0 ; i-- )//for循环一秒刷新一次倒计时{LCD_ShowNum(1,8,i,4);Delay(1000);}Password0; //密码清零InputCount0; //计数清零LCD_ShowString(1,1,Password: );LCD_ShowString(2,1,**** ); }} 二、进阶功能介绍 /* 第一次独自开发这类项目代码逻辑和格式可能有点混乱。 不过功能都测试过啦没问题的还请多多包涵。 */ 1.输入错误密码进行锁机操作 每输入错误一次增加5秒的锁机时间倒计时每秒刷新显示剩余锁机时间 图例累计输入错误三次 for( iErrorCount*5;i0 ; i-- )//for循环一秒刷新一次倒计时{LCD_ShowNum(1,8,i,4);Delay(1000);} 2.执行开锁步骤并可以自定义开锁后展示内容 按下按键S11确认将输入的数字与密码比较。 相同则显示PASS并且更改状态state1。 当密码输入正确的时候状态变更为1未输入时和密码输入错误是仍然为0 再按下按键S14执行开锁步骤 自定义展示开锁内容小彩蛋*1 /*两个条件都满足才能触发||两个条件任一满足都可以触发前面正确输入密码并且按下按键14执行类似开锁的步骤*/if(KeyNum14 state1) {LCD_ShowString(1,1, OPEN ); LCD_ShowString(2,1,Waiting... ); Delay(2000);LCD_ShowString(2,1, );LCD_ShowString(1,1, I LOVE YOU! );//可以自定义LCD屏幕的显示内容彩蛋在此Delay(2000);LCD_ShowString(1,1,Password: );LCD_ShowString(2,1,**** ); } 3.重新设定密码 按下按键S15                      加载 进入重新设定密码的界面 if(KeyNum15) //如果S15按下执行重新输入密码的操作{ Password0; //密码清零InputCount0; //输入计数清零state0;LCD_ShowString(1,1,RESET Password ); LCD_ShowString(2,1,Waiting... ); Delay(2000); LCD_ShowString(1,1, );LCD_ShowString(2,1, ); LCD_ShowString(1,1,NEW Password );LCD_ShowString(2,1,**** ); } 输入新的四位密码不输入默认密码为4个0 在此之后按下S16 显示新密码0226已经修改成功 if(KeyNum16)//如果S16按下重新设定密码并且显示新密码{secretPassword;Password0;InputCount0;LCD_ShowString(1,1, );LCD_ShowString(2,1, ); LCD_ShowString(1,1,NEW Password );LCD_ShowString(2,1,CHANGED ); LCD_ShowNum(2,9,secret,4); Delay(2000);LCD_ShowString(1,1,Password: );LCD_ShowString(2,1,**** ); } 三、模块化代码 1.LCD1602初始化代码 #include REGX52.H//引脚配置 sbit LCD_RSP2^6; sbit LCD_RWP2^5; sbit LCD_ENP2^7; #define LCD_DataPort P0//函数定义 /*** brief LCD1602延时函数12MHz调用可延时1ms* param 无* retval 无*/ void LCD_Delay() {unsigned char i, j;i 2;j 239;do{while (--j);} while (--i); }/*** brief LCD1602写命令* param Command 要写入的命令* retval 无*/ void LCD_WriteCommand(unsigned char Command) {LCD_RS0;LCD_RW0;LCD_DataPortCommand;LCD_EN1;LCD_Delay();LCD_EN0;LCD_Delay(); }/*** brief LCD1602写数据* param Data 要写入的数据* retval 无*/ void LCD_WriteData(unsigned char Data) {LCD_RS1;LCD_RW0;LCD_DataPortData;LCD_EN1;LCD_Delay();LCD_EN0;LCD_Delay(); }/*** brief LCD1602设置光标位置* param Line 行位置范围1~2* param Column 列位置范围1~16* retval 无*/ void LCD_SetCursor(unsigned char Line,unsigned char Column) {if(Line1){LCD_WriteCommand(0x80|(Column-1));}else if(Line2){LCD_WriteCommand(0x80|(Column-10x40));} }/*** brief LCD1602初始化函数* param 无* retval 无*/ void LCD_Init() {LCD_WriteCommand(0x38);//八位数据接口两行显示5*7点阵LCD_WriteCommand(0x0c);//显示开光标关闪烁关LCD_WriteCommand(0x06);//数据读写操作后光标自动加一画面不动LCD_WriteCommand(0x01);//光标复位清屏 }/*** brief 在LCD1602指定位置上显示一个字符* param Line 行位置范围1~2* param Column 列位置范围1~16* param Char 要显示的字符* retval 无*/ void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char) {LCD_SetCursor(Line,Column);LCD_WriteData(Char); }/*** brief 在LCD1602指定位置开始显示所给字符串* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param String 要显示的字符串* retval 无*/ void LCD_ShowString(unsigned char Line,unsigned char Column,char *String) {unsigned char i;LCD_SetCursor(Line,Column);for(i0;String[i]!\0;i){LCD_WriteData(String[i]);} }/*** brief 返回值X的Y次方*/ int LCD_Pow(int X,int Y) {unsigned c;char i;int Result1;for(i0;iY;i){Result*X;}return Result; }/*** brief 在LCD1602指定位置开始显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~65535* param Length 要显示数字的长度范围1~5* retval 无*/ void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length) {unsigned char i;LCD_SetCursor(Line,Column);for(iLength;i0;i--){LCD_WriteData(Number/LCD_Pow(10,i-1)%100);} }/*** brief 在LCD1602指定位置开始以有符号十进制显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围-32768~32767* param Length 要显示数字的长度范围1~5* retval 无*/ void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length) {unsigned char i;unsigned int Number1;LCD_SetCursor(Line,Column);if(Number0){LCD_WriteData();Number1Number;}else{LCD_WriteData(-);Number1-Number;}for(iLength;i0;i--){LCD_WriteData(Number1/LCD_Pow(10,i-1)%100);} }/*** brief 在LCD1602指定位置开始以十六进制显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~0xFFFF* param Length 要显示数字的长度范围1~4* retval 无*/ void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length) {unsigned char i,SingleNumber;LCD_SetCursor(Line,Column);for(iLength;i0;i--){SingleNumberNumber/LCD_Pow(16,i-1)%16;if(SingleNumber10){LCD_WriteData(SingleNumber0);}else{LCD_WriteData(SingleNumber-10A);}} }/*** brief 在LCD1602指定位置开始以二进制显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~1111 1111 1111 1111* param Length 要显示数字的长度范围1~16* retval 无*/ void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length) {unsigned char i;LCD_SetCursor(Line,Column);for(iLength;i0;i--){LCD_WriteData(Number/LCD_Pow(2,i-1)%20);} } 2.LCD1602初始化代码调用.h #ifndef __LCD1602_H__ #define __LCD1602_H__//用户调用函数 void LCD_Init(); void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char); void LCD_ShowString(unsigned char Line,unsigned char Column,char *String); void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length); void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length); void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length); void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);#endif 3.延时函数 void Delay(unsigned int xms) {unsigned char data i, j;while(xms--){i 2;j 199;do{while (--j);} while (--i);} } 4.延时函数调用.h #ifndef __DELAY_H__ #define __DELAY_H__void Delay(unsigned int xms);#endif 5.矩阵按键初始化代码 #include REGX52.H #include Delay.h /*** brief 矩阵键盘读取按键键码* param 无* retval KeyNumber 按下按键的键码值如果按键按下不放程序会停留在此函数松手的一瞬间返回按键的键码没有按键按下的时候放回0*/ int MatrixKey() {//矩阵扫描按一行或者按一列依次输入扫描要扫描的给0其余给1int KeyNumber0;P10xFF; //默认都是1高电平P1_30;//检测按键按下就是判断是否变成0if(P1_70)//1行1列的按钮1 {Delay(20);while(P1_70){Delay(20);}KeyNumber1; }if(P1_60)//2行1列的按钮5 {Delay(20);while(P1_60){Delay(20);}KeyNumber5; }if(P1_50)//3行1列的按钮9 {Delay(20);while(P1_50){Delay(20);}KeyNumber9; }if(P1_40)//4行1列的按钮13 {Delay(20);while(P1_40){Delay(20);}KeyNumber13; }P10xFF; //默认都是1高电平P1_20;//检测按键按下就是判断是否变成0if(P1_70)//1行2列的按钮2 {Delay(20);while(P1_70){Delay(20);}KeyNumber2; }if(P1_60)//2行2列的按钮6 {Delay(20);while(P1_60){Delay(20);}KeyNumber6; }if(P1_50)//3行2列的按钮10 {Delay(20);while(P1_50){Delay(20);}KeyNumber10; }if(P1_40)//4行2列的按钮14 {Delay(20);while(P1_40){Delay(20);}KeyNumber14; }P10xFF; //默认都是1高电平P1_10; //检测按键按下就是判断是否变成0if(P1_70)//1行3列的按钮3 {Delay(20);while(P1_70){Delay(20);}KeyNumber3; }if(P1_60)//2行3列的按钮7 {Delay(20);while(P1_60){Delay(20);}KeyNumber7; }if(P1_50)//3行3列的按钮11 {Delay(20);while(P1_50){Delay(20);}KeyNumber11; }if(P1_40)//4行3列的按钮15 {Delay(20);while(P1_40){Delay(20);}KeyNumber15; }P10xFF; //默认都是1高电平P1_00;//检测按键按下就是判断是否变成0if(P1_70)//1行4列的按钮4 {Delay(20);while(P1_70){Delay(20);}KeyNumber4; }if(P1_60)//2行4列的按钮8 {Delay(20);while(P1_60){Delay(20);}KeyNumber8; }if(P1_50)//3行4列的按钮12 {Delay(20);while(P1_50){Delay(20);}KeyNumber12; }if(P1_40)//4行4列的按钮16 {Delay(20);while(P1_40){Delay(20);}KeyNumber16; }return KeyNumber; } 6.矩阵按键初始化代码.h #ifndef __MATRIXKEY_H__ #define __MATRIXKEY_H__unsigned char MatrixKey();#endif 四、设备和原理图 1.LCD1602 2.STC89C52 3.矩阵键盘模块 原理图从转载“普中-2普中-3普中-4开发板原理图,非商业用途。 4.Keil5界面 创作不易主函数在主页下载资源内                             【免费】51单片机进阶版密码锁资源-CSDN文库 谢谢大家 小白一枚请多指教                                                                FROM 明月清风mls
http://www.w-s-a.com/news/266124/

相关文章:

  • 做网站怎么调整图片间距织梦做的网站如何去掉index
  • 凡科网免费建站步骤及视频网页设计基础教程第二版课后答案
  • 建设一个旅游网站毕业设计企业网站要更新文章吗
  • 做网站需要简介中山网站设计公司
  • 网站怎么做导航栏微信公众号官网登录
  • 1_ 掌握网站开发的基本流程 要求:熟悉网站开发与设计的基本流程.电子商城网站开发
  • 百度网站怎么建设河北省工程造价信息网官网
  • 阿里云网站模板网页设计的合适尺寸是多少
  • 做小程序和做网站哪个好让别人做网站推广需要多少钱
  • 做外贸的几个网站查询网域名解析
  • 酒泉如何做百度的网站seo研究中心好客站
  • 网站设计建设平台户县做网站
  • 一元云购网站开发wordpress博客空间
  • 深圳高端网站建设公司排名如何搭建局域网服务器
  • 照片管理网站模板高端网站开发哪家好
  • 黄冈网站制作wordpress为什么不能显示域名
  • 做网站设计怎么进企业电子商务网站建设与管理教材
  • 设计广告公司网站建设网站开发技术选择
  • 个人网站教程个人网站有必要备案吗
  • 网站建设推广好做吗黄浦企业网站制作
  • 怎样做28网站代理中山网站建设方案外包
  • vs2010做网站前台搭建小网站
  • 做视频必须知道的一些网站wordpress 标签鼠标滑过_弹出的title 代码美化
  • 怎么做室内设计公司网站电商运营培训视频课程
  • 昆明网站策划天津市建筑信息平台
  • 三亚放心游app官方网站wordpress 个人主题
  • 做简单的网站备案平台新增网站
  • 中国建设网站银行网络营销推广方案整合
  • 网站域名列表dede网站白屏
  • 站长工具一区品牌建设卓有成效