黄金会员
主题
帖子
积分8515
阅读权限40
注册时间2011-10-27
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2015-1-14 21:30
|
显示全部楼层
PT6311 驱动
编译器 SDCC
89C52RC 11.0592MHz 下测试ok
PT6311.h- /*
- 说明: PT6311 驱动
- */
- #ifndef PT6311_H_INCLUDED
- #define PT6311_H_INCLUDED
- #include <8052.h>
- #include <compiler.h>
- #include <stddef.h>
- #include <stdint.h>
- #include <stdbool.h>
- #ifndef _nop_
- #define _nop_() __asm__ ("nop")
- #endif
- #define WaitSome() _nop_()
- /*
- Data Input Pin (数据输入引脚)
- This pin inputs serial data at the rising edge of the shift clock (starting from the lower bit).
- 此管脚在移位时钟的上升沿输入串行数据(从低位开始)。
- */
- #define PT_DIN P1_2
- #define PTDinHigh() (PT_DIN=1)
- #define PTDinLow() (PT_DIN=0)
- /*
- Clock Input Pin (时钟输入引脚)
- This pin reads serial data at the rising edge and outputs data at the falling edge.
- 该引脚在上升沿读取串行数据,并在下降沿输出数据.
- */
- #define PT_CLK P1_1
- #define PTClkHigh() (PT_CLK=0)
- #define PTClkLow() (PT_CLK=1)
- /*
- Serial Interface Strobe Pin (串行接口选通针)
- The data input after the STB has fallen is processed a command. When this in is “HIGH”, CLK is ignored.
- 在STB之后的数据输入已下降被处理的命令。当这是“HIGH”,CLK被忽略。
- */
- #define PT_STB P1_0
- #define PTStbHigh() (PT_STB=0)
- #define PTStbLow() (PT_STB=1)
- //命令定义
- /*
- COMMAND 1: DISPLAY MODE SETTING COMMANDS
- 命令1:显示模式设置命令
- Display Mode Settings: (显示模式设置 位,段)
- 0XXX: 8 digits, 20 segments
- 1000: 9 digits, 19 segments
- 1001: 10 digits, 18 segments
- 1010: 11 digits, 17 segments
- 1011: 12 digits, 16 segments
- 1100: 13 digits, 15 segments
- 1101: 14 digits, 14 segments
- 1110: 15 digits, 13 segments
- 1111: 16 digits, 12 segments
- 上电默认 1111: 16 digits, 12 segments
- 显示模式和RAM地址 0x00-0x2F
- xxHL Lower 4 bits xxHU Higher 4 bits
- */
- #define CMD1_DMSC_08_20 0x00
- #define CMD1_DMSC_09_19 0x08
- #define CMD1_DMSC_10_18 0x09
- #define CMD1_DMSC_11_17 0x0A
- #define CMD1_DMSC_12_16 0x0B
- #define CMD1_DMSC_13_15 0x0C
- #define CMD1_DMSC_14_14 0x0D
- #define CMD1_DMSC_15_13 0x0E
- #define CMD1_DMSC_16_12 0x0F
- /*
- COMMAND 2: DATA SETTING COMMANDS
- 命令1:数据设置命令
- 上电默认 b3~b0=0
- b1 b0:
- Data Write & Read Mode Settings: (数据写入和读取模式设置)
- 00: Write Data to Display Mode (写数据到显示模式)
- 01: Write Data to LED Port (写数据到LED端口)
- 10: Read Key Data (读按键数据)
- 11: Read SW Data (读开关数据)
- b2:
- Address Increment Mode Settings (Display Mode): (地址增量模式设置(显示模式))
- 0: Increment Address after Data has been Written (数据已经被写入后增加地址)
- 1: Fixed Address (固定地址)
- b3:
- Mode Settings: (模式设置)
- 0: Normal Operation Mode (正常操作模式)
- 1: Test Mode (测试模式)
- */
- #define CMD2_DSC_WDDM_INC (0x40 | 0x00)
- #define CMD2_DSC_WDDM_FIX (0x40 | 0x04)
- #define CMD2_DSC_WDLP (0x40 | 0x01)
- #define CMD2_DSC_RKD (0x40 | 0x02)
- #define CMD2_DSC_RSD (0x40 | 0x03)
- /*
- COMMAND 3: ADDRESS SETTING COMMANDS
- 命令3:地址设置命令
- 有效地址 0x00~0x2F 上电默认 0x00
- */
- #define CMD3_ASC 0xC0
- /*
- COMMAND 4: DISPLAY CONTROL COMMANDS
- 命令4:显示控制命令
- Pulse width = 1/16 并且 0: Display Of 时键盘扫描关闭
- Dimming Quantity Settings: (调光量设置)
- b2~b0
- 000: Pulse width = 1/16
- 001: Pulse width = 2/16
- 010: Pulse width = 4/16
- 011: Pulse width = 10/16
- 100: Pulse width – 11/16
- 101: Pulse width = 12/16
- 110: Pulse width = 13/16
- 111: Pulse width = 14/16
- b3
- Display Settings: (显示设置)
- 0: Display Off (Key Scan Continues)
- 1: Display On
- */
- #define CMD3_DCC_01_16 (0x88 | 0 )
- #define CMD3_DCC_02_16 (0x88 | 1 )
- #define CMD3_DCC_04_16 (0x88 | 2 )
- #define CMD3_DCC_10_16 (0x88 | 3 )
- #define CMD3_DCC_11_16 (0x88 | 4 )
- #define CMD3_DCC_12_16 (0x88 | 5 )
- #define CMD3_DCC_13_16 (0x88 | 6 )
- #define CMD3_DCC_14_16 (0x88 | 7 )
- #define CMD3_DCC_OFF 0x80
- /*
- 1)显示更新增量地址
- Command1: Display Mode Setting Command
- Command2: Data Setting Command
- Command3: Address Setting Command
- Data 1 to n: Transfer Display Data (48 Bytes max)
- Command4:Display Control Command
- 2)更新指定地址数据
- Command2: Data Setting Command
- Command3: Address Setting Command
- Data: Display Data
- 3)推荐的软件流程图
- START -> Delay 200 ms -> (初始化开始) -> SET COMMAND 2 (Write Data)
- ->SET COMMAND 3 Clear Display RAM(上电时显示内存内容未知)
- ->SET COMMAND 1 -> SET COMMAND 4 (88H~8FH:Display ON)(初始化结束)
- ->MAIN PROGRAM->SET COMMAND 2 (Read Key & Write Data Includeed)
- ->SET COMMAND 3->SET COMMAND 1->SET COMMAND 4
- ->(跳回MAIN PROGRAM 主循环)
- ->END
- Notes:
- 1. Command 1: Display Mode Commands
- 2. Command 2: Data Setting Commands
- 3. Command 3: Address Setting Commands
- 4. Command 4: Display Control Commands
- 5. When IC power is applied for the first time, the contents of the Display RAM are not defined; thus, it is strongly suggested that the contents of the
- Display RAM must be cleared during the initial setting.
- */
- void pt6331_Init(uint8_t dispMode, uint8_t dispCtrl);
- void pt6331_Write (uint8_t dat);
- void pt6331_Cmd (uint8_t cmd);
- void pt6331_SetMem(uint8_t dat);
- void pt6331_WriteDigit(uint8_t digit, uint8_t s1,uint8_t s2,uint8_t s3);
- void pt6331_WriteDisplayRam(uint8_t addr, uint8_t *data, uint8_t len);
- #endif // PT6311_H_INCLUDED
复制代码 PT6311.c- /*
- 说明: PT6311 驱动
- */
- #include "PT6311.h"
- void pt6331_Write (uint8_t dat)
- {
- /* 功能: 写8bit到设备 时钟上升沿设备存储数据*/
- uint8_t i;
- for (i=0;i<8;i++)
- {
- PTClkLow();
- if(dat & 0x01)
- PTDinHigh();
- else
- PTDinLow();
- dat >>= 1;
- //WaitSome();
- PTClkHigh(); //写入数据
- WaitSome();
- }
- }
- void pt6331_Cmd (uint8_t cmd)
- {
- /* 功能: 写一个8位命令到设备 */
- PTStbLow();
- //WaitSome();
- pt6331_Write(cmd);
- PTStbHigh();
- WaitSome();
- }
- void pt6331_SetMem(uint8_t dat)
- {
- /* 功能: 使用dat填充从0x00-0x2F的显示RAM */
- uint8_t i;
- pt6331_Cmd( CMD2_DSC_WDDM_INC); //COMMAND 2 数据设置命令 设置为写显示内存
- PTStbLow();
- pt6331_Write( CMD3_ASC); //COMMAND 3 地址设置命令
- for (i=0;i<=0x2f;i++)
- {
- pt6331_Write( dat);
- }
- PTStbHigh();
- WaitSome();
- }
- void pt6331_WriteDigit(uint8_t digit, uint8_t s1,uint8_t s2,uint8_t s3)
- {
- /* 功能: 向一位的显示内存写入数据 */
- pt6331_Cmd( CMD2_DSC_WDDM_INC); //COMMAND 2 数据设置命令 设置为写显示内存
- PTStbLow();
- pt6331_Write( CMD3_ASC | (digit * 3)); //COMMAND 3 地址设置命令
- pt6331_Write( s1); //SG1-SG4 SG5-SG8
- pt6331_Write( s2); //SG9-SG12 SG13-SG16
- pt6331_Write( s3 & 0x0f); //SG17-SG20
- PTStbHigh();
- WaitSome();
- }
- void pt6331_WriteDisplayRam(uint8_t addr, uint8_t *data, uint8_t len)
- {
- /* 功能: 从指定地址开始向显示内存写数据 */
- pt6331_Cmd( CMD2_DSC_WDDM_INC); //COMMAND 2 数据设置命令 设置为写显示内存
- PTStbLow();
- pt6331_Write( CMD3_ASC | addr); //COMMAND 3 地址设置命令
- while(len--)
- {
- pt6331_Write( *data++);
- }
- PTStbHigh();
- WaitSome();
- }
- void pt6331_Init(uint8_t dispMode, uint8_t dispCtrl)
- {
- /* 功能: 初始化PT6331到当前vfd */
- //IO初始化
- PTStbHigh();
- PTClkHigh();
- PTDinHigh();
- WaitSome(); //Delay 200 ms 等待系统稳定
- //COMMAND 2 + COMMAND 3 初始化显示内存
- pt6331_SetMem(0x00);
- //11位 17段 CMD1_DMSC_11_17 CMD3_DCC_02_16
- //COMMAND 1 显示模式设置命令
- pt6331_Cmd( dispMode);
- //COMMAND 4 显示控制命令
- pt6331_Cmd( dispCtrl);
- }
复制代码 全亮
_delay_ms(200); //等待单片机稳定
pt6331_Init(CMD1_DMSC_11_17, CMD3_DCC_04_16);
pt6331_SetMem(0xff);
|
|