/*CS16312作为主控芯片的 VFD 显示屏驱动程序Coder   : FarmanVersion : 2018-01-07
*/ #include <STC89C5xRC.H>
#include "Delay.h"sbit CS16312_SDA     = P2^0; // SPI 数据线
sbit CS16312_SCLK    = P2^1; // SPI 串行时钟
sbit CS16312_STB     = P2^2; // 片选信号,0-不选 1-选中。#define CS16312_SDA_HIGH  1
#define CS16312_SCLK_HIGH 1
#define CS16312_STB_HIGH  1//--------------------------------------------------------void CS16312_delay()
{nop_();//Delay1ms();
}//----------------------------------------------------------void CS16312_enable()
{CS16312_STB  = !CS16312_STB_HIGH; CS16312_delay();
}void CS16312_disable()
{CS16312_STB = CS16312_STB_HIGH;CS16312_delay();
}void CS16312_write_byte(unsigned char byte_to_write)
{unsigned char mask = 0x01;unsigned char n;for(n=0; n<8; n++){CS16312_SCLK =!CS16312_SCLK_HIGH;CS16312_delay();CS16312_SDA = (mask & byte_to_write) ? 1 : 0; CS16312_delay();CS16312_SCLK = CS16312_SCLK_HIGH; CS16312_delay();mask += mask;}return;
}void CS16312_write_command_byte(unsigned char command_byte)
{CS16312_enable();CS16312_write_byte(command_byte);CS16312_disable();
}//----------------------------------------------------------// digits_could_display : 8 - 16
// 命令前必须有一次 STB 有效,
// 命令后必须有一次 STB 释放。
void CS16312_command1(unsigned char digits_could_display)
{CS16312_write_command_byte(digits_could_display - 4);
}// 命令前必须有一次 STB 有效,
// 命令后必须有一次 STB 释放。
void CS16312_command2(bit enable_inc_addr_after_write)
{unsigned char command = 0x40;command += enable_inc_addr_after_write ? 0x00 : 0x04;CS16312_write_command_byte(command);
}// addr : 0x00 - 0x15
// 该命令后面要紧跟写入显示RAM的数据,且该命令与数据之间不允许有 STB 释放操作
// 数据与数据之间也不允许有 STB 释放。
//
// 所以,在该命令前要 调用一次 CS16312_enable()
// 所有的显示RAM传输结束后,调用一次 CS16312_disable().
void CS16312_command3(unsigned char RAM_addr_to_write)
{CS16312_write_byte(0xC0 + RAM_addr_to_write);
}// 命令前必须有一次 STB 有效,
// 命令后必须有一次 STB 释放。
// bright : 0 - 7
void CS16312_command4(bit enable_display, unsigned char bright)
{CS16312_write_command_byte((enable_display ? 0x88 : 0x80) + bright);
}//----------------------------------------------------------void CS16312_write_display_RAM(unsigned char addr, unsigned char display_data_byte)
{CS16312_enable();CS16312_command3(addr);CS16312_write_byte(display_data_byte);CS16312_disable();
}void CS16312_fill_display(unsigned char pattern)
{unsigned char m;CS16312_command2(1);CS16312_enable();CS16312_command3(0);for(m=0x00; m<0x16; m++){CS16312_write_byte(pattern);}CS16312_disable();
}//----------------------------------------------------------code unsigned char CS16312_8seg_digit[] =
{0x77, 0x24, 0x6B, 0x6D, 0x3C, 0x5D, 0x5F, 0x64, 0x7F, 0x7D
};// pos 0-6 digit:0-9
// 因为倒数第2个数字的段码与其他的不同,需要单独处理。此处未处理。
// 在 CS1632_show_byte_as_BCD 中进行了处理
void CS16312_show_8seg_digit(unsigned char pos, unsigned char digit, bit with_dot)
{if(pos == 2 || pos == 4){CS16312_write_display_RAM(6-pos, CS16312_8seg_digit[digit] + (with_dot ? 0x80 : 0x00));}else{CS16312_write_display_RAM(6-pos, CS16312_8seg_digit[digit]);}
}code unsigned char CS16312_special_digit[] =
{0x77, 0x24, 0x6B, 0x6D, 0x3C, 0x5D, 0x5F, 0x64, 0x7F, 0x7D
};// pos 0-3 BCD:0x00-0x99
void CS1632_show_byte_as_BCD(unsigned char pos, unsigned char bcd, bit with_dot)
{if(pos == 0){CS16312_show_8seg_digit(0, bcd&0x0F, 0);}else if(pos == 3){  // 写右边起第2个数字CS16312_write_display_RAM(1, CS16312_special_digit[bcd>>4]>>1);// 写右边起第1个数字CS16312_write_display_RAM(0, (CS16312_special_digit[bcd>>4] & 0x01) ? (CS16312_8seg_digit[bcd&0x0F] | 0x80) : (CS16312_8seg_digit[bcd&0x0F] | 0x00));}else{CS16312_show_8seg_digit(2*pos-1, bcd>>4, with_dot);CS16312_show_8seg_digit(2*pos, bcd&0x0F, with_dot);}
}void CS16312_show_disk(unsigned int pattern)
{CS16312_write_display_RAM(8, pattern>>8);CS16312_write_display_RAM(9, pattern>>8);
}//----------------------------------------------------------void CS16312_init()
{CS16312_disable();CS16312_SCLK = 0;CS16312_SDA  = 1;Delay200ms();CS16312_command1(5);CS16312_command2(1);CS16312_fill_display(0xFF);CS16312_command4(1, 3);
}//----------------------------------------------------------void CS16312_main()
{unsigned char m, n, seg;CS16312_init();CS16312_fill_display(0xFF); Delay200ms();CS16312_fill_display(0x00); Delay200ms();CS16312_fill_display(0xFF); Delay200ms();CS16312_fill_display(0x00); Delay200ms();CS16312_fill_display(0xFF); Delay200ms();CS16312_fill_display(0x00); Delay200ms();while(0){CS16312_show_disk(0x5555); Delay200ms();CS16312_show_disk(0xAAAA); Delay200ms();}while(1){seg = 0x01;for(m=0; m<10; m++){CS1632_show_byte_as_BCD(0, m*0x11, 1); CS1632_show_byte_as_BCD(1, m*0x11, 1); CS1632_show_byte_as_BCD(2, m*0x11, 1); CS1632_show_byte_as_BCD(3, m*0x11, 1);Delay1s();} Delay1s();}
}

基于CS16312控制芯片的VFD显示屏STC51单片机驱动程序相关推荐

  1. 带有控制芯片的VFD显示屏灯丝和负压的连接

    集成了PT6311或者CS163o12等类似芯片的VFD显示屏,芯片负责对VFD的扫描显示,并可以提供键盘.LED.通用IO口等功能,只需要在更新显示内容的时候对芯片进行写操作,在读取键盘状态的时候进 ...

  2. Futaba M11BT222A VFD(主控PT6311)STC51单片机驱动程序

    /* Futaba M11BT222A VFD 显示屏驱动程序Coder : FarmanVersion : 2018-01-07该显示屏采用PT6311芯片驱动,但板子端口和PT6311之间的信号经 ...

  3. TM1637数码管显示STC51单片机驱动程序

    /* Coder : FarmanDate : 2018-01-02参考了厂家的TM1637数据手册,在此表示感谢.*/#include <STC89C5XRC.h> //包含52单片机头 ...

  4. 创意发明: 基于STC51单片机超声波测距(精简设计只需三个元件)

    基于STC51单片机超声波测距精简设计只需三个元件(测距模块暂且算做是一个元件吧) 1.所需元件:STC单片机+超声波模块+4位共阳数码管 2.原理:单片机向测距模块trig脚发送20us的高电平触发 ...

  5. 奥克斯空调红外遥控信号编码协议的分析,STC51单片机读红外程序

    2022.9 网上根本找不到资料,没人免费发布,有发布也是要钱的.哎.自己研究吧. 刚买的奥克斯清芯净空调,遥控器型号YKR-T/101,这样子的,手感不错: 用USB示波器抓了波形看了一下,和标准的 ...

  6. STC51单片机制作的万年历项目(可做毕设),增加了温度显示。

    使用STC51单片机模组在kevil4平台制作的万年历项目. 算是自己的第一个项目的记录和总结,通过这次项目提高了自己对C语言的使用,知道了怎么使用51单片机来完成一些功能. 参考资料为:普中51-双 ...

  7. 配置Keil C51配置开发 STC51单片机过程

    内容 1. Keil C51 下载 2. 配置开发STC51单片机 配置 Keil IDE与TEASOFT编辑 1. 配置Keil编辑器 2. 设置Keil自动开打文件 参考博文 1. Keil C5 ...

  8. 单片机红外通信c语言,基于C语言的计算机与多单片机红外无线串口通信的实现.doc...

    基于C语言的计算机与多单片机红外无线串口通信的实现 基于C语言的计算机与多单片机红外无线 串口通信的实现 黄文亮 信息学院 电子信息工程专业 指导教师 刘传菊 摘要:计算机与一台或多台单片机的通信系统 ...

  9. rtl8188linux内核配置,编译基于rtl8188cu控制芯片的USB无线网卡在Linux下的配置

    本人因为实验的需要,需要在嵌入式linux环境下添加wifi功能,通过在网上调研,选择基于rtl8188cu控制芯片的水星NW150UM无线USB网卡,现简单记录下配置过程. 1.下载最新的rtl81 ...

最新文章

  1. mybaits三:全局配置文件
  2. NET问答: 到底是返回 null 好,还是 空集合 好?
  3. python正态分布函数_python3-正态分布
  4. BusinessEtiquette,Communication Skill(外企职场商务礼仪与沟通技巧)
  5. 实验8 SQLite数据库操作
  6. 决策者根据什么曲线做出决策_如何在开放社区中做出品牌决策
  7. javah命令 C Header and Stub File Generator
  8. 2.STM32F407ZGT6 学习笔记-移植 FreeRTOS
  9. 11 User Space, Kernel Space, and the System Call API(用户空间,核空间,系统api)
  10. [Reinforcement Learning] 动态规划(Planning)
  11. onload同时执行多个事件
  12. cdr添加节点快捷键_CDR快捷键大全(精编排).doc
  13. 一文了解caffe框架
  14. 英语对程序员来讲有多重要?不会英语可以做程序员吗?
  15. 网页爬虫-八爪鱼Xpath自定义数字翻页
  16. BitMap算法和Java的实现类BigSet
  17. 「暑期训练」「基础DP」 Monkey and Banana (HDU-1069)
  18. WIN10华硕解决无法调节电脑亮度
  19. 路由器常用功能有哪些 路由器功能介绍【详解】
  20. 开源 android 播放器

热门文章

  1. 过程计算机系统 pcs,炼钢AOD炉过程计算机系统设计与实现-软件工程专业毕业论文.docx...
  2. 代码强力对比,就用这7个工具!
  3. sublime3 Ctrl + B 只build 不运行的解决方案之一
  4. elevation格式_Google Elevation的工作方式以及如何创建简单的C#应用​​程序?
  5. 到底要不要在office/wps平台上做开发
  6. SQL Server 下取中位数(中位值)的方法
  7. 不用电线使灯泡 特斯拉_特斯拉方式如何使其领先
  8. java基础之package和import语句
  9. 如何进行数据文件的传输(不简单)
  10. 浅谈SQL Server逻辑读、物理读、预读