|
單片機(jī)源程序如下:
- #include<stc15f2k60s2.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint i;
- uint ss_data=0;
- uint SS=0;
- uchar num=0;
- uchar code tab[]={0xc0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0Xc6,0Xa1,0X86,0X8e};//ROM
- void delayms(int ms);
- void keyscan16();
- void Timer0Init(void);
- void main()
- {
- Timer0Init();
- EA=1;
- P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //板子初始化程序 ,以后講
- P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF; //數(shù)碼管初始化程序,以后講
- P0=tab[0];
- while(1)
- {
- keyscan16();
- }
- }
- void keyscan16()
- {
- uchar temp;
- P44=0;P42=1;P3=0X7F;
- temp=P3;
- temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
- if(temp!=0x0f)
- {
- delayms(5);
- temp=P3;
- temp=temp&0X0F;
- if(temp!=0x0f)
- {
- temp=P3;
- ET0=1;
- switch(temp)
- {
- case 0x7e: ss_data=800;break;
- case 0x7d: ss_data=400;break;
- case 0x7b: ss_data=200;break;
- case 0x77: ss_data=100;break;
- }
- while(temp!=0x0f)
- {
- temp=P3;
- temp=temp&0X0F;
- }
- }
- }
- P44=1;P42=0;P3=0XBF;//1011 111
- temp=P3;
- temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
- if(temp!=0x0f)
- {
- delayms(5);
- temp=P3;
- temp=temp&0X0F;
- if(temp!=0x0f)
- {
- temp=P3;
- switch(temp)
- {
- case 0xBe: P0=tab[0];break;//1111 1110 P37----p30
- case 0xBd: P0=tab[5];break;//1111 1101
- case 0xBb: P0=tab[6];break;
- case 0xB7: P0=tab[7];break;
- }
- while(temp!=0x0f)
- {
- temp=P3;
- temp=temp&0X0F;
- }
- }
- }
- P3=0XDF;P44=1;P42=1;//1101 1111
- temp=P3;
- temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
- if(temp!=0x0f)
- {
- delayms(5);
- temp=P3;
- temp=temp&0X0F;
- if(temp!=0x0f)
- {
- temp=P3;
- switch(temp)
- {
- case 0xDe: P0=tab[8];break;//1111 1110 P37----p30
- case 0xDd: P0=tab[9];break;//1111 1101
- case 0xDb: P0=tab[10];break;
- case 0xD7: P0=tab[11];break;
- }
- while(temp!=0x0f)
- {
- temp=P3;
- temp=temp&0X0F;
- }
- }
- }
- P3=0XEF;P44=1;P42=1;//1101 1111
- temp=P3;
- temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
- if(temp!=0x0f)
- {
- delayms(5);
- temp=P3;
- temp=temp&0X0F;
- if(temp!=0x0f)
- {
- temp=P3;
- switch(temp)
- {
- case 0xEe: P0=tab[0];break;//1111 1110 P37----p30
- case 0xEd: P0=tab[2];break;//1111 1101
- case 0xEb: P0=tab[4];break;
- case 0xE7: P0=tab[6];break;
- }
- while(temp!=0x0f)
- {
- temp=P3;
- temp=temp&0X0F;
- }
- }
- }
- }
- void Timer0Init(void) //5毫秒@11.0592MHz
- {
- // AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式 AUXR =AUXR|0x80; 0010 1010 | 1000 0000 = 1010 1010
- // TMOD &= 0xF0; //設(shè)置定時(shí)器模式 // TMOD = TMOD&0xF0; 1010 1010 & 1111 0000 = 1010 0000
- AUXR=0X80;
- TMOD=0XF0;//11.0592MHz 55296 5MS 65536-55296=10240
- TL0 = 0x00; //設(shè)置定時(shí)初值
- TH0 = 0x28; //設(shè)置定時(shí)初值
- TF0 = 0; //清除TF0標(biāo)志
- TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
- }
- void time0(void) interrupt 1
- {
- SS=SS+1;
- if(SS==ss_data)
- {
- SS=0;
- P0=tab[num];
- num++;
- if(num==16)num=0;
- }
- }
- void delayms(int ms)
- {
- int i,j;
- for(i=ms;i>0;i--)
- for(j=845;j>0;j--);
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|