9949|5

6366

帖子

4917

TA的资源

版主

楼主
 

单片机C语言-十种常用算法实例(1)冒泡法排序 [复制链接]




此内容由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 <reg52.h> //
  13. #include <stdio.h>
  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]<uiBufferData[j])
  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光柱点亮了。


此帖出自51单片机论坛

最新回复

好,精彩  详情 回复 发表于 2019-1-30 16:38
点赞 关注(1)
 

回复
举报

257

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
LZ可以说下这些算法在实际中的应用;
此帖出自51单片机论坛
 
 
 

回复

1903

帖子

0

TA的资源

版主

板凳
 
兄弟,又有新知识点了,支持
此帖出自51单片机论坛
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(中级)

4
 
好,精彩
此帖出自51单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
谢谢分享~
此帖出自51单片机论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

6
 
好,精彩
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表