班级:__08电子信息一班_ XX:_黄昌利、黄勇姬、黄文静__学号:_、200802060、__智能门禁控制器设计一、设计任务:智能门禁控制器设计二、设计要求:1.以89C5X系列单片机为核心器件,设计一个智能门禁控制器。
2. 门控器密码由键盘输入,用四个数码管显示提示信息。
3. 密码输入错误提示(可用发光二极管指示),密码错误超过3次则通过蜂鸣器发出报警声。
4.密码输入正确,则通过发光二极管指示开锁信号,并驱动步进电机正转10圈开门,10秒后步进电机反转10圈关门。
5.其它创新设计。
三、评分标准:智能门禁控制器设计1.系统方案选择和论证1.1设计要求1.以89C5X系列单片机为核心器件,设计一个智能门禁控制器。
2. 门控器密码由键盘输入,用四个数码管显示提示信息。
3. 密码输入错误提示(可用发光二极管指示),密码错误超过3次则通过蜂鸣器发出报警声。
4. 密码输入正确,则通过发光二极管指示开锁信号,并驱动步进电机正转10圈开门,10秒后步进电机反转10圈关门。
5.其它创新设计。
1.2系统总体方案1.2.1系统各模块方案选择和论证(1)控制器模块AT89C52单片机(2)显示模块方案一:LED显示屏。
优点:亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。
LED的发展前景极为广阔,目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。
缺点:色彩一致性差,马赛克现象较严重,显示效果较差;混色效果不佳,视角不大,水平方向左右观看有色差。
加工较复杂,抗静电要求高。
实际像素分辨率做到10000点以上较难;加工工艺麻烦,成本太高;加工还是较复杂,抗静电要求高。
方案二:数码管。
能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容;发光响应时间极短(<0.1µs),高频特性好,单色性好,亮度高;体积小,重量轻,抗冲击性能好;寿命长,使用寿命在10万小时以上,甚至可达100万小时。
成本低。
而且还易于检测。
(3)键盘输入模块方案一:开关控制方案二:独立式键盘控制键盘控制本身都没有内部音源系统,不过几乎所有键盘合成器/工作站则都可以扮演控制其它设备声音及参数的角色。
而且丰富功能及便携性。
(4)声光报警模块方案一:喇叭和显示管方案二:发光二极管和蜂敏器声光报警器外壳由不锈钢金属材料制成,产品采用了密封结构设计,所以不受污染物和水的影响,防护等级为IP65。
(5步进电机模块方案一:单相八拍方案二:两相四拍1.2.2系统各模块的最终方案(1)控制器模块:AT89C52(2)显示模块:数码管(3)键盘输入模块:独立式键盘输入控制(4)声光报警模块:发光二极管和蜂敏器(5)步进机模块:两相四拍2.系统硬件电路设计(1)键盘(2)51实验板(3)驱动电路3.系统软件设计流程图4.软件系统源程序#include<AT89X52.H> #define uchar unsigned char开始初始值输入密码,判断 是否正确启动定时器LED 显示密码正确密码错误密码错误三次报警步进机正转10圈显示“0-9”步进机反转10圈显示“0-9”延迟10秒后#define uint unsigned intunsigned char code keycode[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//10 11 12 13 14 15// 0 1 2 3 4 5 6 7 89 erro right close 0pen . Funsigned char code LED_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90 ,0x86,0x88,0xc6,0x8c,0x7f,0x8e};uchar mima_code[]={0,0,0,0};uchar wei_code[]={0xef,0xcf,0x8f,0x00};uchar code zheng[4]={0x9f,0x5f,0x9f,0xaf}; //正转uchar code fan[4]={0xaf,0x6f,0x5f,0x9f}; //反转uchar jishu=3;uchar speed;uchar temp=0;int wei=-1;uchar qing=0;uchar i,j,k;//延时函数void subDelay( uint x ){while( x-- );}//置数void zhishu(){mima_code[wei]=speed;}//显示void xianshi_code(){if(wei>=0){ P0=LED_code[15];P2=wei_code[wei];}else{P0=0xbf;P2=0x00;}} //启动定时器,清零void display(){if(temp==1){if(mima_code[0]==2&&mima_code[1]==2&&mima_code[2]==4&&mima_code[3]==4) {P0=LED_code[11];P2=0x00;subDelay( 65000 );mima_code[0]=0;mima_code[1]=0;mima_code[2]=0;mima_code[3]=0;TR0=1;jishu=3;}else{jishu--;P0=LED_code[10];P2=0X00;subDelay( 50000 );subDelay( 50000 );P2=0xff;if(jishu==0){ uchar k=3;while(k--){P1_0=0;subDelay( 10000 );P1_0=1;subDelay( 10000 );}}}wei=-1;temp=0;speed=14;}}//按键扫描char subMatrixScan( ){unsigned char lcKeyTemp, i;unsigned char lcRowSel = 0xf7; // 4个输出行分别输出0的选择码P3 = 0xF0;lcKeyTemp = P3;subDelay( 200 );// 延时,消除抖动if ( (P3 ==0xF0) || (P3 != lcKeyTemp) ){return (16); // 无按键或未稳定,返回空键码,随后再来}for (i=0; i<4; ++i){P3 = lcRowSel | 0xF0; // 检查各行有无按键switch (P3 & 0xF0){ // 获取4列按键状态case 0xE0:lcKeyTemp = 0; break; // 仅第1列有按键case 0xD0:lcKeyTemp = 1; break; // 仅第2列有按键case 0xB0:lcKeyTemp = 2; break; // 仅第3列有按键case 0x70:lcKeyTemp = 3; break; // 仅第4列有按键default:lcKeyTemp = 16;break; // 无按键或多按键}if ( lcKeyTemp != 16 ){lcKeyTemp += i*4;break;}lcRowSel >>= 1; // 右移1位,选择下一行}return (lcKeyTemp); // 返回按键状态}void key_process(){unsigned char key=0xff;key=subMatrixScan( );key=keycode[key];switch(key){case 0:speed=0;wei++;subDelay( 50000 );break;case 1:speed=1;wei++;subDelay( 50000 );break;case 2:speed=2;wei++;subDelay( 50000 );break;case 3:speed=3;wei++;subDelay( 50000 );break;case 4:speed=4;wei++;subDelay( 50000 );break;case 5:speed=5;wei++;subDelay( 50000 );break;case 6:speed=6;wei++;subDelay( 50000 );break;case 7:speed=7;wei++;subDelay( 50000 );break;case 8:speed=8;wei++;subDelay( 50000 );break;case 9:speed=9;wei++;subDelay( 50000 );break;case 10:P0=LED_code[key];P2_4=0;break;case 11:P0=LED_code[key];P2_4=0;break;case 12:P0=LED_code[key];P2_4=0;break;case 13:P0=LED_code[10];P2_4=0;break;case 14:wei--;subDelay( 50000 );break;case 15:temp=1;P0=LED_code[15];subDelay( 50000 );P2_4=0;break; default:break;}}//定时计数器,电机控制void TIMER0() interrupt 1{ TH0=0xfc;TL0=0x18;TR0=0;for(i=0;i<10;i++){ P0=LED_code[i];P2=0x00;for(j=0;j<200;j++){for(k=0;k<4;k++){P1=zheng[k];subDelay( 50);}}}P0=LED_code[13];P1=0x0f;subDelay( 60000);subDelay( 60000);subDelay( 60000);subDelay( 60000);for(i=9;i>0;i--){ P0=LED_code[i];P2=0x00;for(j=0;j<200;j++){for(k=0;k<4;k++){P1=fan[k];subDelay( 50);}}}P0=LED_code[12];subDelay( 60000);subDelay( 60000);subDelay( 60000);subDelay( 60000);P2=0xff;P1=0x0f;}//主函数void main(){ TMOD=0x01;TH0=0xfc; //计数器初始值TL0=0x18;EA=1;ET0=1;P1=0xff;while(1){key_process();zhishu();display();xianshi_code();}}5.产品操作说明按键0-9为密码输放16号键为确认键,15号键为删除键密码为:22446.调试中遇到的问题及解决的办法(1)键盘扫描错误,后发现是按键做板不对,重做板改正就行了。