PT16312VFD驱动C程序

发布者:快乐行者最新更新时间:2018-01-07 来源: eefocus关键字:PT16312VFD驱动  C程序 手机看文章 扫描二维码
随时随地手机看文章

PT16312驱动C程序

#define uchar unsigned char 
#define uint  unsigned int 
#define ulong unsigned long 
#define cm1 co1.co1 
#define cm2 co2.co2

#define cm3 co3.co3 
#define cm4 co4.co4 
#include  
#include  
#define cmdd 0 
#define datt 1 
sbit dat=P1^3; 
sbit clk=P1^2; 
sbit stb=P1^1; 
union 

  uchar dat; 
  struct 
 { 
   uchar dms: 3; //选择显示屏硬件的栅和段的位数 
   uchar dnc: 3; //数据空位 
   uchar ad1: 2; //此命令的地址值固定为0X00 
 }co1; 
}co1; 
union  

  uchar dat; 
  struct 
 { 
  uchar fru: 2; //功能选择:00:WRITE DATA TO DISRAM 01:WRITE DATA TO LED 02:READ DATA FROM KEY 03:READ DATA FROM SW 
  uchar mad: 1; //0递增 1指定地址 
  uchar mst: 1; //0正常 1测试模式 
  uchar dnc: 2; //数据空位 
  uchar ad2: 2; //此命令的地址值固定为0X01 
 }co2; 
}co2; 
union 

  uchar dat; 
  struct 
 { 
  uchar add: 5; //16312内部DISRAM地址选择 
  uchar dnc: 1; //数据空位 
  uchar ad3: 2; //此命令的地址值固定为0X03 
 }co3; 
}co3; 
union 

  uchar dat; 
  struct 
 { 
   uchar PWM: 3; //输出点亮时间选择(可以调节亮度) 
   uchar dis: 1; //0显示关闭 
   uchar dnc: 2; //数据空位 
   uchar ad4: 2; //此命令的地址值固定为0X02 
 }co4; 
}co4; 

void wrd(uchar disno,bit lei)  //写一个字节的命令或者数据(由LEI控制是写数据还是写命令) 

  uchar a; 
  if(lei) 
  goto s; 
  stb=1; 
  stb=1; 
  stb=0; 
 s:  for(a=0;a<8;a++) 
    { 
     clk=1; 
     clk=1; 
     clk=0; 
     clk=0; 
      if(disno&0x01) 
        dat=1; 
      else 
        dat=0; 
        disno=disno>>1; 
        clk=1; 
        clk=1; 
        clk=1; 
        clk=1; 
     } 

void iniVFD(void) 
 { 
  cm1.dms=0x01;//设置为5区 16段 
  cm1.ad1=0x00; 
  cm2.mad=0x01;//地址模式为指定地址 
  cm2.mst=0x00;//取消测试 
  cm2.ad2=0x01; 
  cm3.ad3=0x03; 
  cm4.pwm=0x07;//亮度为最亮 
  cm4.dis=0x01;//打开显示 
  cm4.ad4=0x02; 
 } 
 /////////////////////////////************以下为主程序*************************////////////////////// 
void wrvfd(uchar addr,uchar dat) //向VFD指定地址写数据 
  { 
  inivfd(); 
  wrd(co1.dat,cmdd); 
  stb=1; 
  cm2.fru=0x00; 
  wrd(co2.dat,cmdd); 
  stb=1; 
  cm3.add=addr; 
  wrd(co3.dat,cmdd); 
  wrd(dat,datt); 
  stb=1; 
  wrd(co4.dat,cmdd); 
  stb=1; 
  } 
void wrled(uchar leddata) //控制16312的四个输出口数据存放在LEDDATA的低四位 

  inivfd(); 
  cm2.fru=0x01; 
  wrd(co2.dat,cmdd); 
  wrd(leddata,datt); 
  stb=1; 
}                          
ulong rdkey()            //读键盘 
{ ulong key=0; 
  uchar i; 
  inivfd(); 
  cm2.fru=0x02; 
  wrd(co2.dat,cmdd); 
  for(i=0;i<24;i++) 
  { 
   clk=1; 
   clk=1; 
   clk=0; 
   clk=0; 
   clk=0; 
   clk=1; 
   dat=1; 
   if(dat==1) 
   key=(key<<1)+1; 
   else 
   key=(key<<1); 
  } 
  return(key); 


main()//                         测试程序 

uchar i; 
ulong k; 
for(i=0;i<16;i++) 
wrvfd(i,0xff);       //点亮VFD荧光屏上所有的数据段 
wrled(0x0f);       //使16312上的输出口置高电平 
while(1) 
k=rdkey();           //读键盘实验,实际应用中应参照数据手册取值(如按下某一个按键应读读几次,其中只有一次是正确的其他几次做为消抖处理) 


关键字:PT16312VFD驱动  C程序 引用地址:PT16312VFD驱动C程序

上一篇:遥控6声道AV机PT6311的汇编程序
下一篇:AT89S52控制DS1302时钟程序

推荐阅读最新更新时间:2024-03-16 15:51

STM32模拟I2C程序
/******************************************************************************* 测试平台:STM32F103ZET6最小系统 *******************************************************************************/ static void i2cDelay() { volatile int i = 7; while (i) i--; } // SCL高电平期间,SDA出现下降沿为起始信号 static bool i2cStart() { SDA_OUT;
[单片机]
51单片机矩阵键盘C程序
主程序1: void main() { uchar i,j,k i=0; j=0; while(1) { i=key();//键盘循环扫描,其值赋给变量数组table if(i!=0)//键盘子程序返回值非0,即有按键按下 { table =i;//将值存在变量数组中 j++; } if(j==6) { j=0; for(k=0;k 6;k++)//当数组存满6位时核对 { P3=table ;//P3接有一排指示灯 delay (1000);
[单片机]
Keil c51 C程序延时时间
如果你要很精确的延时,可以使用定时器,C语言的定时比较难计算,你可以用KEIL里的软件仿真看看运行你的子程序需要多少时间,这样是最清楚的了。当然,如果你的编程能力已经达到比较高的水平就另一个说法,只要程序简洁,C或汇编都一样的高效率。下面我发一些别人的见解用C语言实现延时程序,首先想到的就是C常用的循环语句。下面这段代码是我经常在网上看到的: void delay2(unsigned char i){  for(; i != 0; i--);} 到底这段代码能达到多高的精度呢?为了直接衡量这段代码的效果,我把 Keil C 根据这段代码产生的汇编代码找了出来: ; FUNCTION _delay2 (BEGIN)   
[单片机]
89S51输出信号来驱动一个步进马达c程序
这个程序利用89S51输出信号来驱动一个步进马达/* Target:89S51 程序描述:这个程序利用89S51输出信号来驱动一个步进马达*/ /* ***************************************************** */ #include REGX51.H #define TIMER0_COUNT 0xEE11/*10000h-((12,000,000/(12*FREQ))*/ #define STOP 0 #define FORWARD 1 #define BACKWARD 2 char gotkey(); co de forward ={0XFE
[单片机]
AVR单片机综合流水灯C程序
自己焊了块实验板,就是研究了一下AVR单片机,因为前面一年时间里一直苦战51单片机,有了一定的基础,所以看了一下视频,原来 AVR单片机主要有三个寄存器设置IO口,DDR(X)、PORT(X) BIT(X)等寄存器,至于其它的编程思想,我认为和51那些差不多,看来前辈说得对啊, 学会了一种单片机,学其它的很容易入手 ,今天总算得到了验证,于是写出了下面的流水灯程序! #include iom16v.h //AVR单片机头文件包含 #define uchar unsigned char//宏定义 #define uint unsigned int// /*****************************************
[单片机]
基于51单片机的电子记分牌C程序编程
#include reg52.h sbit r1=P2^0; sbit r2=P2^1; sbit h1=P3^0; sbit h2=P3^1; void delay(unsigned char x); char scank(); void display(char); unsigned char dispcode ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90}; void main() { char num=0,keynum; while(1) { keynum=scank(); num=num+keynum; if(num 0) n
[单片机]
基于51单片机的电子记分牌<font color='red'>C程序</font>编程
七彩灯综合C程序
/*此程序是一款普通的彩灯,它的功能主要有四种模式: 第一种模式:开机四种颜色以0.5秒速度循环1次,然后 在白颜色上停止循环,即显示白光 第二种模式:按下功 能键后,它以1秒速度四种颜色不停的循环 第三种模式: 当按键按下后,它会记住第二种模式的颜色,比如第二种 模式现在亮得是绿色,你按下按键时,它会先闪一下,然 后在绿颜色上停下来 第四模式:当你再按下开关时,它 自动回到模式一下,(当然还可以写出三种颜色) 本程序是第一个版本,第二版功能更强大参见: http://www.51hei.com/mcu/1531.html */ #include reg52.h #define uint unsigned int #defi
[单片机]
AT89S52两单片机之间的通信 C程序
#include reg52.h #define uint unsigned int #define uchar unsigned char sbit key1 = P1^0; //按键位定义 sbit key2 = P1^1; sbit key3 = P1^2; sbit key4 = P1^3; void send(uchar key_num) //通过串口发送按键值子函数 { SBUF = key_num; while(!TI); TI = 0; } void delay(uint z) //延时_ms子函数 { uint x,y; for(x = 0;x z;x++) for(y = 0;y 125
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved