![]() |
發布時間: 2019-3-19 20:31
正文摘要:要求:通過鍵盤任意輸入8個數字,實時按照輸入順序依次從左到右在數碼管上顯示。 下面是我自己寫的代碼#include <reg51.h>#define uint unsigned int#define uchar unsigned charuint i,button,temp,num,j=0, ... |
給你把程序改好了,用冒泡法排序。希望能對你有所幫助。![]()
|
冷瞳啊 發表于 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--); } |
把數據存在數組中,在進行“冒泡排序”,“快速排序”.... |
用數組,然后,全部獨個比較,變換大小位置,幾個循環后就好了。 |