剛學不喜勿碰.
單片機源程序如下:
- #include "SN8F5702.h"
- typedef unsigned char u8;
- typedef unsigned int u16;
- sbit LED=P1^2;
- sbit K1=P1^3;
- u8 code array[4]={0xff,0xff,0xff,0xff};
- u8 key_shake,j,flag,start,i,a,succ,dat;
- //key_shake°′¼üÏû¶¶ j°′¼ü2»Öظ′±äá¿ flag±ê¼Ç°′¼ü°′ÏÂ2Å·¢éä startÆô¶ˉ·¢éä a·¢Ëíμú¼¸¸öêy×é succ·¢éä3é1|±ê¼Ç datêy¾Y
- u16 delay,delay_1,delay_2,time;
- //delay·¢éäòyμ¼ÂëμÄÑóê± delay_1·¢éä¸ß1μÄÑóê± delay_2·¢éäμí0μÄÑóê± time·¢éäêy¾Y8¸ö×Ö½úμıäá¿
- void Timer0Tnit()
- {
- TMOD|=0X01; //Ñ¡ÔñÎa¶¨ê±Æ÷0ģ꽣¬1¤×÷·½ê½1£¬½öóÃTR0′ò¿aÆô¶ˉ¡£
- TH0=0Xff;
- TL0=0X7f; //¸ø¶¨ê±Æ÷¸33õÖ죬¶¨ê±100us
-
- ET0=1; //′ò¿a¶¨ê±Æ÷0ÖD¶ÏÔêDí
- EAL=1; //′ò¿a×üÖD¶Ï
- TR0=1; //′ò¿a¶¨ê±Æ÷
- }
- void key()//°′¼ü
- {
- if(!K1)
- {
- if(!j)
- {
- key_shake++;
- if(key_shake>=250)
- {
- key_shake=0;
- flag=1;
- }
- }
- }
- else
- {
- key_shake=0;
- }
- }
- void Writeh()//·¢éä¸ß1
- {
- delay_1++;
- if(delay_1>=5)
- {
- LED=0;
- if(delay_1>=20)
- {
- delay_1=0;
- succ=1;
- }
- }
- else
- {
- LED=1;
- }
- }
- void Writel()//·¢éäμí0
- {
- delay_2++;
- if(delay_2>=5)
- {
- LED=0;
- if(delay_2>10)
- {
- delay_2=0;
- succ=1;
- }
- }
- else
- {
- LED=1;
- }
- }
- void Emiss()
- {
- if((dat&0x01)==0x01)//′ó×îμíλ¿aê¼·¢
- {
- Writeh();
- }
- else
- {
- Writel();
- }
- if(succ==1)
- {
- succ=0;
- dat>>=1;
- time++;
- if(time>=8)
- {
- time=0;
- a++;
- dat=array[a];
- if(a==5)
- {
- a=0;
- dat=array[a];
- flag=0;
- start=0;
- }
- }
- }
- }
- void EmissionInit()
- {
- switch(start)
- {
- case(0):
- LED=1;
- delay++;
- if(delay>=90)
- {
- delay=0;
- start=1;
- LED=0;
- }
- break;
- case(1):
- LED=0;
- delay++;
- if(delay>=45)
- {
- delay=0;
- start=2;
- }
- break;
- case(2):
- Emiss();
- break;
- }
- }
- void main()
- {
- CLKSEL = 0x06; // Fcpu = 32M/2 = 16M
- CLKCMD = 0X69;
- CKCON = 0X10; // Wait 2 Cycle From = 8M
-
- //-----IO init -----//
- P0M = 0xFf; //1111 111
- P0 = 0x00;
- P0UR = 0x00;
-
- P1M = 0xF7; //1111 0111 ′ò¿a°′¼üIO¿ú½óêÕ
- P1 = 0x00;
- P1UR = 0x08;
- P1W = 0x00;
-
- P2M = 0xFf; //0000 0011
- P2 = 0x00;
- P2UR =0x00;
-
- _nop_();
- Timer0Tnit();
- dat=array[a];
- while(1);
- }
- void Timer0()interrupt ISRTimer0
- {
- TH0=0xff;
- TL0=0x7f;
- key();
- if(flag==1)
- {
- EmissionInit();
- }
- }
復制代碼
|