📄 pt6311.c
字号:
/* 发送数据到PT6311进行显示 */
/* 参数0: PAR[0] 要写的显存地址(MSB: 1 1 B5,B4,B3,B2,B1,B0 :LSB)(B5-B0 MEM START ADDRESS) */
/* 参数1: PAR[1] 写的低8位数据(先送出, 且从bit0位开始) */
/* 参数2: PAR[2] 写的中8位数据 */
/* 参数3: PAR[3] 写的高1位数据 */
/* 参数 PAR_T; 位变量,可作为函参数 */
/* VFD的使用,先用 */
/* 48 pt6311键总数(48个) */
/* 0x0C 显示模式设置命令(0000,1100=0CH 13G,15P */
/* 0x40 数据设置命令,写数据到显示寄存器,数据写入后地址增加,一般工作模式 */
/* 0x41 写数据到LED命令*/
/* 0x42 PT6311读键值命令符 */
/* 0x8f 显示控制命令,Sets pulse width to 14/16. Display on */
/* 0xC0 地址设置命令 pt6311的Display RAM的起始地址00-2f */
/* 0x43 读SW的值 */
void wvfd_6311()
{
bc_stb_6311=0; // pt6311 stb=0 (ENABLE)
some_nop();
par_t=0x40; /* 数据设置命令,写数据到显示寄存器,,数据写入后地址增加,一般工作模式 */
disp_6311();
bc_stb_6311=1; /* pt6311 stb=0 (ENABLE) 先关掉STAB,然后再打开,这会会稳定些 */
some_nop();
bc_stb_6311=0; // pt6311 stb=0 (ENABLE)
some_nop();
par_t=par[0];
disp_6311();
some_nop();
par_t=par[1];
disp_6311();
some_nop();
par_t=par[2];
disp_6311();
bc_stb_6311=1; // PT6311 DISABLE
}
/* 读键盘按键子程序 */
/* 返回: key_6311 返回键值, 0=无按键 ,不可用PAR[0] 作为参数,否则显示乱 */
void getkey_6311()
{
uchar i;
bc_stb_6311=1;
_nop_(); _nop_(); _nop_(); _nop_();
bc_stb_6311=0;
some_nop();
par_t=0x72; /* 向pt6311发送读键值命令 */
disp_6311();
some_nop();
key_6311=0;
// par[0]=0; /* 不能用PAR[0] 作为参数,否则显示乱 */
// bc_data_6311=0;
for(i=48;i>0;i--) /* 6311 总48 个键 */
{
bc_clk_6311=1;
bc_data_6311=1;
some_nop();
bc_clk_6311=0;
some_nop();
if(bc_data_6311==1)
{ key_6311=i; /* 原为 par[0]=i; 时显示乱 */
break;
}
}
bc_stb_6311=1;
some_nop();
}
/* 显示模式命令 分G,P */
void setup_6311()
{
bc_stb_6311=0; // ready to send data to pt6311 STB
some_nop();
par_t=0x0c; // 0000,1100=0CH 13G,15P
disp_6311(); // send command to pt6311,here is set displayer mod,11dig/17seg
some_nop();
bc_stb_6311=1;
}
/* ------- 打开荧光显示 显示控制命令 -------- */
void dim_vfd()
{
bc_stb_6311=0; /* STD=0 点亮显示字符 */
some_nop();
par_t=0x8f; /* 显示控制命令,Sets pulse width to 14/16. Display on */
disp_6311();
bc_stb_6311=1; //STD=1
}
/* 清屏 */
void clear_vfd()
{
uchar i;
bc_stb_6311=0;
par[0]=0xc0;
par[1]=0x00;
par[2]=0x00;
for(i=0;i<14;i++)
{
wvfd_6311(); /* 送入pt6311显存 */
par[0]=0xc0+3*i; /* start address move to next digit 下一段,段地址 */
}
bc_stb_6311=1;
}
/* 送数据到6311的LED口 */
/* 参数PAR[0] PAR[0]--LED数据 */
void wled_6311()
{
bc_stb_6311=0; /* PT6311 ENBLE */
par_t=0x41; // data set command--write data to LED PORT
disp_6311(); // sendn data to pt6311 here is data set command
par_t=led_6311; // pt6311 LED DATA to PAR[0]
disp_6311(); // send data to pt6311 here is address set command
bc_stb_6311=1; // pt6311 disable
}
/* 发一字节数据到6311 参数 PAR_T */
void disp_6311()
{
uchar i;
for(i=0;i<8;i++)
{
bc_clk_6311=0;
bc_data_6311=par_t_0;
par_t=par_t>>1;
some_nop();
bc_clk_6311=1;
some_nop();
}
bc_data_6311=1;
bc_clk_6311=1;
}
void sw_6311()
{
uchar i;
bc_stb_6311=0; // ready to send data to pt6311 STB
some_nop();
par_t=0x43; // 0000,1100=0CH 13G,15P
disp_6311(); // send command to pt6311,here is set displayer mod,11dig/17seg
some_nop();
par[0]=0;
for(i=0;i<8;i++) /* 6311 读SW值 */
{
bc_clk_6311=1;
bc_data_6311=1;
some_nop();
bc_clk_6311=0;
some_nop();
if(bc_data_6311==1) par[0]++;
}
bc_stb_6311=1;
}
void some_nop()
{
_nop_(); _nop_(); _nop_();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -