16led.c

来自「16X16的LED点阵控制(附原理图)」· C语言 代码 · 共 64 行

C
64
字号
#include <reg51.h>
#define uchar unsigned char
#define uint  unsigned int

//LED16x16的片选信号,其它数据信号,地址信号,写信号接开发板的相应信号.本例中片选信号通过1片138译码得到(相应的地址为0xb00x)。
xdata unsigned char RowLow  _at_ 0xb002;   //行低八位地址
xdata unsigned char RowHigh _at_ 0xb003;   //行高八位地址
xdata unsigned char ColLow  _at_ 0xb000;   //列低八位地址
xdata unsigned char ColHigh _at_ 0xb001;   //列高八位地址

//字模   每个16x16点阵汉字为: 8位x2x16 = 256位, 32字节
code uchar Font[][32] = {
  //南
  0x08,0x40,0x14,0x41,0x04,0x41,0x04,0x41,0xF4,0x5F,0x04,0x41,0x04,0x41,0xF4,0x5F,
  0x44,0x44,0x24,0x48,0xFE,0x7F,0x04,0x01,0x00,0x01,0xFE,0xFF,0x04,0x01,0x00,0x01,
  //京
  0x00,0x02,0x08,0x25,0x18,0x11,0x30,0x09,0x40,0x09,0x00,0x01,0xF0,0x1F,0x10,0x10,
  0x10,0x10,0x10,0x10,0xF8,0x1F,0x10,0x00,0xFE,0xFF,0x04,0x01,0x00,0x01,0x00,0x02,
  };

void delay(uchar t)
{
   uchar i,j;

   for(i= t; i>0; i--){
     for(j=0; j<100; j++);
   }
}

void main()
{
  uchar i,j;
  uchar count;
  uint bitmask;

  //清屏
  ColLow = 0xff;  //行驱动低有效
  ColHigh= 0xff;
  RowLow = 0x00;  //列驱动高有效
  RowHigh= 0x00;

  while(1){
    for(j=0; j<10; j++){
      for(count =0; count <50; count ++){
        bitmask = 0x01;
        for(i=0;i<16;i++){

          RowLow  = 0x00;              //首先清屏
          RowHigh = 0x00;
          ColLow  = ~ Font[j][i*2  ];  //写出一行数据
          ColHigh = ~ Font[j][i*2+1];
          RowLow  = bitmask & 0xff;    //点亮此行
          RowHigh = bitmask >> 8;

          bitmask <<= 1;               //移位,指向下一行
          delay(1);
        }
      }
      ColLow  = 0xff;
      ColHigh = 0xff;
    }
  }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?