?? futaba.c
字號:
#include "includes.h"
#define GB_StartAddr 0x801C0000
#define VFD_CHIP_EN() {IO0CLR_bit.P0_12 = 1;} //芯片使能,
#define VFD_CHIP_DIS() {IO0SET_bit.P0_12 = 1;} //芯片禁能
#define VFD_CMD_EN() {IO0SET_bit.P0_11 = 1;} //寫命令
#define VFD_DATA_EN() {IO0CLR_bit.P0_11 = 1;} //寫數據
#define VFD_RST() IO0CLR_bit.P0_13 = 1;IO0SET_bit.P0_13 = 1
#define VFD_READ_SET() {IO0DIR &= ~(0xFF << 10);} //設置命令數據端口為讀模式
#define VFD_READ_PORT (INT8U)(IO0PIN >> 10)
#define SCREEN1AND2_OFF 0x00 //屏1屏2關顯示
#define SCREEN1_ON 0x01 //顯示屏1
#define SCREEN2_ON 0x02 //顯示屏2
#define SCREEN1AND2_ON 0x03 //屏1屏2開顯示
#define ADDRESS_ADD 0x04 //讀寫地址自增
#define ADDRESS_HOLD 0x05 //讀寫地址保持
#define DATA_IN 0x08 //寫數據
#define DATA_OUT 0x09 //讀數據
#define SCREEN1_L 0x0A //設置屏1的起始地址低位字節
#define SCREEN1_H 0x0B //設置屏1的起始地址高位字節
#define SCREEN2_L 0x0C //設置屏2的起始地址低位字節
#define SCREEN2_H 0x0D //設置屏2的起始地址高位字節
#define ADDRESS_L 0x0E //讀寫地址的低位字節
#define ADDRESS_H 0x0F //讀寫地址的高位字節
#define OR_MODE 0x10 //或顯示模式
#define EXOR_MODE 0x11 //異或顯示模式
#define AND_MODE 0x12 //與顯示模式
#define BRIGHTNESS 0x13 //亮度調節
#define RESET 0x14 //內部復位
/***********************************************************************
* 名稱:VFD_WriteCommand()
* 功能:寫命令子程序
* 入口參數:v_Command 要寫入VFD的命令字
* 出口參數:無
* 說明:函數會設置LCM數據總線為輸出方式
***********************************************************************/
VFD_WriteCommand(v_Command)
{
VFD_CMD_EN();
VFD_CHIP_EN();
*(INT8U *)0x82000000 = v_Command;
VFD_CHIP_DIS();
}
/***********************************************************************
* 名稱:VFD_WriteData()
* 功能:寫數據子程序。
* 入口參數:v_Data 要寫入VFD的數據
* 出口參數:無
* 說明:函數會設置LCM數據總線為輸出方式
***********************************************************************/
VFD_WriteData(v_Data)
{
VFD_DATA_EN();
VFD_CHIP_EN();
*(INT8U *)0x82000000 = v_Data;
VFD_CHIP_DIS();
}
void VFD_SetAddr(INT16U addr)
{
if (addr>2319)
addr-=2320;
VFD_WriteCommand(ADDRESS_L); VFD_WriteData(addr&0x00ff);
VFD_WriteCommand(ADDRESS_H); VFD_WriteData(addr>>8);
}
void VFD_SetDisp1(INT16U addr)
{
if (addr>2319)
addr-=2320;
VFD_WriteCommand(SCREEN1_L); VFD_WriteData(addr&0x00ff);
VFD_WriteCommand(SCREEN1_H); VFD_WriteData(addr>>8);
}
void VFD_SetDisp2(INT16U addr)
{
if (addr>2319)
addr-=2320;
VFD_WriteCommand(SCREEN2_L); VFD_WriteData(addr&0x00ff);
VFD_WriteCommand(SCREEN2_H); VFD_WriteData(addr>>8);
}
void VFD_Clear(void)
{
INT16U i=2320;
VFD_SetAddr(0x0000);
VFD_WriteCommand(DATA_IN);
while(i--)
{
VFD_WriteData(0x00);
}
VFD_SetAddr(0x0000);
}
void VFD_Init(void)
{
VFD_RST();
VFD_WriteCommand(RESET); VFD_WriteData(0x20);//!!!!
VFD_WriteCommand(SCREEN1AND2_OFF);//display 0ff
VFD_WriteCommand(BRIGHTNESS); VFD_WriteData(0x00);//100%
VFD_SetDisp1(0x0000);
VFD_Clear();
VFD_WriteCommand(SCREEN1_ON);//display on
}
/********************************************************************
* 名稱:VFD_Dischar
* 功能:VFD顯示一個16*16字符
* 輸入: INT8U *Char,INT8U Row,INT8U Col
* 返回值: 無
* 說明:Row(1-4),Col(1-8)
***********************************************************************/
void VFD_Dischar(INT8U *Char,INT8U Row,INT8U Col)
{
INT16U * GB_Addr,addr;
INT8U i,j;
i = *(Char++);
j = *Char;
GB_Addr = (INT16U *)(30+GB_StartAddr+((i-0xA1)*94+j-0xA1)*32);
VFD_WriteCommand(ADDRESS_ADD);
for(i=0;i<2;i++)
{
for(j=0;j<8;j++)
{
addr = (8-Col)*8*16+(4-Row)*2+j*16+i;
VFD_SetAddr(addr);
VFD_WriteCommand(DATA_IN);
VFD_WriteData((*(GB_Addr)>>8)&0xFF);
VFD_SetAddr(addr+8);
VFD_WriteCommand(DATA_IN);
VFD_WriteData((*(GB_Addr--))&0xFF);
}
}
}
/********************************************************************
* 名稱:VFD_DisLine
* 功能:VFD顯示一行漢字,每行必須8個漢字,如不滿8個用空白填充,空白字符ASCII(A1,A1)
* 調用: 無
* 輸入: INT8U * Char,INT8U Row
* 返回值: 無
***********************************************************************/
void VFD_DisLine(INT8U * Char,INT8U Row)
{
INT16U Col;
for(Col=1;Col<9;Col++)
{
VFD_Dischar(Char,Row,Col);
Char++;Char++;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -