|
- #include<reg52.h>
- #include<intrins.h>
- typedef unsigned int u16;
- typedef unsigned char u8;
- sbit pinDIN=P0^0; //?????????????
- sbit pinLOAD=P0^1; //?????????
- sbit pinCLK=P0^2; //????????
- #define uchar unsigned char
- uchar code LEDcode[]=
- {0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00 /*0,1,2,3,4,5,6,7,8,9,???*/
- /* 0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x67,0x3e,0xff, */ }; /*A,B,C,D,E,F,P,U,???*/
- unsigned int motor1=0;
- unsigned int a=0;
- unsigned int b=0;
- u8 ssec,sec,min;
- void Timer0Init()
- {
- TMOD|=0X01;//?????????0???????????1??????TR0???????
- TH0=0Xd8; //?????????????????10ms
- TL0=0Xf0;
- ET0=1;//???????0?ж?????
- EA=1;//?????ж?
- TR0=1;//???????
- }
- void Int0Init()
- {
- //????INT0
- IT0=1;//????????????????????
- EX0=1;//??INT0???ж??????
- EA=1;//?????ж?
- }
- /**************************************************
- * ??MAX7219д??????8λ?????? *
- ***************************************************/
- void sendbyte (uchar dat)
- {
- uchar i,temp;
- _nop_();
- for (i=0;i<8;i++)
- {
- temp=dat&0x80;
- dat=dat<<1;
- if(temp)
- pinDIN=1;
- else
- pinDIN=0;
- pinCLK=0;
- _nop_();
- pinCLK=1;
- }
- }
- /**************************************************
- * ??MAX7219д????????????16λ?? *
- ***************************************************/
- void sendword (uchar addr,uchar dat)
- {
- pinLOAD=0;
- _nop_();
- sendbyte (addr);
- _nop_();
- sendbyte (dat);
- _nop_();
- pinLOAD=1; //??16?????????????17???????????????pinCLK??????????????
- }
- /**************************************************
- * MAX7219????? *
- ***************************************************/
- void init7219 (void)
- {
- sendword (0x0c,0x01); /* ???????????? */
- sendword (0x0a,0x09); /* ???????? 19/32 */
- sendword (0x0b,0x07); /* ?????????? */
- sendword (0x09,0x00); /* ?????????? */
- sendword (0x0f,0x00); /*??????? 00???????????*/
- }
- /**************************************************
- * MAX7219?????? *
- ***************************************************/
- void clear7219(void)
- {
- uchar i;
- for(i=8;i>0;i--)
- {
- sendword(i,0x00);
- }
- }
-
- //??????
- void main(void)
- {
- Timer0Init();
- Int0Init();
- init7219 ();
- //clear7219();
- while(1)
- {
-
- clear7219();
- sendword(0x01,LEDcode[sec%10]);
- sendword(0x02,LEDcode[sec/10]|0x80);
- sendword(0x03,LEDcode[0]);
- sendword(0x04,LEDcode[min%10]);
- sendword(0x05,LEDcode[b%10]);
- sendword(0x06,LEDcode[b/10]);
- sendword(0x07,LEDcode[0]);
- sendword(0x08,LEDcode[0]);
- }
- }
- void Timer0() interrupt 1
- {
- TH0=0Xd8; //?????????????????10ms
- TL0=0Xf0;
- ssec++;
- if(ssec>=100) //1s
- {
- ssec=0;
- sec++;
- if(sec>=60)
- {
- sec=0;
- min++;
- if(min>=60)
- {
- min=0;
- }
- }
- }
- }
- void Int0() interrupt 0
- {
- motor1++;
- if(motor1==20)
- {
- motor1=0;
- a++;
- b=a*6;
- }
- if(b>=99)
- b=0;
- }
復(fù)制代碼
|
|