这是程序
- #include
- sbit ser = P3^7;
- sbit OE = P3^6;
- sbit RCK = P3^5;
- sbit SCK = P3^4;
- sbit G1 = P2^0;
- sbit G2 = P2^1;
- char code tab[]=
- {
- 0x02,0x00,0x04,0x00,0x1F,0xFF,0xE0,0x00,
- 0x00,0x00,0x1F,0xFF,0x40,0x00,0x20,0x00,
- 0x10,0x00,0x20,0x00,0x20,0x00,0x20,0x02,
- 0x20,0x01,0x7F,0xFE,0x20,0x00,0x00,0x00 //们
- };
- void Delay(int a)
- {
- while(--a);
- }
- void main()
- {
- char i,j;
- char shang,xia;
- while(1)
- {
- for(j=0;j<16;j++)
- {
- OE = 1;
- G1 = 1;
- shang = tab[j*2];//上半屏数据
- xia = tab[j*2+1];//下半屏数据
- for(i=0;i<8;i++)
- {
- ser = xia&0x01;
- SCK = 0;
- SCK = 1;
- xia >>= 1;
- }
- for(i=0;i<8;i++)
- {
- ser = shang&0x01;
- SCK = 0;
- SCK = 1;
- shang >>= 1;
- }
- RCK = 0;
- RCK = 1;
- P1 = j;
- G1 = 0; //G1是154的使能
- OE = 0;
- Delay(5);
- }
- }
- }
列驱动用的是154,P1是154的输入
硬件连接应该不会有问题,因为我用573驱动时是正常的,换成595后就不正常了.
以为是595的连接出问题了,可是单独往595送数据,比如上面的直接令shang = 0xaa;xia = 0x55;这个显示还是正常的。可是换成数组时就不正确了。
出现的问题是这样的
1,汉字显示闪烁太厉害,不是延时的问题,怎么设置延时都不行。
2,只要有汉字的点落在点阵的第一列上,那么在第一列的有点的这一行就全部是亮的。
更奇怪的是,偶尔会出现P1 = j;改为P1 = j+1;或j+2时显示正常,只是字往右边移了一位。但是改为P1 = j就又不正常了,此时再改为P1 = j+1或j+2;却显示的不是字,在点阵上只显示出一行了。