此内容由EEWORLD论坛网友tiankai001原创,如需转载或用于商业用途需征得作者同意并注明出处
简介:
系列文章《常用的10种算法实例》列举了单片机C语言中的十种常用算法:冒泡法;回文法;幂运算;加法运算;求直角三角形变长等,目的是为了使大家熟悉单片机C语言的常用算法。
本例采用冒泡排序算法,将数组中的数据按照从高到底,或者从低到高的顺序排列。
(程序中将数据按升序排序)
一、程序设计
本电路在proteus仿真环境下搭建,可以直接使用。二、硬件电路
- /************************************************************
- 文件:main.c
- 功能:常用的10种算法实例之一冒泡排序算法
- 描述:将排序后的数据依次通过LED排序
- 作者:老马识途单片机
- 日期:2017年12月19日
- 编译环境:Keil C51 uVirsion 4.72.9.0
- 硬件环境:Proteus 8.0
- 主芯片:AT89S51
- 晶振:11.0592MHz
- ***********************************************************/
- #include <reg52.h> //
- #include <stdio.h>
- //全局变量声明
- unsigned char uiBuffer[10]={0x11,0x55,0x88,0x22,0x66,0x99,0x33,0x44,0x77,0x00};
- //函数声明
- void Delay(unsigned int ucDelayTimer);
- void MaoPao(unsigned char uiBufferData[10]);
- /*****************************************
- 函数名:main()
- 入口参数:无
- 出口参数:无
- 功能:冒泡排序法实例
- 说明:通过LED显示排序后的数居
- 作者:老马识途单片机
- 日期:2017年12月19日
- ****************************************/
- void main()
- {
- unsigned char ucCounter;
- while(1)
- {
- //ucCounter = 0;
- for(ucCounter=0;ucCounter<10;ucCounter++)
- {
- //排序后,依次把数组的值赋给P0端口
- MaoPao(uiBuffer);
- P0 = uiBuffer[ucCounter];
- Delay(50000);
- }
- }
- }
- /*****************************************
- 函数名:Delay()
- 入口参数:uiBufferData,待排序的数组
- 出口参数:uiBufferData,排序后的数组
- 功能:实现数组排序功能,升序排序
- 说明:将输入数组的数排序后输出
- 作者:老马识途单片机
- 日期:2017年12月19日
- ****************************************/
- void MaoPao(unsigned char uiBufferData[10])
- {
- int i,j,t;
- //外循环控制排序循环次数
- for(i=0;i < 10;i++)
- {
- //内循环控制每次循环比较的次数
- for(j=i+1;j < 10;j++)
- {
- //两个元素比较,逆序则交换
- if(uiBufferData[i]<uiBufferData[j])
- {
- t=uiBufferData[i];
- uiBufferData[i]=uiBufferData[j];
- uiBufferData[j]=t;
- }
- }
- }
- }
- /*****************************************
- 函数名:Delay()
- 入口参数:ucDelayTimer,延时时间长度
- 出口参数:无
- 功能:实现延时功能
- 说明:延时时间可根据入口参数调整
- 作者:老马识途单片机
- 日期:2017年12月19日
- ****************************************/
- void Delay(unsigned int ucDelayTimer)
- {
- for(;ucDelayTimer > 0;ucDelayTimer--);
- }
复制代码
二、硬件电路
三、程序装载
四、关键器件参数设置
本电路中主要器件是LED光柱,其电压和电流参数配置如下,需要说明的是,该参数只是能让光柱点亮的值,并不是标准参考值。
五、运行效果
下图是某一时刻程序的执行结果,可以看到对应的LED光柱点亮了。