给你把程序改好了,用冒泡法排序。希望能对你有所帮助。
|
冷瞳啊 发表于 2019-3-20 20:06 变量i就是从零到八的循环 第一次进入的switch就是你按键的次数并给显示缓存赋值 第二个问题就是消影。 |
HC6800-ES-V2.0 发表于 2019-3-20 14:26 请问一下 1.第一次进入main函数的时候switch(i) 是为什么,这里的i应该没有赋值啊。又是怎么从0到8循环的呢。 2.还有这里j=10; while(j--); GPIO_DIG=0x00; 这里是做了什么,每次都给j赋10的话while判定的时候一定为真啊 为什么每次要让数码管熄灭? |
| C语言有成型的排序比较方法,你只需要处理好键盘接收数据和屏幕显示数据就好了 |
|
#include<reg51.h> #define GPIO_DIG P0 #define GPIO_KEY P3 unsigned char code DIG_CODE[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char KeyValue; bit KeyState; unsigned char DisplayData[8]; void Delay10ms(); void KeyDown(); void DigDisplay(); void main(void) { unsigned char i; KeyState=0; while(1) { KeyDown(); if(KeyState==1) { switch (i) { case (0):DisplayData[7]=DIG_CODE[KeyValue];break; case (1):DisplayData[6]=DIG_CODE[KeyValue];break; case (2):DisplayData[5]=DIG_CODE[KeyValue];break; case (3):DisplayData[4]=DIG_CODE[KeyValue];break; case (4):DisplayData[3]=DIG_CODE[KeyValue];break; case (5):DisplayData[2]=DIG_CODE[KeyValue];break; case (6):DisplayData[1]=DIG_CODE[KeyValue];break; case (7):DisplayData[0]=DIG_CODE[KeyValue];break; } i++; if (i==8) { i=0; } KeyState=0; } DigDisplay(); } } void DigDisplay() { unsigned char i,j; for(i=0;i<8;i++) { switch(i) { case(0): P2=0xfe; break; case(1): P2=0xfd; break; case(2): P2=0xfb; break; case(3): P2=0xf7; break; case(4): P2=0xef; break; case(5): P2=0xdf; break; case(6): P2=0xbf; break; case(7): P2=0x7f; break; } GPIO_DIG=DisplayData[i]; j=10; while(j--); GPIO_DIG=0x00; } } void KeyDown(void) { unsigned char a=0; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f) { Delay10ms(); if(GPIO_KEY!=0x0f) { KeyState=1; switch(GPIO_KEY) { case(0X07): KeyValue=0;break; case(0X0b): KeyValue=1;break; case(0X0d): KeyValue=2;break; case(0X0e): KeyValue=3;break; } GPIO_KEY=0Xf0; Delay10ms(); switch(GPIO_KEY) { case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break; case(0Xd0): KeyValue=KeyValue+8;break; case(0Xe0): KeyValue=KeyValue+12;break; } while((a<200)&&(GPIO_KEY!=0xf0)) { Delay10ms(); a++; } a=0; } } } void Delay10ms(void) { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } |
| 把数据存在数组中,在进行“冒泡排序”,“快速排序”.... |
| 用数组,然后,全部独个比较,变换大小位置,几个循环后就好了。 |