单片机/MCUwilliam hill官网
直播中

chimple

12年用户 24经验值
擅长:嵌入式技术
私信 关注
[问答]

冒泡排序仿真可行,硬件显示出错

#include "bubblesort.h"
#include "LCD12864.h"
#include "delay.h"

#define uchar unsigned char

extern uchar xdata window[16];
extern uchar xdata Line_1[16] ;
extern uchar xdata Line_2[16] ;
extern uchar xdata Line_3[16] ;


unsigned int bubblesort(table *tab)
{
        uchar i,j,done;
        i=0;
        done=1;
        while(i<=tab->length&&done)  //最多进行tab->length次冒泡,没发生交换结束
        {
                done = 0;
                for(j=1;jlength-i;j++)                        //将R[0]作为临时交换空间
                        if(tab->R[j+1].key > tab->R[j].key)
                {
                        tab->R[0]   = tab->R[j];
                        tab->R[j]   = tab->R[j+1];
                        tab->R[j+1] = tab->R[0];
                        done = 1;
                }
                i++;
        }
        return tab->R[1].key*1000 + tab->R[1].value;
}

void insert(table *tab,keytype k,Vtype v)  
{
        uchar pos=MAXSIZE;                        //从最末尾插入值
        tab->R[pos].key   = k;
        tab->R[pos].value = v;
        tab->length = pos;
}

void main()
{
        unsigned int Buffer[8];
        unsigned char a;
        table *pTab,tab;
        pTab = &tab;
        insert(pTab,1,1);
        bubblesort(pTab);
        insert(pTab,2,234);
        bubblesort(pTab);
        insert(pTab,3,234);       
        bubblesort(pTab);
        insert(pTab,3,235);
        bubblesort(pTab);
        Buffer[0] = pTab->R[1].key;
        Buffer[1] = pTab->R[1].value;       
        Buffer[2] = pTab->R[2].key;
        Buffer[3] = pTab->R[2].value;       
        Buffer[4] = pTab->R[3].key;
        Buffer[5] = pTab->R[3].value;       
        Buffer[6] = pTab->R[4].key;
        Buffer[7] = pTab->R[4].value;

        Line_2[3] = Buffer[0] + 48;
        Line_2[5] = Buffer[2] + 48;       
        LCD12864_init_char();
        while(1)
        {
                LCD12864_Display_char(1,0,Line_2);
        }
}

结构体是这样定义的
#define MAXSIZE 30
typedef unsigned char keytype;typedef unsigned int  Vtype;
typedef struct{        keytype key;                //排序码        Vtype value;                //对应值}xdata recordtype;
typedef struct{        recordtype R[MAXSIZE+1];        unsigned int length;}xdata table;
软件上仿真看,数据是对的,可是用12864显示值不对。不知道哪里出了错,希望帮忙找下问题,不胜感激。


  • 仿真图.jpg
已退回3积分

回帖(4)

刘佳文

2014-4-23 20:53:23
硬件飘过  不懂程序
举报

chimple

2014-4-23 21:24:26
唉~在线等啊!!
举报

黄伟志

2014-4-23 23:06:29
冒泡部分是跟LCD无关的, LCD不过是显示传递给它的内容而已,所以你可以在调用LCD显示前,通过串口把你要显示的已冒泡的数组内容发送出来,或者直接硬件仿真看。冒泡结果对则说明是你本身LCD的函数有问题
举报

chimple

2014-4-24 09:54:37
引用: bj2008wyou 发表于 2014-4-23 23:06
冒泡部分是跟LCD无关的, LCD不过是显示传递给它的内容而已,所以你可以在调用LCD显示前,通过串口把你要显 ...

好的,谢谢。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分