老古开发网首页
导航:老古开发网首页文章索引文章分类单片机→[VFD应用初探[1]___键盘]
| -文章搜索 - 最新文章 - |

VFD应用初探[1]___键盘

发布时间:2006年6月23日 点击次数:961
来源:   作者:
 

#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]);
    }

 }


欢迎进入老古论坛进行讨论
[单片机] 相关文章:
步进电机两相四线(移植双龙)
简介:
#include &lt;hidef.h&gt; /* common defines and macros */ #include &lt;mc9s12a64.h&gt; /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12a64" byte np,i,control,Rti8Flg,Rti8timer,step,stepi,stepin; const byte motorb[]={0x05,0x......

单片机在炉温控制中的应用
数字电压表
串口通讯
AT89C51/55构成温湿度自动监测系统
学习AVR(二)ATtiny2313的特点
条形码的识别原理
单片机开发调试应注意的问题
AT89C51与字符型液晶模块16x2联接的C语言源程序
[转载]10种软件滤波方法
 
下一个:[单片机]基于ADμC812的温度检测系统的设计
简介:
1引言   本系统以ADμC812单片机为处理核心,分为温度传感、信号处理(差分放大、采样保持)、系统复位、LED显示、串行数据通信、上位机控制等6个功能模块。 系统的工作原理如图1所示。传感器将温度(物理量)转化为电量(电压),然后通过差分放大模块将信号先放大再保持处理,接着将两路模拟信号(电压)送至ADμC812的P1.0、P1.1管脚进行内部A/D转换器采样得到相应的数据,最后通过芯片内部处理由LED串行显示模块将具体值显示出来并发送给上位机。 其中串行通信(RS-232)既可以保证上位机与ADμC......
 

上一个:[DSP数字信号处理]DSP5402之硬件SPI配置

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:16毫秒