访问电脑版页面

导航:老古开发网手机版其他

VFD应用初探[1]___键盘

导读:
关键字:

#include <reg51.h>
#include "cpu_cfg.h"
# define INT8U unsigned char

#define INT16U unsigned int

INT16U dd[]={0x069A,0x0280,0x061C,0x0694,0x0286,0x0496,0x049E,0x0680,0x069E,0x0696,0x0000};//0123456789
INT8U b[8];
sbit dout = P1^4;
sbit din = P2^2;
sbit clk  = P2^0;
sbit stb = P2^1;
//-------------------------------------------------------------------------------
void mdelay(unsigned int delaytime) //延时子程序
{int j=0;
   for(;delaytime>0;delaytime--)
         {for(j=0;j<125;j++){;}
         }
}
void senddata(INT8U dats) //串行传送数据子程序
{INT8U i;
for(i = 0; i < 8 ; i++)
        {
         clk = 0;
  din = dats&0x01;
  clk = 1;   //上升沿锁存
  dats = dats >> 1;
         }
}
//------------------------------------------------------------------------------
void vfddisplay(INT8U dress1,INT16U dat)
{ INT8U i;
 INT8U dat1=0x08; //显示模式设定9*19
 INT8U dat2=0x40;//确定地址模式
 //INT8U dat3=0xc9;//地址
 INT8U dat4=0x8f;  //控制开始显示
  stb=1;
  clk=1;
  stb=0;
 senddata(dat1);
 stb=1;
 stb=0;
 senddata(dat2);
 stb=1;
 stb=0;
 senddata(dress1);
 for(i = 0; i < 16 ; i++)
        {
         clk = 0;
  din = dat&0x0001;
  clk = 1;   //上升沿锁存
  dat = dat >> 1;
         }
 stb=1;
 stb=0;
 senddata(dat4);
 stb=1;

}

void fdisplay(long fv)
{INT8U n,dress=0xc0;
 INT8U a[9];
 a[0]=(int)(fv/100000000);
 a[1]=(int)((fv%100000000)/10000000);
 a[2]=(int)((fv%10000000)/1000000);
 a[3]=(int)((fv%1000000)/100000);
 a[4]=(int)((fv%100000)/10000);
 a[5]=(int)((fv%10000)/1000);
 a[6]=(int)((fv%1000)/100);
 a[7]=(int)((fv%100)/10);
 a[8]=(int)(fv%10);
 if(fv<100000000) a[0]=10; if(fv<10000000) a[0]=a[1]=10;if(fv<1000000) a[0]=a[1]=a[2]=10;
 if(fv<100000) a[0]=a[1]=a[2]=a[3]=10; if(fv<10000) a[0]=a[1]=a[2]=a[3]=a[4]=10;
 if(fv<1000)  a[0]=a[1]=a[2]=a[3]=a[4]=a[5]=10;if(fv<100)  a[0]=a[1]=a[2]=a[3]=a[4]=a[5]=a[6]=10;
 if(fv<10)  a[0]=a[1]=a[2]=a[3]=a[4]=a[5]=a[6]=a[7]=10;
 for(n=0; n < 9 ; n++)  {vfddisplay(dress,dd[a[n]]);dress=dress+3;}

}
//-------------------------------------------------------------------------------
void vfdkey(void)          //读键盘数据区子程序
{INT8U i,j;
 register keydat;
 INT8U keydat1=0x42;   //读keydata 01000010
 stb=1;
 clk=1;
 stb=0;
 senddata(keydat1);
 //mdelay(5);
 for(j=0 ; j < 6 ; j++)
 { stb=0;
 for(i=0;i<8;i++)
   { clk=0;
     keydat=(keydat<<1) din;
     clk=1;
   }
    fdisplay(j);
   mdelay(1000);
  fdisplay(keydat);
  mdelay(1000);
  stb=1;
 }
 
 stb=1;
 //vfddisplay(0xc3,0x0000);
 // fdisplay(keydat);
 
}
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------

void main()
{  //register keyvalue;
   //INT16U i=0;
  // for(i=0;i<65536;)
  // {fdisplay(i);i=i+17;}
   fdisplay(541263259);
   //vfddisplay(0xd8,dd[3]);
  while(1)
   {
     vfdkey();

 


    //mdelay(500);
    //vfddisplay(0xd8,0x0000);
   // mdelay(500);

   // vfddisplay(0xd8,dd[8]);
    }

 }

来源:   作者:  2006/9/25 16:50:53
栏目: [ ]

相关阅读

安森美推出新的高功率图腾柱PFC控制器,满足具挑战的能效标准

动态功耗低至60μA/MHz!助力设备超长续航,首选国民技术低功耗MCU!