注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题

tiankai001的个人空间 http://home.eeworld.com.cn/space-uid-139222.html [收藏] [复制] [分享] [RSS]

日志

单片机C语言-十种常用算法实例(1)冒泡法排序

已有 426 次阅读2018-3-25 23:33 |个人分类:proteus for 51 mcu




此内容由EEWORLD论坛网友tiankai001原创,如需转载或用于商业用途需征得作者同意并注明出处





简介:

系列文章《常用的10种算法实例》列举了单片机C语言中的十种常用算法:冒泡法;回文法;幂运算;加法运算;求直角三角形变长等,目的是为了使大家熟悉单片机C语言的常用算法。

本例采用冒泡排序算法,将数组中的数据按照从高到底,或者从低到高的顺序排列。

(程序中将数据按升序排序)

一、程序设计


本电路在proteus仿真环境下搭建,可以直接使用。二、硬件电路


  1. /************************************************************
  2. 文件:main.c
  3. 功能:常用的10种算法实例之一冒泡排序算法
  4. 描述:将排序后的数据依次通过LED排序
  5. 作者:老马识途单片机
  6. 日期:2017年12月19日
  7. 编译环境:Keil C51 uVirsion 4.72.9.0
  8. 硬件环境:Proteus 8.0
  9. 主芯片:AT89S51
  10. 晶振:11.0592MHz
  11. ***********************************************************/
  12. #include //
  13. #include
  14. //全局变量声明
  15. unsigned char uiBuffer[10]={0x11,0x55,0x88,0x22,0x66,0x99,0x33,0x44,0x77,0x00};
  16. //函数声明
  17. void Delay(unsigned int ucDelayTimer);
  18. void MaoPao(unsigned char uiBufferData[10]);
  19. /*****************************************
  20. 函数名:main()
  21. 入口参数:无
  22. 出口参数:无
  23. 功能:冒泡排序法实例
  24. 说明:通过LED显示排序后的数居
  25. 作者:老马识途单片机
  26. 日期:2017年12月19日
  27. ****************************************/
  28. void main()
  29. {
  30. unsigned char ucCounter;
  31. while(1)
  32. {
  33. //ucCounter = 0;
  34. for(ucCounter=0;ucCounter<10;ucCounter++)
  35. {
  36. //排序后,依次把数组的值赋给P0端口
  37. MaoPao(uiBuffer);
  38. P0 = uiBuffer[ucCounter];
  39. Delay(50000);
  40. }
  41. }
  42. }
  43. /*****************************************
  44. 函数名:Delay()
  45. 入口参数:uiBufferData,待排序的数组
  46. 出口参数:uiBufferData,排序后的数组
  47. 功能:实现数组排序功能,升序排序
  48. 说明:将输入数组的数排序后输出
  49. 作者:老马识途单片机
  50. 日期:2017年12月19日
  51. ****************************************/
  52. void MaoPao(unsigned char uiBufferData[10])
  53. {
  54. int i,j,t;
  55. //外循环控制排序循环次数
  56. for(i=0;i < 10;i++)
  57. {
  58. //内循环控制每次循环比较的次数
  59. for(j=i+1;j < 10;j++)
  60. {
  61. //两个元素比较,逆序则交换
  62. if(uiBufferData[i]
  63. {
  64. t=uiBufferData[i];
  65. uiBufferData[i]=uiBufferData[j];
  66. uiBufferData[j]=t;
  67. }
  68. }
  69. }
  70. }
  71. /*****************************************
  72. 函数名:Delay()
  73. 入口参数:ucDelayTimer,延时时间长度
  74. 出口参数:无
  75. 功能:实现延时功能
  76. 说明:延时时间可根据入口参数调整
  77. 作者:老马识途单片机
  78. 日期:2017年12月19日
  79. ****************************************/
  80. void Delay(unsigned int ucDelayTimer)
  81. {
  82. for(;ucDelayTimer > 0;ucDelayTimer--);
  83. }
复制代码



二、硬件电路

三、程序装载

四、关键器件参数设置

本电路中主要器件是LED光柱,其电压和电流参数配置如下,需要说明的是,该参数只是能让光柱点亮的值,并不是标准参考值。

五、运行效果

下图是某一时刻程序的执行结果,可以看到对应的LED光柱点亮了。


本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-9-19 11:10 , Processed in 0.157211 second(s), 11 queries , Gzip On, Redis On.

Powered by EEWORLD电子工程世界

© 2018 http://bbs.eeworld.com.cn/

返回顶部