UID478796
威望20
金钱19375
交易诚信度15
主题165
帖子875
注册时间2008-3-18
最后登录2024-4-15
高级会员
交易诚信度15
注册时间2008-3-18
|
马上注册 家电论坛,众多有奖活动等你来参与!
您需要 登录 才可以下载或查看,没有账号?注册
x
为revox 226CD机制作完屏幕时,需要放到机器上测试 ,但在机器上测试不容易点亮所有的位置,可能会漏测试到。所以花了点时间做了个测试工具。
先看一下是怎么显示的, 这个屏是用两片pcf2111, 每片支持2*32段显示(使用双背极液晶屏)。
看一下手册里是怎么加载显示数据的。
这种时序比较简单,DLEN =1 ,第1个脉冲到33个就是显示的32位, 第34是0还是1 决定写入bp1还是bp2(双背极其中一个背极). DELN =0 再发一个脉冲就完成一次加载了。
知道原理就简单了, 用一个stc单片机实现 , 所有数据位都写入1,这样就点亮了所有段,下面的代码还做了一位数据的动态显示,如果要其它位也动态显示,那得花一些时间 去对应哪一段是哪个数据位。
下面是显示效果
下面是原代码, 有点乱, 将就看。
#include <reg52.h>
#include <intrins.h>
#include <math.h>
//SFR定义
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sbit DLEN1 = P2^1;
sbit DLEN2 = P2^4;
sbit CLK = P2^2;
sbit DATA = P2^3;
sbit GND = P2^5;
sbit V5 = P2^7;
unsigned long data1,data2;
unsigned long code s11[10] = {0xFFFFFFFF,0xFFFF9FFF,0xFFFFDFFF,0xFFFFDFFF,0xFFFFBFFF,0xFFFF7FFF,0xFFFF7FFF,0xFFFFDFFF,0xFFFFFFFF,0xFFFFFFFF};
unsigned long code s12[10] = {0xFFFFBFFF,0xFFFF8FFF,0xFFFF7FFF,0xFFFFDFFF,0xFFFFCFFF,0xFFFFDFFF,0xFFFFFFFF,0xFFFF8FFF,0xFFFFFFFF,0xFFFFDFFF};
//100us延时
void Delay100us() //@20.000MHz
{
unsigned char i, j;
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
void Delay300ms() //@20.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 23;
j = 205;
k = 120;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Init()
{
//端口模式设置
// M1 M0 口工作模式
// 0 0 准双向口
// 0 1 推挽输出
// 1 0 高阻输入
// 1 1 开漏输出
//这里要配置p36 和p35为高阻输入
P2M0 = 0xFF;
P2M1 = 0x00;
GND = 0 ;
V5 = 1;
Delay100us();
DLEN1 = 0;
DLEN2 = 0;
CLK = 0;
DATA = 0;
}
//DLEN = 1 CLB下降沿读取数据
//第一个脉冲数据是零,接下来32个是数据,33个是1,装入bp1, 0装入bp0
//DLEN 设为0,再一脉冲完成装入
void SetData(unsigned long setdata, char bp , char cs )
{
unsigned char i;
unsigned long comp;
unsigned long t;
DLEN1 = 0;
DLEN2 = 0;
CLK = 0;
DATA = 0;
Delay100us();
if( cs == 1)
{ DLEN1 = 1;}
else
{ DLEN2 = 1; }
CLK = 1;
Delay100us();
CLK = 0;
Delay100us();
for (i=1;i<33;i++)
{
comp = pow(2,i-1);
t = (setdata&comp);
if( t != 0)
{
DATA = 1;
}
else
{
DATA = 0;
}
CLK = 1;
Delay100us();
CLK = 0;
Delay100us();
}
DATA =bp;
CLK = 1;
Delay100us();
CLK = 0;
Delay100us();
DLEN1 = 0;
DLEN2 = 0;
CLK = 1;
Delay100us();
CLK = 0;
Delay100us();
}
void main(void)
{
char i ;
Init();
SetData(0XFFFFFFFF,0,2);
SetData(0XFFFFFFFF,1,2);
while(1)
{
if(i>9)
{i=0;}
data1 = 0XFFFFFFFF&s11;
data2 = 0XFFFFFFFF&s12;
SetData(data1,1,1);
SetData(data2,0,1);
Delay300ms();
i++;
}
}
|
|