0

主题

3

好友

377

积分

业余侠客 当前离线

Rank: 4

UID
27659
帖子
623
精华
0
经验
377 点
金钱
377 ¥
注册时间
2007-9-24
发表于 2011-1-18 22:32 | 显示全部楼层
基于AT89S52的PT6311 驱动VFD显示
在网上下了个VFD程序:  
#i nclude "reg51.h"
#i nclude "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);            /*  写数据 */


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 )               /*   写数据子程序  */
{
   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 );                                       /* 显示正常模式,数据地址递增  */
    vfd_wrdata ( 0xc0 );                                    /*    设置地址从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 );                                       
     vfd_wrdata ( g12 );
   

    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 );    //6G
    vfd_wrdata ( g62 );
   
    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);
  }
}   
因小弟是初涉单片机(菜鸟)只看懂89S52输出至PT6311的这几个定义脚:sbit  STB = P1^2;
sbit  CLK = P1^0;
sbit  DIN = P1^1;
看不懂89S52接CD机的输入脚定义?
哪位知道的赐教下,谢谢!

7

主题

1

好友

97

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
130455
帖子
205
精华
0
经验
97 点
金钱
93 ¥
注册时间
2009-9-8
发表于 2011-1-18 22:39 | 显示全部楼层
不懂,帮顶

56

主题

12

好友

6087

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7495
精华
0
经验
6087 点
金钱
5744 ¥
注册时间
2008-10-20
发表于 2011-1-18 22:55 | 显示全部楼层
你要说用在哪里,做什么用,要实现什么功能,我才知道你的代码干吗用啊。

0

主题

3

好友

377

积分

业余侠客 当前离线

Rank: 4

UID
27659
帖子
623
精华
0
经验
377 点
金钱
377 ¥
注册时间
2007-9-24
 楼主| 发表于 2011-1-18 23:07 | 显示全部楼层
你要说用在哪里,做什么用,要实现什么功能,我才知道你的代码干吗用啊。
卡西利亚斯 发表于 2011-1-18 22:55

想试试CDM4的

0

主题

3

好友

377

积分

业余侠客 当前离线

Rank: 4

UID
27659
帖子
623
精华
0
经验
377 点
金钱
377 ¥
注册时间
2007-9-24
 楼主| 发表于 2011-1-18 23:15 | 显示全部楼层
手里有几片DVD的PT6311荧光屏板子,想试试下

56

主题

12

好友

6087

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7495
精华
0
经验
6087 点
金钱
5744 ¥
注册时间
2008-10-20
发表于 2011-1-19 00:04 | 显示全部楼层
想试试CDM4的
刘志谦OKK 发表于 2011-1-18 23:07


试试用int1 触发记时,用io轮询CD状态。

0

主题

3

好友

377

积分

业余侠客 当前离线

Rank: 4

UID
27659
帖子
623
精华
0
经验
377 点
金钱
377 ¥
注册时间
2007-9-24
 楼主| 发表于 2011-1-19 19:04 | 显示全部楼层
[quote]

试试用int1 触发记时,用io轮询CD状态。
卡西利亚斯 发表于 2011-1-19 00:04 [/quoti

io是into吗?

56

主题

12

好友

6087

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7495
精华
0
经验
6087 点
金钱
5744 ¥
注册时间
2008-10-20
发表于 2011-1-19 19:08 | 显示全部楼层
IO是PORT

0

主题

3

好友

377

积分

业余侠客 当前离线

Rank: 4

UID
27659
帖子
623
精华
0
经验
377 点
金钱
377 ¥
注册时间
2007-9-24
 楼主| 发表于 2011-1-19 19:24 | 显示全部楼层
IO是PORT
卡西利亚斯 发表于 2011-1-19 19:08


初哥看不懂,老兄能解释清楚点吗?谢谢!

56

主题

12

好友

6087

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7495
精华
0
经验
6087 点
金钱
5744 ¥
注册时间
2008-10-20
发表于 2011-1-19 19:38 | 显示全部楼层
你这个程序是一个用time0来记数并显示当前时分秒的东西,类似秒表。
那么你需要CD给一个信号来标志开始记时,暂停记时,结束记时。

0

主题

3

好友

377

积分

业余侠客 当前离线

Rank: 4

UID
27659
帖子
623
精华
0
经验
377 点
金钱
377 ¥
注册时间
2007-9-24
 楼主| 发表于 2011-1-19 20:11 | 显示全部楼层
09112023340815274f5e463022.rar (3.17 KB, 下载次数: 558)

0

主题

3

好友

377

积分

业余侠客 当前离线

Rank: 4

UID
27659
帖子
623
精华
0
经验
377 点
金钱
377 ¥
注册时间
2007-9-24
 楼主| 发表于 2011-1-19 21:19 | 显示全部楼层
试试用int1 触发记时,用io轮询CD状态。
卡西利亚斯 发表于 2011-1-19 00:04


回头烧下程序试试,谢谢老兄赐教!

65

主题

9

好友

1403

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
159134
帖子
2871
精华
0
经验
1403 点
金钱
1370 ¥
注册时间
2009-12-28
发表于 2011-2-24 18:21 | 显示全部楼层
如果是汇编就能看懂

3

主题

0

好友

69

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
285441
帖子
77
精华
0
经验
69 点
金钱
69 ¥
注册时间
2011-1-23
发表于 2011-2-24 20:10 | 显示全部楼层
看不动,干瞪眼

57

主题

4

好友

625

积分
     

职业侠客 当前离线

灵山-小方

Rank: 5Rank: 5

UID
45551
帖子
1820
精华
0
经验
625 点
金钱
541 ¥
注册时间
2008-6-16
发表于 2011-2-24 20:58 | 显示全部楼层
这个程序只是一部分而已,这是显示部分的程序,读写CD信号的程序应该在“#i nclude "stdio.h"”这个文件里面

65

主题

9

好友

1403

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
159134
帖子
2871
精华
0
经验
1403 点
金钱
1370 ¥
注册时间
2009-12-28
发表于 2011-2-25 12:03 | 显示全部楼层
这图看了不太理解!共同学习学习
pt6312.jpg

45

主题

7

好友

1178

积分

侠之大者 当前离线

Rank: 6Rank: 6

UID
18757
帖子
1815
精华
0
经验
1178 点
金钱
1091 ¥
注册时间
2007-2-10
发表于 2011-2-25 13:02 | 显示全部楼层
软件的看不懂,帮顶上,希望有好结果!

98

主题

10

好友

878

积分
     

职业侠客 当前离线

DIY爱好者

Rank: 5Rank: 5

UID
264167
帖子
1779
精华
0
经验
878 点
金钱
755 ¥
注册时间
2010-11-22

认证会员

发表于 2013-3-22 09:51 | 显示全部楼层
搞定了没有啊?我也搞到一个这样的显示屏
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部