P10屏幕的点亮

来源:互联网 发布:linux qt4.8.0下载 编辑:程序博客网 时间:2024/06/10 00:03

希望有大神能够有所指导啊。还是有点不是很了解,下面是自己调试代码的一些体验过程。



#include <ioCC2530.h>

#include <string.h>


#define  uint  unsigned int
#define  uchar unsigned char


#define time 10
uint i,k,p;


//定义LED的端口
#define r    P1_0
#define sclk P1_1
#define ckl  P1_2
#define a    P1_4  //  接了行控制信号A 
#define b    P1_3  //接了行控制信号B
#define oe   P1_5


//自摸软件没有问题。里面的数值,不需要拍擦啦。看看其他地方有没有毛病。
//发现自模软件里面的自模型怎么对应不上来呢???(PS :虽然没有弄出来目前,但是最少还是了解了自摸软件是怎么弄的。 )
char  tab[128]={/*--  文字:  王  --*/
/*--  Fixedsys12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFF,0xFF,0xFD,0xFF,0x80,0x03,0xFD,0xF7,0xFE,0xFF,0xC0,0x2F,0xFE,0xFF,0xFD,0xDF,
0xFE,0xFF,0xFD,0xBF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xC0,0x07,0xFD,0xFF,


/*--  文字:  者  --*/
/*--  Fixedsys12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFE,0xFF,0xF0,0x0F,0xFE,0xFF,0xE7,0xEF,0xFE,0xFF,0xD7,0xEF,0xFE,0xFF,0xB0,0x0F,
0xFE,0xFF,0x77,0xEF,0xFE,0xFF,0xF7,0xEF,0x00,0x01,0xF0,0x0F,0xFF,0xFF,0xF7,0xEF,






                                                              
      
               };//第一次的程序为什么只显示4行呢?是因为在循环体中只写入了4行的值。
              //其次,就是一个16进制的数值代表8个小灯泡,那么一共就得对应于32*16/8=64个字符才对啊。
              //对啊,这里就是64个16进制数啊,没毛病。


//函数声明
void Delay_ms(uint tt);










void Delay_ms(uint tt)
{
    uchar i;
//for(i=0;i<tt;i++)
for(i=tt;i>0;i--);
}


void input595(uchar dat)
 {


   uchar i;
  for(i=0;i<8;i++)
 {
   ckl=0;
  if(dat&0x80)
    r=1;
  else 
    r=0;
  dat<<=1;
   
// delay(2);
   ckl=1;
   ckl=0;
}
}


void out595()
{
sclk=0;
sclk=1;
oe=1;
Delay_ms(time);
sclk=0;
oe=0;
}




void main(void)
{  P1DIR |= 0x3F; 
  int q;


  oe=0;
 k=0;


//a=1;  //即使是这样,还是亮的,这是为什么呢??无解。
//b=0;
int boardnum=4;
while(1)
{

 
//  for(q=0;q<=6;q+=2)
//   {
 for(k=0;k<boardnum;k++)
                             { 
                                        for(p=0;p<4;p++)
                                        { 
                                           
                                           input595(tab[48+p+4*k]);
                                           input595(tab[32+p+4*k]);
                                           input595(tab[16+p+4*k]);
                                           input595(tab[p+4*k]);
                              
                                      
                                     
                                        }


                                        

 
                                         switch(k)
{
   case 0: a=0;b=0;break; //选中每四行的其中一行
   case 1 :a=1;b=0;break; //选中每四行的另外一行,以下2者均是如此。
   case 2 :a=0;b=1;break; //果然找到原因了,就是由于延时没有弄好,才导致的问题。
   case 3: a=1;b=1;break; //以上是由于测试找到的问题,遇到问题还是自己多测试。
}


    out595();   //0,0是第一行,1,0是第二行,0,1是第三行,1,1是第四行

                     
                             }  
                    //一次循环后,把16个595都装满了。然后接下来释放了。然后又在下一次循环过程中重新给595装上新的值。
                   //但是就是还没有明白怎么装的过程。
                   //595中叫做锁存信号,而P10中的H信号叫做控制电路的控制信号。控制信号控制好了。led亮灭与否则取决于595了。
  
 
  // }
      }






   
}
//SI4953ADY这个芯片的引脚输出怎么看?
//另外扫描方式具体怎么扫描,那个大循环不会看?
//a,b具体有什么用,没有理清楚?
原创粉丝点击