电子密码锁设计说明书_第1页
电子密码锁设计说明书_第2页
电子密码锁设计说明书_第3页
电子密码锁设计说明书_第4页
电子密码锁设计说明书_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微机原理及接口技术课程设计微机课程设计 专业: 通信工程 班级: 1303班 姓名: 丘春华 学号: 3131902220 指导老师: 蔡文培、王亚林 、张国安 时间:2015年12月24日2016年1月6日 目 录一、 设计任务与功能要求 1.1设计课题2 1.2设计目的2 1.3设计任务21.4设计要求3二、总体设计规划与方案论证2.1程序总体编写方法规划32.2方案论证5三、总体软件设计说明及程序总流程图3.1总流程图63.2总体说明7四、系统的资源分配及数据定义说明4.1数据变量定义说明与使用说明74.2定时器中断设置94.3输入输出的硬件分配94.5键盘功能分配9五、局部程序设计方案

2、5.1初始以及自检105.2主流程 11六、系统功能与用户操作使用说明6.1系统的功能186.2操作说明18七、课程设计总结19八、附录源程序21九、硬件原理图44一、设计任务与功能要求1.1设计课题 门禁电子密码锁程序设计1.2设计目的 通过小型微机应用产品的设计与调试过程,运用微机原理及接口技术课程所学的基本知识,在设计中加以应用,进而得到理解、巩固和提高发展,通过实践的过程学习掌握分析与解决实际问题的方法与手段,提高设计、编程与调试的实际动手能力,作为工程技术工作的一次基本训练。1.3设计任务 设计一个以单片机为核心的门禁密码锁。具有密码开锁,不同权限的密码修改、密码输入安全设置、开门时

3、段管理等功能。编程并在单片机实验板上模拟调试实现。1.4设计要求1.4.1基本设计要求1、开机进行接口部件及数码显示器、指示灯、讯响器等自检。2、密码分为管理员密码和用户密码:管理员密码为8位09的数字,而用户密码为6位09的数字。3、设置“0”“9”的数字键及“ESC”和“ENT”等功能键。对按键输入信号须进行软件消抖处理。4、工作模式:(1)常态:数码管显示时钟。(2)开锁模式:需输入6位数字为09的密码进行开锁。密码数字可以由管理员事先设置保存共普通用户使用。(3)管理员操作模式:需输入8位09的密码,可以进行修改用户密码、修改管理员密码、修改进门时段等功能。5、常态下,八位LED 7段

4、数码管显示时钟信息可包括小时、分钟、秒钟。6、只要按下09的数字键则转入开锁状态,每按一个数字键使数码管从左到右逐次显示“”。7、如果输入的密码为6位则和用户密码进行匹配,匹配一致则开锁,如果输入的密码为8位则和管理员密码进行匹配,匹配一致则进入管理员操作模式。8、在密码输入状态下,输入满6位或8位密码数据后,按“ENT”键才能进行密码匹配,如果没满6位或8位数字密码,按“ENT”则不作响应。9、输入的用户密码如果匹配则相应指示灯亮并且电动开门电磁铁线圈通电1S开门后返回常态;如果输入不正确,则提示“E”,3S后返回常态,等待下一轮的密码输入。10、开锁模式下可以按“ESC”键取消开锁模式返回

5、常态。11、管理员操作模式下,管理员可以选择功能,01功能代表设置用户密码、02功能代表重置管理员密码、03功能代表设置进门时间、04功能设置实时钟。利用ESC键返回常态。12、管理员操作模式下,01功能可以设置用户密码,输入新密码时需要进行确认。1.4.2其它扩展功能1、管理员操作模式下,02功能重置管理员密码;2、管理员操作模式下,03功能可以设置进门的开始时间和结束时间。只有在进门时间段输入用户密码才能开锁。如果开始时间和结束时间均设置为00:00,则为全天可以按密码开门;3、管理员操作模式下,04功能实时钟的设置,利用数字3和数字4按键实现对时和分钟的调校,按键操作时实现快调功能;4、

6、如果在开锁模式下12S后没有按键操作则进入常态;5、如果在开锁状态下用户密码输入十次均错误则报警锁键15分钟;6、其他功能扩展。二、总体设计规划与方案论证2.1总体设计规划程序规划分为三个部分:自检和初始化、主循环和中断服务。自检和初始化是在开机和复位时执行,其它时候将不执行此部分。自检是对设备进行检测,初始化对后续的程序执行进行准备。自检包括对数码管,LED指示灯和蜂鸣器的测试。初始化包括调用延时等待芯片退出复位状态和对各数据单元赋初始值的准备。主循环的执行是首先检测状态,然后执行相应的状态模块。主循环里面共有7个状态,分别为常态,设置时间状态,管理员状态,设置用户密码状态,设置管理员密码状

7、态,设置开门时间状态和输入密码状态;每一个状态都对应有一种显示的方式和键盘处理的方式.所以各种状态可以分开独立编写子程序,这将有利于程序的扩展和修改.各个状态的功能简单描述如下:常态时连续读取DS1302中时间的值,写入到液晶LCD1602中,实现程序走时的功能.设置时间状态:由管理员状态按设置时间键进入这个状态,然后控制LCD1602在相应的位置闪烁,提示用户设置的内容,然后获取按键值存入DS1302中,实现时间修改的功能;管理员状态:在常态输入8位密码,校验正确后进入管理员状态,管理员状态可以进一步选择相应的功能.设置用户密码状态:在管理员状态按下设置用户密码键进入这个状态,此时液晶显示用

8、户按键的键值,当密码达到6位时询问用户是否确认修改,按确认键后保存密码至DS1302中永久保存.设置管理员密码状态: 在管理员状态按下设置管理员密码键进入这个状态,此时液晶显示用户按键的键值,当密码达到8位时询问用户是否确认修改,按确认键后保存密码至DS1302中永久保存.设置开门时间状态: 在管理员状态按下设置开门时间键进入这个状态,然后在液晶上显示修改的值,修改完成,保存数据到DS1302提供的30个RAM中,以便后面开门设置时读取的比较.输入密码状态:当在常态时按下09任意一个数字即进入这个状态,然后显示输入密码的个数,输入完成则比较密码,用户密码正确则开门,管理员密码则进入管理员状态.

9、中断服务子程序实现的功能是检测在没有按键按下时,空闲时间的计时。它采用定时器0,方式1的16位定时计数器。只要有中断来临即执行中断子程序对时间进行精准的计时,并改变相应的定时器溢出计数单元,只要有按键被有效按下即将其计数器置零,从新计数,直到计算出12s的时间,便将状态变为常态.这样便实现了长时间无操作进入常态的功能.2.2方案论证2.2.1设置状态功能定义一个内存地址用于存放程序当前状态,然后根据不同的状态对键盘扫描返回的值进行处理,从而实现在同一个按键按下时,实现不同的功能和操作.显示部分也可以根据当前的状态,在液晶中显示相应的提示或功能.这样,对用户体验和程序的模块化设计都带来不小的好处

10、.2.2.2 用DS1302时钟芯片计时DS1302可以实现实时时钟,可对秒,分,时,日,周,月以及闰年补偿的年进行计数,计时精确.它具有高速数据暂存的31*8 RAM数据存储器,可充分利用于存放用户密码,管理员密码和开门时间等数据,这样就不需要额外的数据存储器了.而且它功耗小,引脚少,在2.5-5.5V满度工作范围,这对于备用电源的选用来说是件好事.2.2.3 使用LCD1602 液晶显示器LCD1602可现实16*2排的字符,兼容ASCII编码,能现实英文字符的显示.比起数码管的显示,在功耗和用户体验上极具优势.三、总框图及总体软件设计说明3.1流程图3.1.1程序流程图图3.11注:由于

11、中断部分没有确定的执行位置,所以中断部分在此流程图不作体现3.12状态转换流程图图3.123.2总体说明总体程序分为三个部分:自检和初始化、中断服务子程序、主流程三个部分。自检和初始化是在开机和复位时执行,其它时候将不执行此部分。自检是对设备进行检测,初始化对后续的程序执行进行准备。自检包括对数码管,LED指示灯和蜂鸣器的测试。初始化包括调用延时等待芯片退出复位状态和对各数据单元赋初始值的准备。主循环的执行是首先检测状态,然后执行相应的状态模块。主循环里面共有7个状态,分别为常态,设置时间状态,管理员状态,设置用户密码状态,设置管理员密码状态,设置开门时间状态和输入密码状态;每一个状态都对应有

12、一种显示的方式和键盘处理的方式.所以各种状态可以分开独立编写子程序,这将有利于程序的扩展和修改.四、系统的资源分配及数据定义说明4.1数据变量定义说明与使用说明4.11对各种状态的定义及值得定义如下#define uchar unsigned char/重新定义无符号字符型的描述方式(习惯这样使用)#define NORMAL 0 /常态#define SET_TIME 1/设置时间状态#define MANAGER 2/管理员状态#define CHECK 3/输入密码状态#define CHANGE_MANAGER 4/修改管理员密码状态#define CHANGE_USER 5/修改用户

13、密码状态#define SET_OPEN 6/修改开门时间段状态4.12 对IO口的一些位定义如下:sbit LDE1=P26;/573锁存器1控制位sbit LDE2=P27; /573锁存器2控制位sbit BUZZER=P11;/蜂鸣器位声明,低电平有效sbit TRST=P23;/时钟芯片RST位声明sbit TIO=P24; /时钟芯片TO位声明sbit TSCLK=P25; /时钟芯片CLK位声明sbit p30=P30;/P3口位申明,方便使用sbit p31=P31;sbit p32=P32;sbit p33=P33;sbit p34=P34;sbit p35=P35;sbit

14、 p36=P36;sbit p37=P37;4.13 一些全局变量的定义和使用说明:uchar state = NORMAL;/状态变量,设置初始为常态uchar pa8; /临时存放密码的数组uchar pi=0;/存放密码时的指针uchar time7;/临时存放时间的数组uchar titem = 0; /存放时间的指针uchar irtime = 0; /计数器计数值4.14 LCD1602显示字符串的定义:char code zifu0=USER PASSWPRD;char code zifu1=MANAGER PASSWPRD;char code zifu2=MANAGER MOD

15、E ;char code zifu3=Waiting.;char code zifu4=Welcome!;char code zifu5=OK;char code zifu6=Error;char code zifu7=SURE TO CHANGE?; /询问是否保存密码/时间.char code zifu8=OPEN TIME:;char code zifu9=Can not Open!; /未到开门时段时的用户提示./1602中时间显示的位置,分别是年,月.日.星期,时.分,秒Char code lcdadd=0x83,0x86,0x89,0x8c,0x80+0x40+4,0x80+0x4

16、0+7,0x80+0x40+10;4.2定时器中断设置此次采用定时器0,设定为定时方式1,设置定时器初始值和重装值时的TH0和TL0分别为0x3c,0xb0(65536-20000=0x3cb0),与irtime定时器溢出次数计数变量配合,定时器20000个TM溢出,而irtime变量为240次记满,可实现12秒的计算。使用时设定好初值即可使用。 4.3 输入输出的硬件分配端口作用备注P1控制L0-L8的指示灯。开门和自检时点亮,模拟开门的动作0有效P1.1蜂鸣器,作为告警音和提示音0有效P2.6573锁存器1控制位0有效P2.7573锁存器2控制位0有效P2.3DS1302 RST脚/P2.

17、4DS1302 T0脚/P2.5DS1302 C脚/P1LCD 1602液晶显示器功能脚(连接有573锁存器)/RAM说明备注0xc00xccDS1302中6位用户密码保存的RAM地址0xce0xdaDS1302中8位用户密码保存的RAM地址0xdc0xe2DS1302中4位开门时间保存的RAM地址 (注:DS1302中分配的RAM地址指的是写地址,读地址是写地址加1)表4.314.4键盘功能分配键盘的功能及数字按键分布如下图4.41所示.图4.41五、局部程序设计方案5.1初始化以及自检自检和初始化都是在程序的最前头执行的。对设备进行检查,和对数据的初始化定义。为后续的执行做准备。自检应该包

18、括所有需要显示和指示的输出设备。此次设计中简化了自检,只有写到两个,即蜂鸣器响一秒和LED点亮一秒。这两条自检可以检测出指示灯和告警音的设备是否能正常运作。在自检结束时,全部初始化为无效。避免影响后续程序的进行。初始化包括调用延时,等待各芯片退出复位,和对数据进行初始化。等待各芯片退出复位,这是很重要的部分,芯片如果还未在退出初始化时候,就进行工作,将无法正常实现功能。所以程序的初始都要调用延时,等待各芯片均退出初始化。LCD1602 初始化按照参考手册进行:write_com(0x38);/液晶初始化指令delay(5);write_com(0x38);/液晶初始化指令delay(5);wr

19、ite_com(0x38);/液晶初始化指令delay(5);write_com(0x0C);/光标指令write_com(0x06);/地址移动设定write_com(0x01);/清屏指令对数据的初始化有设置定时器0,为定时工作方式1,给TMOD赋初值0x01,每次溢出的定时计数初始值,设置TH0和TL0分别为0x3c,0xb0,每20000个TM溢出,同时启动定时器0工作的相关内容生效。其他的初始化则是对数据单元进行赋初值,例如置程序初始状态等,都是为了防止后面的程序出错和运行时造成不可预知的影响。5.2主流程主流程的7个状态分别是:常态,输入密码状态,管理员状态,修改时间状态,修改用户

20、密码状态,修改管理员密码状态,修改开门时间状态.常用子程序的设计:1. DS1302读取数据子程序:/*函数功能: DS1302读数据函数入口参数: 数据的地址出口参数: 读取的数据*/unsigned char dsRead(unsigned char add) unsigned char i,date=0;TRST=0;TSCLK=0;TRST=1;delay1(10);/小延时for(i=0;i8;i+)TIO=add&0x01; /数据和地址都是从最低位开始传送delay1(10);TSCLK=1;delay1(10);if(i=1;for(i=0;i8;i+)TSCLK=0;if(T

21、IO=1) /当数据线为高时,证明该位数据为1date|=0x80; /要传输数据的当前值置为1,若不是,则为0delay1(1);TSCLK=1;if(i=1;delay1(10);TRST=0; /关闭数据传输return date;2. DS1302写数据子程序:/*函数功能: DS1302写数据函数入口参数: 写入的地址,写入的数据出口参数:*/void dsWrite(unsigned char add, unsigned char date)unsigned char i;TRST=0;TSCLK=0;TRST=1;delay1(10);for(i=0;i=1;for(i=0;i=

22、1;delay1(10);TRST=0;3. LCD1602写命令子程序:/*函数功能: DS1602液晶写指令子程序入口参数:指令出口参数:*/void write_com(unsigned char com)P0=0x8F;LDE2=1;LDE2=0;P0=com;LDE1=1;LDE1=0;P0=0x0CF;LDE2=1;delay(3);P0=0x08F;LDE2=0;4. LCD1602写数据子程序:/*函数功能: DS1602液晶写数据子程序入口参数: 要显示的数据出口参数:*/void write_date(unsigned char date)P0=0x9F;LDE2=1;LD

23、E2=0;P0=date;LDE1=1;LDE1=0;P0=0x0DF;LDE2=1;LDE2=0;delay(3);P0=0x08F;LDE2=1;LDE2=0;delay(3);5. 按键扫描子程序/*函数功能: 键盘扫描程序入口参数:出口参数: 键值*/char scandKey()/当有键被按下时会返回相应的键值,无键时返回-1uchar tem=0x00;P3=0xf0;tem=P3;tem=tem&0xf0;if(tem != 0xf0)delay(30); /延时消抖动P3=0xf0;tem=P3;tem=tem&0xf0;if(tem != 0xf0)if(tem=0xe0)/

24、第一列P3=0xff;p34=0;if(p30=0)return 1;else if(p31=0)return 4;else if(p32=0)return 7;else if(p33=0)return 16;else if(tem=0xd0)/第二列return -1;6. 延时子程序:/*函数功能: 软件延时函数入口参数: 毫秒数出口参数:*/void delay(unsigned int i) unsigned int a,b;for(a=i;a0;a-)for(b=115;b0;b-);5.2.1、常态常态时显示日期和时间.在这个状态时循环读取DS1302中相应RAM中的值,然后将其显

25、示在LCD1602液晶的固定位置上.这样便实现了走时的功能.效果如下图5.1所示.图5.1实现程序:write_com(lcdadd0-2);/年的前两位write_date(2);write_date(0);write_com(lcdadd1-1);/日期中间的间隔write_date(0x2d);write_com(lcdadd2-1);write_date(0x2d);write_com(lcdadd5-1);/时间中间的间隔write_date(0x3a);write_com(lcdadd6-1);write_date(0x3a);time0=dsRead(0x8d);/读取ds130

26、2中RAM数据放入数组中time1=dsRead(0x89);time2=dsRead(0x87);time3=dsRead(0x8b);time4=dsRead(0x85);time5=dsRead(0x83);time6=dsRead(0x81);time_play(lcdadd0,time0);/调用显示子程序程序,在特定位置显示数组中的数据time_play(lcdadd1,time1);time_play(lcdadd2,time2);time_play(lcdadd3,time3);time_play(lcdadd4,time4);time_play(lcdadd5,time5);

27、time_play(lcdadd6,time6);5.2.2、输入密码状态在常态下按下09数字键任意一个进入此状态,输入密码状态时只显示日期和星期,不显示时间,显示时间的位置用于显示密码,此时密码用*代替显示在界面上,效果如下图5.2所示.图5.2实现方式:在常态时,实时检查09的按键是否按下(需要消抖),检测到后写液晶的命令write_com(0x80+0x40);从液晶的第二排开始显示输入的密码(此时用*代替显示),并将输入的实际键值放在time数组中保存.当输入6位或8位时等待用户按下确认键.确认键按下后首先比较开门时间的设置,如果在开门时间内并且有效,则从ds1302中读取预先保留的密

28、码进行配对,用户密码正确则开门,错误则显示”ERROR”,管理员密码正确则进入管理员模式.当不是开门时间段时,即使用户密码输入正确,显示的还是”can not open!”,不予开门.管理员模式则可照常进入.5.2.3、修改时间状态当用户在常态下输入正确的8位管理员密码后,按下修改时间键即可进入该状态.该状态首先会使年的十位闪烁,当按下一个数字时程序首先会检查当前输入的数字是否有效,无效则立即返回 ,闪烁位不移动.有效则将闪烁移到年的个位,十位数字固定,并写入到time0的高四位暂存以此类推,后面的时分秒也是按着这个方式保存.当所有的时间修改完毕,程序显示询问是否保存修改,按确认则保存,将数据

29、写入ds1302相应的RAM中.返回则放弃暂存数据,程序返回常态.效果如下图5.3所示.图5.35.2.4、修改用户密码和修改管理员密码当用户在常态下输入正确的8位管理员密码后,按下修改用户/管理员密码键即可进入该状态.这个状态在第一排显示日期和星期,第二排显示用户输入的密码,输入一个显示一个直至用户按下保存或返回,保存和返回都将使程序返回常态.保存密码时将密码保存在ds1302中的密码RAM中.效果如下图5.4所示.图5.45.2.5修改开门时间状态当用户在常态下输入正确的8位管理员密码后,按下修改开门时间键即可进入该状态.这个状态在第一排显示日期和星期,第二排显示开门时间,默认时读取ds1

30、302中开门时间RAM中的信息,显示00:0000:00.此时光标闪烁在第一位,提示用户输入时间,用户每输入一个数字则将其保存在time7数组中,并显示出来,直至用户按下保存键则将其保存至ds1302中的开门时间RAM中.显示效果如下图5.5所示.图5.55.2.6 空闲12秒返回常态设置定时器0为定时工作方式1,给TMOD赋值0x01,每次溢出的定时计数初始值,设置TH0和TL0分别为0x3c,0xb0,每20000个TM溢出,再设置一个变量irtime用户计算溢出次数,当记录irtime次数为240时,正好12s的时间,将程序状态设为常态(常态时设为常态还是常态,不变).当程序处于别的状态

31、时,当有效按键被按下时,将irtime置零.这样,当用户未操作超出12s时,程序返回常态.六、系统功能与用户操作使用说明6.1系统的功能1、显示时间当程序处于常态时,程序循环读取ds1302中的时间信息,并将其显示在液晶屏幕上.2.校验密码开门当程序处于常态时,输入09任意一个数字进入输入密码状态,接着会校验用户输入的密码,密码正确则开门,错误则显示”ERROR”.3.修改系统时间当用户在常态下输入正确的管理员密码后,选择修改系统时间功能则可修改当前系统的时间.4.修改用户/管理员密码在管理员模式下,可修改6位的用户密码和8位的管理员密码.密码保存至ds1302中永久保存.校验是读取对比.7.

32、 设置开门时间在管理员模式下,按下设置开门时间的按键,可修改开门时间的设置,修改完后保存至ds1302的RAM中保存.当用户输入密码需要开门时,读取这个信息比较当前时间是否符合要求,符合则将门打开.不符合则体会用户”Can not open!”7、空闲12s返回常态当程序处于非常态时,程序会记录未操作的时间,当达到12s时返回常态.8、按键有效按下时蜂鸣器轻声反馈.6.2、操作说明1、开门在常态下输入6位正确的用户密码,按下确认键,8位led发光二极管点亮,蜂鸣器响起,显示OK,门打开.2、设置系统时间:在常态下输入8位正确的管理员密码,并按下修改时间功能键进入修改系统时间状态,接着输入需要修

33、改的时间,一位一位的,根据光标闪烁位置相应输入.当你输入的数字不合法时按下时按键的反馈声音响应将消失.当输入数字合法时点击确认键即可保存数据.3、修改用户/管理员密码在常态下输入8位正确的管理员密码,并按下修改用户/管理员密码键进入修改密码状态.接着输入你想要修改的密码,直至输入完成后,系统提示是否保存更改.按下确认键即可保存修改的密码,即刻生效.4、设置开门时间在常态下输入8位正确的管理员密码,并按下修改开门时间按键进入设置开门时间状态.接着根据提示,将需要开门的时间输入进去,按下确认键即可保存成功.5、空闲12s返回常态当程序处于非常态时,程序会记录未操作的时间,当达到12s时返回常态.6

34、、按下有效按键时蜂鸣器轻声反馈例如在输入日期时,如果有效按下按键,将有蜂鸣器的轻声反馈.当这个键在某个状态没有功能时,反馈会消失,提示用户按键无效.七、课程设计总结 1、在刚开始进行课程设计的时候,需要对总体需要实现的功能列一个提纲,然后将能联系起来的功能分成一个个大致的模块.然后根据模块将模块内部更细的部分做一些划分.接着就是将各模块合理的联系和将模块一个一个的实现.在分成的模块之间最好是没有联系,如果联系是必须的则需要将联系部分抽出成一个子函数.这样,在模块之间就可以随时调用.将程序分成一个一个模块的实现方法是有很多好处的,比如各模块之间可以独立工作,在测试阶段可以独立的进行测试,可以排除

35、和解决一些未分模块时不可预知的和集成上带来的一些问题.2、在编写c程序时,对于一些常量和全局变量,在命名方式上,可以采用通俗易懂的字符组合,这在读的人读程序和自己写程序都能带来不小的方便.3、本次课程设计使用了LCD1602液晶显示器和DS1302时钟计时芯片.这两个芯片在我们的课程中是没有涉及的,这就要求我们具有读懂一些专业文档的能力,包括如何实现和操作一个未知的芯片或器件.在这个过程中,烦躁,枯燥和失败是在所难免的,对这个过程的唯一解决方法是要有恒心和不断的尝试.当然一股脑的死做是不被推荐的,如果多次失败无果,我们则可以试着网络上寻找相关的资料或者寻求老师的帮助.当我们对芯片比较了解后,我

36、们可以思考如何扩展他的能力.在本次课程设计中,密码保存问题是一个急需解决的问题,如果我们把密码保存在单片机RAM中,当单片机失去电源或复位,密码则荡然无存.这就要求我们密码必须保存在一个相对稳定区域.当我在手册上看到DS1302中还有30byte的RAM是可以被利用时,便萌生了将密码保存在DS1302中的想法.我得知,当主电源失电时,备用电源可以为其供电,而且这款芯片的使用电压极低,功耗极小,只要一节普通的干电池便可以驱动工作.在有备用电源的情况下,可以保证芯片是永久工作的.意味着密码也会永久保存.4、通过此次的课程设计,我得到了很多程序设计程序上的经验,比如程序设计的构思和分模块化处理。同时

37、对我以前所学的知识得到了充分的巩固,对芯片内部的特殊功能寄存器有了更充分的理解并且能熟练的使用。但此次课程设计也给我带来了不少的教训,比如细心。设计程序时绝对需要有100%的细心,在一些未知的某个领域,很容易在一些小错误上卡壳。在此次设计中,我遇到的让我摸不着头脑的问题,往往是一些很不起眼的小问题,比如当我设计键盘扫描程序时原先是这样:Unsigned char scanKey().return -1;有于习惯使然,觉得在没有键被按下时返回-1是合情合理的.但是又习惯性的将返回值设成了无符号类型的.这导致我调试好一段时间,并且毫无头绪,最终才恍然大悟是不符号惹的祸.在比如将=号敲成了=号,虽然

38、编译时会有提醒,但还是中招了,导致白费了好些时间.5、最后,我对此次设计还是挺满意的,因为我独立完成了一个程序,而且这个程序花费了我好些时间和精力,也充分体现了我的实力和水平。此次使用的是C语言,和同学们使用的汇编,在编程上会有一些差距,但是并不意味着C语言会更好或汇编会更好.在大一时,就自学了单片机,会一些简单的c语言开发,但是那时候对单片机底层的东西是一知半解,自学了汇编以后,在编程和单片机底层的认识上有了很大的升华.这也是我学习汇编以来最大的收获.七、附录源程序/*项目名称: 以单片机为核心的门禁密码锁程序功能: 密码开锁,不同权限的密码修改、密码输入安全设置、开门时段管理等项目负责人:

39、 丘春华班级:通讯1303 3131902220 9号时间: 2015-12*/#include#define uchar unsigned char#define NORMAL 0 /常态#define SET_TIME 1/设置时间状态#define MANAGER 2/管理员状态#define CHECK 3/输入密码状态#define CHANGE_MANAGER 4/修改管理员密码状态#define CHANGE_USER 5/修改用户密码状态#define SET_OPEN 6/修改开门时间段状态sbit LDE1=P26;/573锁存器1控制位sbit LDE2=P27; /57

40、3锁存器2控制位sbit BUZZER=P11;/蜂鸣器位声明,低电平有效sbit TRST=P23;/时钟芯片RST位声明sbit TIO=P24; /时钟芯片TO位声明sbit TSCLK=P25;/时钟芯片CLK位声明sbit p30=P30;/P3口位申明,方便使用sbit p31=P31;sbit p32=P32;sbit p33=P33;sbit p34=P34;sbit p35=P35;sbit p36=P36;sbit p37=P37;uchar state = NORMAL;/初始为常态uchar pa8; /临时存放密码uchar pi=0;/存放密码时的指针uchar t

41、ime7;/临时存放时间uchar titem = 0;/存放时间的指针uchar irtime = 0;/计数器计数值char code zifu0=USER PASSWPRD;char code zifu1=MANAGER PASSWPRD;char code zifu2=MANAGER MODE ;char code zifu3=Waiting.;char code zifu4=Welcome!;char code zifu5=OK;char code zifu6=Error;/5char code zifu7=SURE TO CHANGE?;char code zifu8=OPEN TIME:;char code zifu9=Can not Open!;/1602中时间显示的位置,分别是年,月.日.星期,时.分,秒char code lcdadd=0x80+3,0x80+6,0x80+9,0x80+12,0x80+0x40+4,0x80+0x40+7,0x80+0x40+10;void delay(unsigned int i); /函数声明void write_com(unsigned char com);/函数声明/*函数功能:设置定时计数器0为方式1,16位计数器.入口参数:出口参数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论