资源描述:
《arm课程设计-排序_doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、一、设计题目:数据排序过程演示(S3CEV40教学平台)用键盘随机输入8个数值为0-9的数字,用冒泡排序法将它们按从小到大的方式排序,并显示排序过程和最终结果。二、设计要求和目标1.基本要求(1)在LCD屏幕上提示用户用矩阵键盘输入8个数字,输入过程显示在屏幕上。输入完成后,屏幕提示按确认键开始排序过程。一定要输满8个数字才能排序;输入过程中若按取消键则清除所有输入结果,回到待机状态。(2)当输入完8个数字,按下确认键后,程序开始排序;排序过程中在数码管上显示正在排序的数字,同时在LCD屏幕上绘制出排序动画过程,每当数字顺序发生变化后,停留2~3秒或有按键按下后才进行
2、下一步排序。(3)排序结束后,在数码管上应该依次显示数值从小到大排列的8个数字,同时LED1闪烁表示排序完成。按取消键清除结果显示回到待机状态,提示下一次输入和排序操作过程。2.扩展内容在排序过程中,若按下取消键,在LCD屏幕上提示是否要取消排序操作,按确定中断排序,清除显示;按其他键继续排序过程。三、排序算法说明冒泡排序已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4]
3、,以此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,以此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。优点:稳定,比较次数已知;缺点:慢,每次只能移动相邻两个数据,移动数据的次数多。四、原理说明和模块1、主要用到的模块数据输入模块:主要完成要排序数据的输入;LED显示模块:主要完成数据的输入以及排序过程在数码过程上的显示;LCD显示模块:主要完成数据排
4、序过程,操作提示等内容的显示;扫描键盘模块:主要完成对键盘的扫描,通过得到不的按键转到相应的处理程序;排序及主控制模块:主要完成数据排序以及显示控制;延时及动态刷新模块:主要用来去除键盘抖动和刷新数码管显示。2、程序各部分模块关系初始化硬件资源排序以及显示控制数据输入选择LCD显示排序方法LED显示按键扫描动态刷新3、操作说明从键盘输入8个数,A键清除,重新输入。输入后提示是否开始排序,按A键取消排序,其它任意键开始。若在排序过程中取消当前排序,可以按A键,系统提示是否想真正退出,若再按A键,则退回到待机状态,若按除A以外的其它键,刚返回原来界面继续排序。排序
5、完成后LED灯闪,LCD提示排序完成,按A键继续下一次排序过程.4、流程图与各模块代码说明开始硬件初始化LCD提示输入数据是否取消输入返回将数据输入缓存是否开始排序返回待机数据是否需要交换下一次循环排序LCD显示8LE显示延时查询是否有键按下记录交换次数排序是否完成是否是取消键结束排序LCD提示是否结束LCD显示排序次数返回排序程序返回待机状态8LED显示最后结果LED闪灯查询按键有取消键按下返回回5、程序中用到的函数介绍:voidLcd_DspHz16(INT16Ux0,INT16Uy0,INT8UForeColor,INT8U*s);――在指定的坐标起始点上输入汉
6、字字符串函数。voidLcd_DspAscII8x16(INT16Ux0,INT16Uy0,INT8UForeColor,INT8U*s);――在指定的坐标起始点上输入AscII字符串函数。voidLcd_Clr();――清屏voidLcd_Disp(intn,intx,inty);――在坐标为(x,y)在位置上输入长度为n的整型数组函数,其整型数组为data[in_count],就是输入正在排序或者正在数的数据。voidLcd_Disp_old(intn,intm,intpos);――在坐标为(x,y)在位置上输入长度为n的整型数组函数,其整型数组为data_old
7、[in_count],就是输入的原始数据。――其实两者可以合并为一个函数,只需再加一个形参为整型数组指针而已,这里由于时间限制,不再添加。voidover();――排序完毕所执行的一个函数,用于在8LED上循环排好的数据并让LED1闪烁,并且判断是否有A键按下以返回待机状态。voidled1_off();voidled1_on();――使LED1明或灭的程序。voidDigit_Led_Symbol(intvalue);――在8LED上显示正在排序的数字。6、程序中各大模块的部分程序介绍1>数据输入模块st1:Lcd_Clr();Lcd_DspHz1