2761.ARM的排队叫号系统源程序及课程设计报告.doc
计算机科学学院课程设计报告课程 嵌入式技术与应用 题目 排队叫号机 年级 专业 自动化 学号 学生 任课教师 本文源码索取,请联系QQ:686615082008 年 12 月 7 日课程设计主标题排队叫号机验收时间 验收地点 验收教师 小组成员具体分工备注黄辉军主要负责软件部分的设计完成蔡志富主要负责硬件部分及方案设计完成课程设计思想概述1. 排队叫号系统主要由控制器、取号按键、数码管、上位机显示等组成。2. 叫号:当叫号按键被按下后,数码管都显示即将被叫号的对象号码。同时内存自动加1,直接下一次被叫号为止。主要应用SC3CB440X的键盘和8段数码管硬件。设计目的排队叫号系统常应用于银行、医院、营业厅等服务性行业,提供给顾客一个舒适的等候环境。在一些大型 场合顾客数较多,总控室需实时监控处于不同位置的 各站点顾客流量情况,从而统筹安排各站点的服务窗 口。采用基于ARM处理器的嵌入式排队系统大大改善了现有系统的不足。设计原理ARM控制器处理结果键盘叫号按键8段数码管显示设计主要思想基于上图,当用户按下叫号按键后,经ARM控制器处理后,8段数码管显示其叫号号码,同时该号码被延时显示5秒钟。保证用户观察到结果。 设计方案1.主函数main()#include "44blib.h"#include "44b.h"int Main(void);extern void Test_Keyboard();int Main(void) sys_init(); /* Initial 44B0X's Interrupt,Port and UART */ _Link(); /* Print Misc info */Uart_Printf("nrEmbest 44B0X Evaluation Board(S3CEV40)");Uart_Printf("nrKeyboard Test Examplen");Test_Keyboard(); while(1); return;2.数码管显示程序(8LED.c)的程序如下:#include "44b.h"#include "44blib.h"#define SEGMENT_A0x80#define SEGMENT_B0x40#define SEGMENT_C0x20#define SEGMENT_D0x08#define SEGMENT_E0x04#define SEGMENT_F0x02#define SEGMENT_G0x01#define SEGMENT_P0x10#define DIGIT_F(SEGMENT_A | SEGMENT_G | SEGMENT_E | SEGMENT_F)#define DIGIT_E(SEGMENT_A | SEGMENT_G | SEGMENT_E | SEGMENT_F | SEGMENT_D)#define DIGIT_D(SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_E)#define DIGIT_C(SEGMENT_A | SEGMENT_D | SEGMENT_E | SEGMENT_G)#define DIGIT_B(SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_E | SEGMENT_G)#define DIGIT_A(SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_F | SEGMENT_E | SEGMENT_G)#define DIGIT_9(SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_F | SEGMENT_G)#define DIGIT_8(SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_E | SEGMENT_G)#define DIGIT_7(SEGMENT_A | SEGMENT_B | SEGMENT_C)#define DIGIT_6(SEGMENT_A | SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_E | SEGMENT_G)#define DIGIT_5(SEGMENT_A | SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_G)#define DIGIT_4(SEGMENT_B | SEGMENT_C | SEGMENT_F | SEGMENT_G)#define DIGIT_3(SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_F)#define DIGIT_2(SEGMENT_A | SEGMENT_B | SEGMENT_D | SEGMENT_E | SEGMENT_F)#define DIGIT_1(SEGMENT_B | SEGMENT_C)#define DIGIT_0(SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_E | SEGMENT_G)/* 8led control register address */#defineLED8ADDR(*(volatile unsigned char *)(0x2140000)/*- global variables -*/* Digit Symbol table*/int Symbol = DIGIT_0, DIGIT_1, DIGIT_2, DIGIT_3, DIGIT_4, DIGIT_5, DIGIT_6, DIGIT_7, DIGIT_8, DIGIT_9, DIGIT_A, DIGIT_B, DIGIT_C, DIGIT_D, DIGIT_E, DIGIT_F;/* LED segment table */int Seg = SEGMENT_A, SEGMENT_B, SEGMENT_C, SEGMENT_D, SEGMENT_E, SEGMENT_F, SEGMENT_G, SEGMENT_P; /*- functions declare -*/void Digit_Led_Test(void);void Digit_Led_Symbol(int value);void Digit_Led_Segment(int seg_num);/*- extern functions -*/extern void Delay(int time);void Digit_Led_Test(void)int i;/* display all digit from 0 to F */for( i=0; i<16; i+ )Digit_Led_Symbol(i);Delay(4000);void Digit_Led_Symbol(int value)/* symbol display */if( (value >= 0) && (value < 16) ) LED8ADDR = Symbolvalue;Delay(8000); if(value >= 16) value=value%16; LED8ADDR = Symbolvalue; Delay(8000); void Digit_Led_Segment(int seg_num)/* segment control */if( (seg_num >= 0) && (seg_num < 8) )LED8ADDR = Segseg_num;3.键盘程序如下(Keyboard.c)程序如下:#include "44b.h"#include "44blib.h"#include "def.h"#include "keyboard.h"int serve=0; /内部服务号码int client=0; /当前客户号码/*- global variables -*/* keyboard control address */volatile UCHAR *keyboard_base = (UCHAR *)0x06000000;/*- function declare -*/void init_keyboard();void close_keyboard();void KeyboardInt(void) _attribute_ (interrupt ("IRQ");void Eint4567Isr(void) _attribute_ (interrupt ("IRQ");/*- function code -*/void Test_Keyboard()/ init keyboardinit_keyboard();Uart_Printf("nPlease press one key on keyboard and look at LED .nnnn");void init_keyboard()/* enable interrupt */rINTMOD = 0x0;rINTCON = 0x1;/* set EINT1 interrupt handler */rINTMSK =(BIT_GLOBAL|BIT_EINT1|BIT_EINT4567); pISR_EINT1 = (int)KeyboardInt; pISR_EINT4567 = (int)Eint4567Isr; /* PORT G */ rPCONG = 0xffff;/ EINT70rPUPG = 0x0;/ pull up enable rEXTINT = rEXTINT|0x20;/ EINT1 falling edge moderI_ISPC = BIT_EINT1|BIT_EINT4567;/ clear pending bitrEXTINTPND = 0xf;/ clear EXTINTPND regvoid KeyboardInt(void)int value;rI_ISPC = BIT_EINT1;/ clear pending bitvalue = key_read();if(value > -1) Digit_Led_Symbol(value); Uart_Printf("The server is: %x The client is: %xr",value,client); inline int key_read()int value;char temp;/* read line 4 */temp = *(keyboard_base+0xef);/* not 0xF mean key down */if( temp & KEY_VALUE_MASK) != KEY_VALUE_MASK)if( (temp&0x1) = 0 )value = -1; if( (temp&0x2) = 0 )value = -1; else if( (temp&0x4) = 0 ) value=-1; return value; else if( (temp&0x8) = 0 ) Delay(3000); if(temp&0x8)=0) /内部服务号码 按键SB4 serve=serve+1; value=serve; return value; while( temp & KEY_VALUE_MASK) != KEY_VALUE_MASK) / releasetemp = *(keyboard_base+0xfb);return value;return -1;void Eint4567Isr(void)unsigned char which_int;Uart_Printf("n SB2 or SB3 had pressed and light LED."); which_int=rEXTINTPND; rEXTINTPND=0xf;/clear EXTINTPND reg. rI_ISPC=BIT_EINT4567;/clear pending_bit if(which_int = 4)/ SB2 Led_Display(0x0); Led_Display(0x1); else if(which_int = 8)/ SB3 Led_Display(0x0); Led_Display(0x2); 调试方案1.硬件部分的调试:采用SC3CB440X开发板的硬件,即键盘与8段数码管,主要调试为按键后数码管如何显示控制器处理后的结果,并在一定时间内显示,已保证用户正常观察到被叫号码。调试方法采取软件与硬件的结合调试。2.软件部分的调试:主要根椐SC3CB440X开发例程中8LED_Test与Keyboard_Test两个例程调试,采用边调试边修改的方法,实现课程设计的要求。难点在于如何解决键盘与数码管之间的联通以及显示时间的问题。3.硬件与软件的结合调试。保证结果正确无误达到题目的要求。用户手册功能介绍排队叫号系统是利用现代网络通信技术和计算机信息管理技术来代替传统排队的系统,从本质上改善传统排队管理所存在的一些拥挤、嘈杂、混乱现象,避免各种不必要的纠纷,减轻了工作人员的工作压力,提高了服务质量和工作效率。通过使用排队系统,由传统的客户站立排队变为取票进队、排队等待、叫号服务,由传统物理的多个队列变为一个逻辑的队列,使先来先服务的思想得到更好的贯彻,不仅优化了服务和工作环境,而且使客户和工作人员的情绪得以放松,提高了服务效率和质量,有利于树立服务部门的良好形象,有利于提高服务机构的经济效益和社会效益,更有利于营造良好社会公共秩序、创造和谐的社会环境。使用说明1. 用户按下键盘SB4后,八段数码管会显示所叫号码,达到排队叫号的目的。2. 此系统是以十六进制显示所号码。3. 该排队叫号系统一次显示最多16人次的被叫号码.注意事项此排队叫号系统只能显示16个被叫号,用户使用时请注意,每16次叫号后请重新复位些系统才能再次正常使用。错误及结果分析1. 在调试过程中由于SC3CB440X开发平台上只有一只数码管,因此只能实现单只数码管显示,也就是只能达到每次只能显示16个被叫号码。由于硬件条件有限,无法避免的出现此问题。2. 通过调试和实验,基本设计要求已达到,即当有用户按下按键时数码管会显示被叫号码,同时保证在5秒内只能显示此被叫号,5秒以后如果用户无按键,则仍然显示些被叫号码,直至用户按下键盘为止。方案改进思路1. 通过软件设计达到一个完整的排队叫号系统,即有取号功能与叫号功能。2. 通过硬件的采购能实现更多数量的号码显示,能完成大数量的人群排队问题。3. 采用触摸屏技术,实现多功能的取号功能。4. 把系统做的更小,达到低功耗,省能源的功能,完成一个能用于实际使用的小系统。5. 采用主、从机实现排队叫号的功能。课程设计心得1. 通过此课程设计了解了实际排队叫号系统的应用,排队机在银行、医疗、工商、税务等公共场合使用中开始流行。采用ARM处理器可满足排队管理机设计要求,简化系统硬件电路,减小布板空间,同时提高系统性能价格比。2. 通过深入认识和了解ARM,经过我们小组的多天努力和不断调试,最后我们顺利完成了本次课程设计任务,达到了设计要求。通过这次课程设计,我有以下几点收获。3. 通过此次课程设计,我对于S3C44B0X有了较深的理解,它是一款功能非常强大的处理芯片,在本设计中运用到了键盘中断扫描、数码管显示、串口等模块,通过设计了解了这些模块的功能和工作原理。4. 团队合作在工作学习当中是非常重要,团队是成功的因素。参考文献1. 田泽.嵌入式系统开发与应用 M.北京:北京航空航天大学出版社,2005.32. 孙丽英; 时立文等,单片机在医院排队叫号系统中的应用J.自动化技术与应用,2006,2,3. 吴振纲,陈虎.PLC的人机接口语编程J.微计算机信息,2005,8-1:21-234. 林永君,金理鹏.基于ARM的嵌入式智能前端的设计与实现J .微计算机信息,20075. 张忠安; 齐俊传; 门诊排队叫号系统设计J.医疗卫生装备2006.106. 陈兴中,排队叫号系统在医院中的应用J.山西建筑,2007.16计 算 机 科 学 学 院本科课程设计量化评分标准 (嵌入式技术与应用) 学生姓名: 任课教师: 年级和专业:2005级自动化 指标最高分评分要素评分方案10目的明确,方案合理,实验原理正确,电路结构完整,布局合理。调试30有完整的调试方案,测试数据设计合理,验证程序典型,调试步骤清晰、合理。结果(验收)20系统工作正常,汇编源程序运行正确,实验结果清晰,实现现象合理。设计报告30报告结构严谨,逻辑严密,论述层次清晰,语言流畅,表达准确,重点(设计结果分析、方案改进及设计心得)突出,报告完全符合规范化要求。团队合作10服从小组调遣,态度积极主动,按时完成课程设计任务,具有很好的团结协作精神。总 分注: 本评分标准适用于计算机系统结构类专业课程; 总分满分为100分,成绩参考标准为:优秀(100>X90);良好(90>X80);中等(80>X70);及格(70>X60);不及格(X<60);