基于CS16312控制芯片的VFD显示屏STC51单片机驱动程序
/*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单片机驱动程序相关推荐
- 带有控制芯片的VFD显示屏灯丝和负压的连接
集成了PT6311或者CS163o12等类似芯片的VFD显示屏,芯片负责对VFD的扫描显示,并可以提供键盘.LED.通用IO口等功能,只需要在更新显示内容的时候对芯片进行写操作,在读取键盘状态的时候进 ...
- Futaba M11BT222A VFD(主控PT6311)STC51单片机驱动程序
/* Futaba M11BT222A VFD 显示屏驱动程序Coder : FarmanVersion : 2018-01-07该显示屏采用PT6311芯片驱动,但板子端口和PT6311之间的信号经 ...
- TM1637数码管显示STC51单片机驱动程序
/* Coder : FarmanDate : 2018-01-02参考了厂家的TM1637数据手册,在此表示感谢.*/#include <STC89C5XRC.h> //包含52单片机头 ...
- 创意发明: 基于STC51单片机超声波测距(精简设计只需三个元件)
基于STC51单片机超声波测距精简设计只需三个元件(测距模块暂且算做是一个元件吧) 1.所需元件:STC单片机+超声波模块+4位共阳数码管 2.原理:单片机向测距模块trig脚发送20us的高电平触发 ...
- 奥克斯空调红外遥控信号编码协议的分析,STC51单片机读红外程序
2022.9 网上根本找不到资料,没人免费发布,有发布也是要钱的.哎.自己研究吧. 刚买的奥克斯清芯净空调,遥控器型号YKR-T/101,这样子的,手感不错: 用USB示波器抓了波形看了一下,和标准的 ...
- STC51单片机制作的万年历项目(可做毕设),增加了温度显示。
使用STC51单片机模组在kevil4平台制作的万年历项目. 算是自己的第一个项目的记录和总结,通过这次项目提高了自己对C语言的使用,知道了怎么使用51单片机来完成一些功能. 参考资料为:普中51-双 ...
- 配置Keil C51配置开发 STC51单片机过程
内容 1. Keil C51 下载 2. 配置开发STC51单片机 配置 Keil IDE与TEASOFT编辑 1. 配置Keil编辑器 2. 设置Keil自动开打文件 参考博文 1. Keil C5 ...
- 单片机红外通信c语言,基于C语言的计算机与多单片机红外无线串口通信的实现.doc...
基于C语言的计算机与多单片机红外无线串口通信的实现 基于C语言的计算机与多单片机红外无线 串口通信的实现 黄文亮 信息学院 电子信息工程专业 指导教师 刘传菊 摘要:计算机与一台或多台单片机的通信系统 ...
- rtl8188linux内核配置,编译基于rtl8188cu控制芯片的USB无线网卡在Linux下的配置
本人因为实验的需要,需要在嵌入式linux环境下添加wifi功能,通过在网上调研,选择基于rtl8188cu控制芯片的水星NW150UM无线USB网卡,现简单记录下配置过程. 1.下载最新的rtl81 ...
最新文章
- mybaits三:全局配置文件
- NET问答: 到底是返回 null 好,还是 空集合 好?
- python正态分布函数_python3-正态分布
- BusinessEtiquette,Communication Skill(外企职场商务礼仪与沟通技巧)
- 实验8 SQLite数据库操作
- 决策者根据什么曲线做出决策_如何在开放社区中做出品牌决策
- javah命令 C Header and Stub File Generator
- 2.STM32F407ZGT6 学习笔记-移植 FreeRTOS
- 11 User Space, Kernel Space, and the System Call API(用户空间,核空间,系统api)
- [Reinforcement Learning] 动态规划(Planning)
- onload同时执行多个事件
- cdr添加节点快捷键_CDR快捷键大全(精编排).doc
- 一文了解caffe框架
- 英语对程序员来讲有多重要?不会英语可以做程序员吗?
- 网页爬虫-八爪鱼Xpath自定义数字翻页
- BitMap算法和Java的实现类BigSet
- 「暑期训练」「基础DP」 Monkey and Banana (HDU-1069)
- WIN10华硕解决无法调节电脑亮度
- 路由器常用功能有哪些 路由器功能介绍【详解】
- 开源 android 播放器
热门文章
- 过程计算机系统 pcs,炼钢AOD炉过程计算机系统设计与实现-软件工程专业毕业论文.docx...
- 代码强力对比,就用这7个工具!
- sublime3 Ctrl + B 只build 不运行的解决方案之一
- elevation格式_Google Elevation的工作方式以及如何创建简单的C#应用​​程序?
- 到底要不要在office/wps平台上做开发
- SQL Server 下取中位数(中位值)的方法
- 不用电线使灯泡 特斯拉_特斯拉方式如何使其领先
- java基础之package和import语句
- 如何进行数据文件的传输(不简单)
- 浅谈SQL Server逻辑读、物理读、预读