666.PNG (257.38 KB, 下載次數(shù): 70)
下載附件
2021-1-3 12:31 上傳
- #include<Reg52.h>
- int SELECT[8]={0X7F,0XBF,0XDF,0XEF,0XF7,0XFB,0XFD,0XFE}; //位選數(shù)組
- int LED[17]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71,0X40};
- //LED數(shù)碼管字形碼集合數(shù)組
- int SELECT1[2][4]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};//篩選異或結(jié)果集合數(shù)組
- int DISPLAY[8]={0X40,0X40,0X40,0X40,0X40,0X40,0X40,0X40};//初始化顯示數(shù)組
- int flag;
- void delay(int ms)
- {
- int i,j;
- for(i=ms;i>0;i--)
- for(j=110;j>0;j--);
- }
- //延時函數(shù) (1ms)
- void display(int wei,int L[])//wei為位選數(shù)目
- {
- int k;
- for(k=0;k<wei;k++){
- P0=SELECT[wei-1-k];
- P2=L[k];
- delay(1);
- P2=0X00;//消隱
- }
- }//顯示函數(shù)——P0位選,P2段選
- int button(int pp,int new)//p1為0X0F(篩選行)或0XF0(篩選列)
- { int a,p,q,m;//new為當(dāng)前P1端口按鍵狀態(tài),a為異或結(jié)果,p、q為循環(huán)計(jì)數(shù)變量,m為所在行、列
- if(new==pp)
- {flag=0;return flag;} //未有按鍵按下標(biāo)志
- else{
- delay(1);
- if(new!=pp)
- {
- a=new^pp;
- for(p=0;p<2;p++)
- for(q=0;q<4;q++)
- if(SELECT1[p][q]==a) m=q+1; //遍歷異或結(jié)果集合數(shù)組后找到所在行、列
- }
- return m;
- }//篩選出行或列
- }//判斷按鍵所在行列位置,P1為按鍵接口端
- void main()
- { int x,y,sum,n,temp;//x為行,y為列,sum為鍵值
- while(1){
- P1=0X0F;temp=P1;
- x=button(0X0F,temp);
- P1=0XF0;temp=P1;//用于判斷是否是新的按鍵值
- y=button(0XF0,temp);
- if(y==0)
- display(8,DISPLAY);
- else{
- flag++;
- sum=4*(x-1)+(y-1);
- if(flag==1)
- for(n=0;n<7;n++)
- DISPLAY[n]=DISPLAY[n+1];
- DISPLAY[7]=LED[sum];//更改顯示數(shù)組
- display(8,DISPLAY) ;
- }
- }
- }
- { uchar sound;
- for(sound=50;sound>0;sound--)
- {
- speaker=0;
- delay(1);
- speaker=1;
- delay(1);
- }}
復(fù)制代碼 |