16*16点阵屏

来源:互联网 发布:东德歧视知乎 编辑:程序博客网 时间:2024/04/30 15:03

基于stc89c52rc,4片74HC595,跟一个16*16的点阵屏
程序如下:
#include<reg52.h>
#include<INTRINS.H>
#define uchar unsigned char 
sbit DAT=P1^0;   //列数据
sbit DATH=P1^3;  //行数据
sbit ljl=P1^1;  //列寄存器 
sbit lcl=P1^2;  //列锁存器
sbit hjl=P1^4;  //行寄存器
sbit hcl=P1^5;  //行锁存器
void delay(uchar x)
{char i,j;

for(i=0;i<x;i++)
   for(j=0;j<110;j++);
}
code unsigned char tie[32]={//1
0x03,0x80,0x07,0x80,0x0F,0x80,0x01,0x80,
0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,
0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,
0x01,0x80,0x01,0x80,0xFF,0xFF,0xFF,0xFF};
unsigned char code tabh[]={0x00,0x80,0x00,0x40,
         0x00,0x20,0x00,0x10,
         0x00,0x01,0x00,0x02,     
         0x00,0x04,0x00,0x08, 
         0x00,0x80,0x00,0x40,
         0x00,0x20,0x00,0x10,
         0x00,0x01,0x00,0x02,     
         0x00,0x04,0x00,0x08     
            };


void sendbyte(unsigned char a)
{  unsigned char i;
   for(i=0;i<8;i++)
        {
         ljl=0;
         DAT=a&0x80;
         a=a<<1;
         ljl=1;
         }
}
void out595(void)
{
        lcl=0;
        _nop_();
        lcl=1;
}
void sendbyteh(unsigned char a)
{  unsigned char i;
   for(i=0;i<8;i++)
        {
         hjl=0;
         DATH=a&0x80;
         a=a<<1;
         hjl=1;
         }
}
void out595h(void)
{
        hcl=0;
        _nop_();
        hcl=1;
}
void main()
{
 unsigned char i,j;
 while(1)
 {
  for(i=0;i<16;i++)
  {
   for(j=0;j<2;j++)
   {
    sendbyte(tie[i*2+j]);  //列扫描
    sendbyteh(tabh[i*2+j]);  //行扫描
   } 
    out595();     
    out595h();
  } 


  delay(50); 
 }


}
我自己动手做了,但是结果没实现。但是我感觉程序没问题,可能是我第一会动手做电子器件技术不够好的原因。