掌握单片机I/O接口的工作原理及编程使用方法

设计要求根据单片机开发板所提供的元件特性和硬件电路,编写相关的程序,通过实验开发板实现电子密码锁在LCD1602上显示的功能。设计说明书内容11(1)键盘测试在带有单片机的电路板上编程调试3*3矩阵键盘,使其在液晶上显示出键盘锁对应的数字及功能。

(2)如果密码输入正确,绿色LED会亮起,表示解锁,1602上的设计手册内容2会显示“you are right!”,等待修改密码。 (3) 当密码输入错误时,会显示“密码错误”,然后给您第二次、第三次输入密码的机会。 如果密码错误3次,则会发出“叮咚”警报声,并且红色警报指示灯不亮。 停止闪烁,按复位按钮清除报警。 (4)按“7”键,表示如果不小心输入了密码,可以删除输入错误的密码。 (5) 按“6”更改密码。 您需要输入的原始密码是正确的。 然后按此键后,蓝色密码更改指示灯会亮起,1602上会显示“输入新密码”。如果输入正确,会要求您重新输入。 2. 提示“修改正确!!!” 第一次输入相同号码后会出现 并返回主菜单。 当两次不一致时,提示“修改错误!!!” 然后返回主菜单。 2、硬件设计方案演示系统整体主要分为五个模块,分别由单片机最小系统、矩阵键盘、液晶显示器、报警系统、指示灯电路等组成。微机系统的作用是处理外部输入的数据。 显示电路显示需要操作的步骤并指导用户。 当密码输入错误时,报警电路发出警告报警。 系统可完成开锁、密码输入错误报警、删除密码、修改用户密码等基本密码锁功能。

如果根据实际实验板情况,还可以增加远程控制和断电保护功能。 总体方案设计 本设计具体总体模块设计方案如下图(1)(1)硬件总体方案模块框图设计规范内容3 具体模块方案的设计1、主控芯片方案选择方案1:采用硬件电路设计电子密码锁,如采用74LS112双JK触发器组成的数字逻辑电路控制方案。 该方案可以实现基本功能,优点是不需要软件编程,但电路连接复杂,关键是自己设置密码不太方便。 要求。 方案2:单片机中的STC89C51是8位可编程控制器,具有高性能、低功耗的优点。 核心具有丰富的指令集和32个通用工作寄存器,可以通过软件编程实现电子密码锁各方面的设计。 要求和功能,单片机的I/O口充足,硬件电路连接也比较简单。 基于以上程序演示,选择STC单片机的STC89C51作为本电子密码锁系统设计的主控芯片,完成输入数据的采集、处理并发出相应的指令。 2.键盘模块选项选项1:可以选择独立连接的键盘。 对于独立连接的键盘,每个按键都独立连接一条数据线。 正常情况下,所有数据线都接高电平。 当按下任意键时,与其连接的数据线将被拉动。 进入低水平。 这种方案在处理多个数据时,在编程和硬件连接电路上会比较复杂。

方案2:选择矩阵行列式键盘作为输入模块。 矩阵键盘由行线和列线组成。 键位于行和列的交叉点。 行和列分别连接到按键开关的两端。 列线通过上拉电阻连接到高电平。 当没有按钮动作时,柱线处于高电平状态; 当按下按钮时,交点处的行线和列线连接,列线电平状态将由与该行线连接的行线电平决定。 这次通过键盘输入的数值种类较多,矩阵键盘节省了大量的I/O口,适合按键数量较多的场合。 综上所述,根据本设计中的单片机实验板,我们选择使用3*3矩阵键盘来完成密码值的输入。 该键盘的功能简单实用,如下图(2)所示。 设计手册内容 4 图(2)矩阵键盘 3.显示模块方案方案一:采用LCD1602作为主液晶显示器。 这种液晶屏可以输入两行字母或者数字,功能比较简单,用途广泛。 本设计中需要显示密码的数据值以及各个功能的提示。 采用LCD1602液晶作为显示模块更加直观。 如图(3)所示,显示更加直观。 图(3)LCD1602显示方案二:利用数码管实时显示输入密码的值。 由于密码数量为6个,硬件电路连接电路比较复杂,连接引脚也比较复杂。 有很多,观看起来并不清晰直观。 综合以上两种方案的比较,本设计采用方案一。 4、报警模块方案一:用1602显示特殊数字或字母来指示输入的密码是否正确。 这个解决方案也可以用视觉来表达。

设计手册内容5 方案2:利用声光双重效果报警。 如果密码输入错误,报警灯会闪烁,蜂鸣器会报警,从而可以从多个角度发出密码错误报警。 经过以上分析比较,采用方案2的声光报警来指示开锁失败,如图(4) 图(4)报警电路设计 5、报警解除模块 该模块最少使用复位功能微控制器的系统,这样可以省钱。您还可以通过移除I/O引脚来重新开始输入密码。 该模块中蜂鸣器的作用是,当用户输入错误密码超过3次时,蜂鸣器会发出声音,键盘将被锁定。 电路原理图如下:如图(5) 图(5)复位电路 3、软件设计 软件设计主要包括主程序模块、键盘扫描模块、LCD1602 显示模块、密码比较模块、解锁程序模块、主程序主程序模块主要完成LCD初始化、检查是否有按钮按下、调用显示、密码修改程序等。主程序流程图如图(6)所示。 设计规范内容 6. 设计规范内容 7. 图(6)主程序框图。 设计规范内容 8.开锁程序模块 开锁程序流程图如图(8)所示。 图(7)解锁子程序模块 LCD1602 显示模块 本系统采用LCD1602 来实现显示。 参考LCD1602手册进行初始化和编程显示,即在编程中添加LCD1602驱动程序。

这里的驱动主要包括:初始化函数、设置显示坐标、写字符函数和写字符串函数。 时钟界面显示运行时间。 密码锁定界面主要显示提示信息和输入的密码。 当然,当输入密码数字时,输出并不显示数字,而是换成“*”显示。 LCD1602的部分读写控制时序程序如下图(8)所示: 设计规范内容9 图(8)LCD1602初始化键盘扫描处理模块。 该模块具有的功能有:逐列扫描键盘上按键的具体位置,判断键盘上按键是否按下,消除抖动,判断关闭的按键是否松开等功能。 该模块使用case语句来判断按键是否被按下。 方法是:依次向行线发送低电平,然后检查所有列线。 状态,如果全部为1,则按下的按键不在本列; 如果不是全1,则按下的按键一定在这一列,并且是与零电平行线交点处的按键。 首先将值fe赋给P2端口,然后扫描P2端口,然后与f8相与,看是否相等。 如果相等,则不按下任何键。 如果不相等,则有按键按下,然后判断它在哪一列。然后执行按键处理函数。 处理函数流程图如图(9)所示。 设计手册内容 10. 图(9)关键功能程序 4. 系统调试 调试部分采用先单独调试各单元模块,整定后再进行。 整机调试方法,提高调试效率。 设计手册内容 11 (1)键盘测试:用单片机对电路板上的3*3矩阵键盘进行编程调试,使液晶屏上显示键盘锁对应的数字和功能。

使用仿真器调试成功后,通过编程器将程序写入芯片进行调试。 (2)报警及开锁控制电路测试。 通过矩阵键盘控制输入正确的开锁密码,锁灯会亮起; 当连续3次输入错误密码时,报警指示灯闪烁,蜂鸣器报警,键盘被锁定。 (3)显示电路测试采用电位器调节1602液晶屏的对比度和背光,使其工作在最合适的状态。 所有功能模块调整完毕后,进行整机调试。 流程如下:将调整好的功能模块连接在一起,用函数信号发生器模拟电压信号,先用模拟器代替STC89C51单片机进行模拟调试,对各个功能进行模拟调试。 检测芯片的片选和启动,并测试数据线。 调试成功后,将程序写入单片机进行调试。 软件调试部分(1)KEI编程、仿真、编译集成环境KEILUV3:将汇编语言源程序编译成*.hex文件。 (2)STC-ISP-Downloader:将C语言源程序编译出来的*.hex文件在线下载到STC单片机中。 (3)使用说明: (一)双击该图标,出现下图。 12 设计手册内容(二)选择您需要的单片机型号; (三)打开“”文件; (四)选择你的串口,这里选择COM1; (五)点击下载/下载,实现自动下载编程。 调试结果分析本系统以STC89C51为核心部件,采用软件模块化编程,通过键盘控制和液晶显示实现密码锁定功能和报警功能,并能防止多次密码尝试,能够实现本设计课题的基本要求。

设计时,根据实验板的硬件连接,尽量使硬件电路简单稳定,减少电磁干扰等环境干扰,充分发挥软件编程的优势,减少因元件精度不够而带来的误差。 本设计成功模拟了1602液晶显示、密码“*”设置、密码设置、防止多次尝试、报警等功能。 并且程序采用C语言编写,具有很强的可移植性,方便对系统的增删改查。 在设计过程中我也遇到了很多困难。 比如我对LCD1602的具体功能不太熟悉,就在图书馆和网上查找相关资料进行编程,对其功能模式有了进一步的了解。 还有一个3*3键盘扫描程序的编程,利用所学的4*4键盘编程的原理和方法,使用case语句来编程。 由于时间有限以及本人知识水平的限制,这个系统还存在一些不完善的地方,实际应用中还有很多具体的细节需要解决。 例如:扩展AT2402模块存储密码、红外报警检测技术、密码指纹识别技术、语音识别技术、图像识别技术等。只有这样才能更好地满足社会的发展和人们的需求。 5.仿真结果各模块的仿真结果如下图所示。 设计规范内容13(10)欢迎界面图(11)输入密码界面设计规范内容14(12)解锁界面图(13)修改密码界面设计规范内容15图(14)密码修改成功界面图(15)报警界面设计手册 内容 16 六、设计经验 本次培训为期两周,分为三个阶段:一是做电路仿真和原理图;二是做电路仿真。 二、焊接单片机实验板; 第三,调试电路硬件。

每一步都做得很仔细。 这是首次将模拟应用于实践。 我感觉自己收获很多。 一般一次性成功的板子很少,必须经过调试和错误检查才能得到一块完整的电路板。 这次我做了一个电子密码锁和液晶显示屏。 原理看似简单,但过程却让我深深感受到,无论多么简单的电路图,理论与实践还是有一定差距的。 参考书上的原理图经过亲自改进,使功能更加完善,尤其是程序的调试,需要花费很多时间,也是最困难的部分。 我们的最终目标是应用而不是理论结果。 我们学习的理论知识是比较高级的,但是因为我们通常不会将知识付诸实践。 通过这次设计,培养了我的创新意识和综合素质,更好地掌握了电子产品设计和生产的技术和流程,提高了我的个人基本能力、实验设计能力、独立工作能力。 我的基础知识变强了,可以看图了。 、能焊接、能安装、能测量、能验资。 7.参考文献[1]杭和平. 微控制器原理与应用。 北京:机械工业出版社,2008[2]李朝庆。 单片机原理与接口技术。 北京:航天出版社,2009[3]宋彩丽。 微控制器原理与应用。 C51编程[M]. 西安交通大学出版社,2007 附录一 Proteus 仿真图设计规范内容 17 设计规范内容 18 附录二 物理显示设计规范内容 19 附录三 源程序 #include #define ulong unsigned long #define uint unsigned int #define uchar unsigned charuchar temp,num,flag,r;uchar code table1[]="欢迎光临!(^_^)";//主界面 uchar code table2[]="liu hai yan DIY";//主界面 uchar code table3[] ="*****";//密码显示“*****” uchar码 table4[]="code is error!";//密码错误显示uchar码 table5[]="you都对!";//第二次开锁,uchar码 table6[]="第二次!";//第二次开锁,uchar码 table7[]="最后一次! ";//第三次开锁显示uchar码 table8[]="输入新密码:";//修改密码显示uchar码 table9[]="呼叫….";//报警显示uchar码 table12[ ]="修改正确!!!";//正确修改密码 uchar 码 table10[]="password:";//输入密码 uchar 码 table11[]="";//删除密码并显示 uchar 码table13[]="Input Again:";//再次输入密码 uchar code table14[]="修改错误!!!";//修改密码错误 uchar init_pswd[6]={0,1,2,3, 4,5};//初始化密码 uchar pswd[6 ]={0}; //放入新修改的输入密码 sbit lcdrs=P1^0; //LCD数据/命令(H/L)选择端子 sbit lcdrw=P1^1;sbit lcden=P1^2; //LCD使能 sbit P1_3=P1^3;//解锁指示灯 sbit P1_4=P1^4;//更改密码指示灯 sbit P1_5=P1^5; //报警指示灯sbit P2_7=P2^7; // 蜂鸣器设计手册内容20/************************************************ * 函数声明*/void delay(uint z);void init();//初始化子函数 void write_com(uchar com);//写指令子函数 void write_data(uchar dat1);//写数据子函数function uint keyscan( );void mima();//密码处理子函数 void mima1(); //修改密码 function void Alarm(uchar t);//报警函数/******************** **************** ******************LCD驱动*/void init(){ lcden=0; write_com(0x38) ; //设置1602显示,5×7点阵显示,8位数据接口 write_com(0x0e); //00001DCB、D(开关显示)、C(是否显示光标)、B(光标闪烁、光标不显示) write_com(0x06 ); //000001N0, N(地址指针+-1) write_com(0x01); //清屏命令必须在每次显示下一个屏幕时清屏 write_com(0x80); //第一行显示 }void write_com (uchar com) //写命令子函数 {lcdrs=0;//低电平选择为写命令 lcdrw=0;P0=com; //向P0口写入命令delay(5); lcden=1; //打开使能延时(5); //读取命令lcden=0; //关闭enable}void write_data(uchar dat1) //写数据子函数 {lcdrs=1;//高电平选择写数据设计规范内容 21lcdrw=0;P0=dat1;//写数据到P0口delay( 5);lcden=1; //启用延迟(5); //读取数据lcden=0; //关闭Enable}void delay(uint z)//延时子函数z*1ms { uint x,y;for(x=z;x>0;x–)for(y=110;y>0; y- -);}uint keyscan()//键盘扫描程序 {P2=0xfe;//选择第一行第一 temp=P2; 温度=温度&0xf8; //列线全为1,行线为0 while(temp!= 0xf8){delay(15); // 延迟去抖 temp=P2; 温度=温度&0xf8; while(temp!=0xf8){ temp=P2;switch(temp) //判断哪一列被按下 {case 0xf6:num =0;flag=1;break;//第一列按下 case 0xee:num=1; flag=1;break;//第二列按case 0xde:num=2;flag=1;break;//按第三列} while(temp!=0xf8) {temp=P2; temp=temp&0xf8;设计手册内容22 }}}P2=0xfd; //选择第二行,列线为1temp=P2;temp =temp&0xf8;while(temp!=0xf8){delay(15); 温度=P2; 温度=温度&0xf8; while(temp!=0xf8){temp=P2; switch(temp) //判断哪一列被按下 {case 0xf5 :num=3;flag=1;//在第一列按下break;case 0xed:num=4;flag=1;//在第二列按下break column;case 0xdd:num=5;flag=1;//在第三列按break;}while(temp!=0xf8) {temp=P2; 温度=温度&0xf8; }} }P2=0xfb;//选择第三行 temp=P2;temp=temp&0xf8;while(temp !=0xf8) 设计规范内容 23 {delay(15);temp=P2;temp=temp&0xf8;while(temp! =0xf8){temp=P2;开关(temp){ case 0xf3:num=6;flag=1; 中断;情况 0xeb:num=7;flag=1;break;情况 0xdb:num=8;flag=1;break;}while(temp!=0xf8) { temp=P2;temp=temp&0xf8; }}}返回(数字); }void main(){ uchar m=0,w=0;init(); //LCD初始化 write_com(0x80); //第一行显示 for(r=0;r=6)//密码正确 { P1_3=0; //解锁指示灯长亮 keyscan();while(flag==1&&num==6);//是否更改密码 mima1(); //修改密码函数}else//密码不正确{ m= 0;write_com(0x80+0x40);//显示第二行 for(r=0;r=6){ P1_3=0; mima1();//修改密码函数}else{ m=0;write_com(0x80+ 0x40);for(r=0;r=6){P1_3=0;//如果密码正确,解锁指示灯亮点亮mima1();//密码修改函数}else{ init();write_com(0x80+0x40); for(r=0;r=6)//密码正确{ init();for(r=0;r

读书已经结束了。 如果要下载到电脑上请使用积分(如何获得积分)

掌握单片机I/O接口的工作原理及编程使用方法

单片机

PLC与单片机的差别应该是什么?有什么区别?

2024-1-27 3:03:21

单片机

单片机实训报告该如何写呢?实训

2024-1-27 4:02:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索