TA的每日心情 | 擦汗 2012-7-22 22:21 |
|---|
签到天数: 16 天 [LV.4]偶尔看看III
|

消息来自- 北京
#include <reg51.h>
#include "cpu_cfg.h"
# define INT8U unsigned char
#define INT16U unsigned int
VFD应用初探[1]___键盘
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]);
}
} |
|