給你把程序改好了,用冒泡法排序。希望能對你有所幫助。
- #include <reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code key_table[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb};//鍵碼
- uchar code dula_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段碼
- uchar code wela_table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位碼
- uchar numn[8];//緩存
- uchar nums[8];//緩存
- void keyscan() //按鍵掃描
- {
- static uchar count=0;//消抖計數
- static bit sign=0;//按鍵自鎖標志
- uchar i,j,temp;//臨時變量
- P3=0xf0;
- if(P3!=0xf0)
- {
- if((++count>=20)&&(sign==0))
- {
- sign=1;
- temp=P3;
- P3=temp|0x0f;
- temp=P3;
- for(i=0;i<10;i++)
- {
- if(temp==key_table[i])
- {
- for(j=7;j>0;j--)
- numn[j]=numn[j-1];//按輸入順序移位保存鍵值,超出拋棄
- numn[0]=i; //保存最后輸入鍵值
- for(j=0;j<8;j++)
- {
- nums[j]=numn[j];//轉移有效數據
- }
- break;
- }
- }
- }
- }
- else //鍵抬起
- {
- count=0;//計數清0
- sign=0;//自鎖清0
- }
- }
- void Line_up()//冒泡法排序程序
- {
- uchar i, j, temp;
- for(i=0; i<8-1; i++)
- {
- for(j=0;j<8-1-i;j++)
- {
- if(nums[j]>nums[j+1])
- {
- temp=nums[j];
- nums[j]=nums[j+1];
- nums[j+1]=temp;
- }
- }
- }
- }
- void display()//動態顯示程序
- {
- static uchar i=0;
- P0=0x00;//消隱
- P2=wela_table[i];//位碼
- P0=dula_table[nums[i]];//段碼
- if(++i==8)
- i=0;
- }
- void main()
- {
- while(1)
- {
- keyscan();//按鍵掃描
- Line_up();//排序程序
- display();//顯示程序
- }
- }
復制代碼
|