基于单片机病房呼叫器(亲测可用)课程设计(编辑修改稿)内容摘要:

扫描方式是利用 CPU 完成其他工作的空余时间,调用键盘扫描子程序来检验按键状态,响应键盘输入。 执行键功能程序时, CPU 不再享有 键输入要求,直到 CPU 重新扫描键盘为止。 定时扫描方式 : 定时扫描方式就是每隔一段时间对键盘扫描一次,她利用单片机内部的定时器产生一定时间(如 20ms)的定时,定时时间到产生定时器溢出中断。 CPU 在中断服务程序中键盘进行扫描,并在有键按下时识别出该键并保存键号,然后在中断服务程序或主程序中执行该键的功能程序。 中断扫描方式 : 本设计采用上述两种键盘扫描方式时,无论是否有键按下,CPU 都要定时扫描键盘,而单片机应用系统工作时,并非经常需要键盘输入。 因此, CPU 经常处于空扫描状态,浪费 CPU 大量时间, CPU 不扫 描键盘,而有键按下时,通过相应电路产生中断请求, CPU 相应中断,执行键盘扫描子程序,并识别键号。 软件程序设计 系统软件的设计 该系统软件主要完成以 AT89C51 为核心的数据的采集、处理和有线传输。 采用模块化程序设计方法,将系统软件的设计主要分为 显示模块,输入模块,输出模块。 单片机扫描发射键,如果扫描到有发射键按下,系统便扫描拨码开关的状态以确定地址码 ,通过 P1口和 P2 口 开始地址码传送当 服务台 接收到呼叫信号后, 13 护士值班室内的呼叫系统板上显示该患者的床位号,并振铃。 当护士按下“响应”键时,结 束当前呼叫。 主程序流程图 单片机扫描发射键,如果扫描到有发射键按下,系统便扫描拨码开关的状态以确定地址码, 再进行中断初始化,去除键的延时抖动,分辨行、列值,进入死循环,这时病房指示灯点亮,服务台显示出床号并响铃,病房等待服务台的回应,如果没有扫描到信号输入,则单片机始终处于初始状态。 如图 所示。 开 始初 始 化 系 统有 键 按 下。 结 束病 房 指 示 灯 亮 , 服 务台 显 示 床 号 , 并 响 铃服 务 台 回 应Y停 止。 YNN 图 主程序流程图 子程序流程图 子程序如图 是一个中断式键盘的流程图,当单片机收到信号后,中断入口开始初始化,去 除键的延时抖动。 而一般的削抖方式有软件和硬件两种,硬件削抖虽能够解决键抖动问题,但 14 如果应用系统所需按键较多,本系统采用的是软件削抖,当检测出有键闭合时,先执行一个延时子程序产数毫秒的延时,待接通时的前沿抖动消失后再判别是否有键按下,分辨出行、列值。 当按键释放时,也要经过数毫秒延时,待后沿抖动消失后再判别是否有键按下。 中 断 入 口中 断 初 始 化中 断 返 回有 键 按 下延 时 去 键 抖 动分 辨 行 、 列 图 子程序流程图 中断程序: void key(void) 扫描键盘值 { uchar hang,lie。 P1=0x00。 P2=0xff。 delay(1)。 if(P2!=0xff) { delay(5)。 延迟后查询行列值 if(P2!=0xff) { switch(P2amp。 0xff) 扫描列值 15 { case 0xfe:lie=0。 break。 case 0xfd:lie=1。 break。 case 0xfb:lie=2。 break。 case 0xf7:lie=3。 break。 case 0xef:lie=4。 break。 case 0xdf:lie=5。 break。 case 0xbf:lie=6。 break。 case 0x7f:lie=7。 break。 } P2=0x00。 P1=0xff。 switch(P1amp。 0xff) 扫描行值 { case 0xfe:hang=0。 break。 case 0xfd:hang=1。 break。 case 0xfb:hang=2。 break。 case 0xf7:hang=3。 break。 case 0xef:hang=4。 break。 case 0xdf:hang=5。 break。 case 0xbf:hang=6。 break。 case 0x7f:hang=7。 break。 } P2=0xff。 P1=0x00。 while(P2!=0xff)。 bed_NO=keytab[hang][lie]。 TR0=1。 行列值赋值给 bed_NO } else bed_NO=0。 16 } } void time_init(void) 计数器的初始化 { TMOD=0x01。 TH0=(655368333)/256。 装入初值 TL0=(655368333)%256。 EA=1。 ET0=1。 } void time(void) interrupt 1 using 1 定义中断块 源程序代码 源程序代码如下: include define uchar unsigned char define uint unsigned int sbit B1=P3^6。 sbit B2=P3^7。 sbit buzzer=P3^5。 sbit clear=P3^4。 sbit FMQ=P3^1。 ucharcodedistab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}。 uchar code keytab[8][8]={ {1,2,3,4,5,6,7,8},。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。