[size=12.0000pt]一、系统方案 主程序中main函数主要是引脚的初始化,给单片机引脚初始化,初始化LCD1602,初始化红外对管,通过对LCD1602赋值,采集进入教室的人数,显示在LCD1602上面进出人数我们采用按键的形式,检测完毕后按下确认键确认是否在我们需要的人数范围内,当少于我们需要的人数时,蜂鸣器会报警三秒,反之,则会LED亮三秒。
二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 /**** *******1602初始化函数 *****/ void lcd_init() { lcd_write_com(0x38); lcd_write_com(0x0c); lcd_write_com(0x06); lcd_write_com(0x01); } 2、液晶显示程序 /**** *******1602写数据忙函数 *****/ void lcd_write_date(uchar date) { check_busy(); en=0; LCD_PORT=date; rs=1; wr=0; en=1; en=0; } /**** *******1602写命令函数 *****/ void lcd_write_com(uchar com) { check_busy(); en=0; LCD_PORT=com; rs=0; wr=0; en=1; en=0; } /**** *******1602写温度函数 *****/ void lcd_wendu(uchar add,uchar date) { uchar shi,ge; shi=date/10; ge=date%10; lcd_write_com(add); lcd_write_date(shi+'0'); lcd_write_date(ge+'0'); } 3、按键程序 void keyscan() { if(K1==0) //检测按键K1(正转)是否按下 { delayms(10); //消除抖动 if(K1==0) { ZZ(0x01); count++; buf_3[0]=count/10+'0'; buf_3[1]=count%10+'0'; lcd_write_str(0x80+0x40+8,buf_3); } while(!K1); //检测按键是否松开 } if(K2==0) //检测按键K2(反转)是否按下 { delayms(10); //消除抖动 if(K2==0) { ZZ_1(0x01); count--; buf_3[0]=count/10+'0'; buf_3[1]=count%10+'0'; lcd_write_str(0x80+0x40+8,buf_3); } while(!K2); //检测按键是否松开 } if(K3==0) //检测按键K2(反转)是否按下 { delayms(10); //消除抖动 if(K3==0) { if(count >= 80) LED = 0; else { BUZ = 0; delayms(500); BUZ = 1; delayms(500); BUZ = 0; delayms(500); BUZ = 1; delayms(500); } } while(!K3) //检测按键是否松开 { delayms(3000); BUZ = 1; LED = 1; } } } 4、核心算法程序 /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数功能:主函数 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void main(void) { uint i; count = 70; TMOD = 0x01; //T0 16位工作方式 IR_1=1; //发射端口常态为高电平 lcd_init(); lcd_write_str(0x80,buf_1); lcd_write_str(0x80+0x40,buf_2); lcd_write_str(0x80+0x40+8,"70"); while(1) { keyscan(); } } 四、 proteus仿真设计 Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
|