|
- #include "reg51.h"
- #include "stdio.h"
- sbit STB = P1^2;
- sbit CLK = P1^0;
- sbit DIN = P1^1;
- void vfd_cmd (unsigned char vfd_cmd0);
- /* 寫命令*/
- void vfd_wrdata (unsigned char vfd_wrdata0);
- /* 寫數(shù)據(jù) */
- void vfd_init (void);
- /* PT6311初始化 */
- unsigned char vfdbuf[]={0,0,0,0,21,8};
- code unsigned char vfdmap[]={0xf7, 0xa4, 0xeb,
- 0xed, 0xbc, 0xdd, 0xdf, 0xe4, 0xff, 0xfd};
- unsigned char
- g11[]={0x64,0x89,0x32,0x64,0xa9,0x32,0x64,0xa9,0x32};
- unsigned char
- g12[]={0x26,0x48,0x91,0x26,0x48,0x01,0x02,0x00,0x91};
- //unsigned char
- g21[]={0xff,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00};
- //unsigned char
- g22[]={0xff,0x40,0x00,0x00,0x80,0x00,0x00,0x00,0x00};
- //unsigned char
- g31[]={0xff,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x00};
- //unsigned char
- g32[]={0xff,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x10};
- //unsigned char
- g41[]={0xff,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00};
- //unsigned char
- g42[]={0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
- //unsigned char
- g51[]={0xff,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x00};
- //unsigned char
- g52[]={0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
- unsigned char
- g61[]={0xff,0x02,0x04,0x08,0x10,0x00,0x00,0x00,0x00};
- unsigned char
- g62[]={0xff,0x00,0x00,0x00,0x00,0x10,0x20,0x40,0x80};
- void delay(unsigned char cnt)
- {
- unsigned char i;
- while(cnt--!=0)
- for(i=100;i!=0;i--);
- }
- #define tick 7554
- #define T100us (256-134)
- unsigned char hour, minute, second;
- unsigned int c100us;
-
-
- void vfd_cmd ( unsigned char vfd_cmd0 )
- /* 寫控制命令子程序 */
- {
- unsigned char i;
- STB=1;
- CLK=1;
- for ( i=0;i<8;i++ )
- {
- STB=0;
- CLK=0;
- DIN = vfd_cmd0&0x01;
- CLK=1;
- vfd_cmd0>>=1;
- }
- STB=1;
- CLK=1;
- }
- void vfd_wrdata ( unsigned char vfd_wrdata0 )
- /* 寫數(shù)據(jù)子程序 */
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- CLK=1;
- STB=0;
- CLK=0;
- DIN=vfd_wrdata0&0x01;
- CLK=1;
- vfd_wrdata0>>=1;
- }
- STB=0;
- CLK=1;
- }
- void vfd_init(void)
- {
- vfd_cmd ( 0x3a );
- /* 6digits,16segments顯示模式 */
- vfd_cmd ( 0x70 );
- /* 顯示正常模式,數(shù)據(jù)地址遞增 */
-
- vfd_wrdata ( 0xc0 );
- /* 設(shè)置地址從00H開始 */
- }
- void timer0() interrupt 1
- {
- c100us--;
- if(c100us==0)
- {
- c100us=tick;
- second++;
- if(second==60)
- {
- second=0;
- minute++;
- if(minute==60);
- {
- minute=0;
- hour++;
- if(hour==24)
- {hour=0;}
- }
- }
- }
- }
- void vfd_wrtime ()
- {unsigned int i;
- vfdbuf[0]=vfdmap[hour/10];
- vfdbuf[1]=vfdmap[hour%10];
- vfdbuf[2]=vfdmap[minute/10];
- vfdbuf[3]=vfdmap[minute%10];
- vfdbuf[4]=vfdmap[second/10];
- vfdbuf[5]=vfdmap[second%10];
- vfd_init( );
- i=0;
- vfd_wrdata ( g11[i] );
-
- vfd_wrdata ( g12[i] );
-
-
- vfd_wrdata ( vfdbuf[0] ); //2G 分的十位
- vfd_wrdata ( 0x00 );
-
-
- vfd_wrdata ( vfdbuf[1] ); //3G 分的個位
- vfd_wrdata ( 0x00 );
-
-
- vfd_wrdata ( vfdbuf[4] ); //4G 秒的十位
- vfd_wrdata ( 0x00 );
-
- vfd_wrdata ( vfdbuf[5] ); //5G 秒的個位
- vfd_wrdata ( 0x00 );
-
- vfd_wrdata ( g61[i] ); //6G
- vfd_wrdata ( g62[i] );
-
- i++;
-
- STB=1;
- delay(1000);
- vfd_cmd ( 0x8f ); /* 顯示開,14/16脈寬
- */
- }
-
- void main()
- {
- EA=1;ET0=1;
- TMOD=0x02;
- TH0=T100us;
- TL0=T100us;
- hour=0;
- second=0;
- c100us=tick;
- TR0=1;
-
- while(1)
- {vfd_wrtime();
- delay(1);
- }
-
- }
復(fù)制代碼
|
|