#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit SER = P2^0; sbit SRCLK = P2^1; sbit SRCLR = P2^2; sbit RRCLK = P2^3; sbit E = P2^4; sbit KEY1=P3^0; sbit KEY2=P3^1; sbit KEY3=P3^2; sbit KEY4=P3^3; uchar code table595[]={0x30,0x7e,0x29,0x2c,0x66,0xa4,0xa0,0x3e,0x20,0x24}; uchar code Table[]={0xee,0xdd,0xbb,0x77};//P1 uchar code Led[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //P0 uchar flag,flag1,tt,i,j; //flag為手動、自動轉換 char m; void X74HC595(uchar a) { uchar i,temp; E = 1; _nop_(); _nop_(); E = 0; SRCLR = 1; temp=table595[a]; for(i=0;i<8;i++) { temp=_crol_(temp,1); SER = temp & 0x80; //SER連J9的1口 SRCLK = 0; _nop_(); SRCLK = 1; _nop_(); RRCLK= 0; _nop_(); RRCLK = 1; _nop_(); } } void delay(uchar b) { uchar x,y; for(x=110;x>0;x--) for(y=b;y>0;y--); } void X74HC573(uchar c,uchar d) { P1=Table[c]; P0=Led[d]; delay(5); } void init() { EA=1; ET0=1; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt=0; flag=0; //默認自動 TR0=1; //啟動定時器0 flag1=0;//自動時正常運行 X74HC595(m); X74HC573(0,0); } void exter() { flag=!flag; TR0=!TR0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; } void time() interrupt 1 { tt++; TH0=(65536-50000)/256; TL0=(65536-50000)%256; } void key() { if(KEY1==0||KEY2==0||KEY3==0||KEY4==0) { delay(5); if(KEY1==0) { exter(); while(!KEY1); } else if(KEY2==0&&flag==1) { if(i==3&&j==7) { i=0; j=0; X74HC573(0,0); } else if(j!=7) X74HC573(i,++j); else X74HC573(++i,0); X74HC595(++m); while(!KEY2); } else if(KEY3==0&&flag==0) { flag1=!flag1; TR0=!TR0; while(!KEY3); } else if(KEY4==0&&flag==1) { if(i==0&&j==0) { i=3; j=7; X74HC573(3,7); } else if(j!=0) X74HC573(i,--j); else { j=0; X74HC573(--i,0); } X74HC595(--m); while(!KEY4); } } } void main() { init(); while(1) { if(m>0&&m<9) key(); else if(m==0) { if(KEY4==0) m=10; key(); } else if(m==9) { if(KEY2==0) m=-1; key(); } if(tt==30&&flag==0) { tt=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(i==3&&j==7) { i=0; j=0; X74HC573(0,0); } else if(j!=7) X74HC573(i,++j); else { j=0; X74HC573(++i,0); } if(m<9) X74HC595(++m); else if(m==9) { m=0; X74HC595(m); } } } }