武汉理工大学《能力强化训练》课程设计说明书
4病房呼叫系统软件设计
对于一个完整的设计,除了需要设计硬件电路外,还需要根据功能需求设计要求设计一个运行高效、冗余指令少、稳定性强的软件系统。在这一块的完成上,我们采用的主要是各个子程序设计,主函数只需要做简单的数据处理和各个子程序的调用,从而逐步完成题目的全部要求。
4.1主程序设计
主程序主要是对各子程序,中断服务子程序进行初始化,并循环显示病人信息。其流程图如图4.1所示。
主程序设计如下: void main() { uchar i; init_LCD();
init1302();
开始液晶显示器初始化时钟芯片初始化中断初始化显示“一切正常”等待中断并循环显示 图4.1主程序流程图
7
武汉理工大学《能力强化训练》课程设计说明书
}
set_line(0); clear_display(); EA=1; EX0=1; INT0=1; P1=0x00; L1=L2=L3=1; while(1) for(i=0;i key_display(i); delay(1000); 4.2矩阵键盘的中断程序的设计 矩阵键盘的中断程序主要是对按键的扫描以实现对按键的键号识别,同时对键号对应的病房,病床号以及按键的时间进行存储。主函数通过调用存储的数据便可实现病房信息的循环显示。 其设计流程图如图4.2所示。 需要说明的是,在此中断程序中抖动的识别可以通过延时一段时间后再对L1,L2,L3及CLEAR的高低电平进行判断来实现,若延时后仍然有低电平则不是抖动而是真的有按键按下。 矩阵键盘的中断程序设计如下: void int0( ) interrupt 0 using 0 { uchar i; EX0=0; delay(5); 8 武汉理工大学《能力强化训练》课程设计说明书 if((L1&L2&L3)!=1) { if(L1==0) room_num=1; else if(L2==0) room_num=2; else room_num=3; P1=0xff; L1=L2=L3=0; for(i=0;i<8;i++) if(P1==table[i]) { bed_num=i+1; break; } num[t][0]=room_num; num[t][1]=bed_num; time[t][0]=read_1302(0x81); time[t][1]=read_1302(0x83); time[t][2]=read_1302(0x85); time[t][3]=read_1302(0x87); time[t][4]=read_1302(0x89); time[t][5]=read_1302(0x8d); t++; P1=0x00; L1=L2=L3=1; if(CLEAR==0) 9 武汉理工大学《能力强化训练》课程设计说明书 } } clear_display(); EX0=1; 开始关中断YES抖动?NO将L1,L2,L3分别与0比较判断病房号P1=oxff;L1=L2=L3=0P1口各位分别赋0循环检测判断病床号存储病房号和病床号存储按键时间P1=ox00;L1=L2=L3=1开中断开始 图4.2矩阵键盘的中断程序流程图 4.3液晶LCD12864驱动程序的设计 编写液晶LCD12864驱动程序前首先要对系统中用到的汉字,数字以及特殊字符的数据组进行设计。针对液晶驱动程序主要考虑以下的编写: 1、void read_busy() 读忙函数 2、void write_LCD_command(uchar value) 写指令函数 3、void write_LCD_data(uchar value) 写数据函数 10 武汉理工大学《能力强化训练》课程设计说明书 4、void set_page(uchar page) 设置页 5、void set_line(uchar startline) 设置起始行 6、void set_column(uchar column) 设置起始列 7、void setonoff(uchar onoff) 开、关显示(0开,1关) 8、void selectscreen(uchar screen) 选屏函数(00全屏01左半屏10右半屏) 9、void clearscreen(uchar screen) 清屏函数 10、void init_LCD() 初始化函数 11、void display(uchar ss,uchar page,uchar column,uchar p) 显示汉字函数 12、void display1(uchar ss,uchar page,uchar column,uchar p) 显示字符 上述函数的具体编写参看附录2。 4.4实时时钟DS1302驱动程序的设计 由于DS1302是SPI总线驱动方式,它不仅要向寄存器写入控制字,还需要读取相应的寄存器数据,所以要想与其通信,首先得了解DS1302控制字,而且SPI总线进行数据通行时只有两条数据线,即SCLK和RST,通过不同时刻两条总线的电瓶变化不同可以进行不同的操作。 其驱动函数包括: 1、void write_byte1302(uchar dat) 写一个字节 2、uchar read_byte1302() 读一个字节 3、void write_1302(uchar add,uchar dat)写数据 4、uchar read_1302(uchar add) 读数据 5、void init1302() 初始化 上述函数的具体编写参看附录2。 11 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库病床呼叫系统设计(3)在线全文阅读。
相关推荐: