⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 16×16-ldianzhen.c

📁 这是一个基于51的LED16x16显示汉字程序
💻 C
字号:
/******************************************************************
/*                                                                *
/* AOKE210E单片机开发系统演示程序 							      *
/*                                                                *
/* 版本: V2.0 (2007/11/20)                                       *
/* 作者: 高山流水 (Email: aoke999@sohu.com)                      *
/* 网站: www.aokemcu.cn(奥科电子)                                *
/*                                                                *
/*                                                                *
/******************************************************************/

#include <reg51.h>       //51芯片管脚定义头文件
#include <intrins.h>	 //内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint  unsigned int

#define BLKN 2          //列锁存器数

sbit  SDATA_595=P2^5;   //串行数据输入
sbit  SCLK_595 =P2^6;   //移位时钟脉冲
sbit  RCK_595  =P2^7;   //输出锁存器控制脉冲
sbit  G_74138  =P2^4;   //显示允许控制信号端口

uchar data  dispram[32];  //显示缓存
uchar temp;

void  delay(uint );

uchar code Bmp[][32]=          
 {

   {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

	{0x02,0x00,0x04,0x10,0x1F,0xF8,0x11,0x10,0x15,0x50,0x11,0x10,0x1F,0xF0,0x11,0x10,
0x15,0x50,0x11,0x10,0x01,0x04,0xFF,0xFE,0x02,0x80,0x04,0x60,0x18,0x1C,0x60,0x08},//奥
 
   {0x04,0x10,0x0E,0x10,0xF8,0x90,0x08,0x50,0x08,0x10,0xFE,0x90,0x08,0x50,0x1C,0x14,
0x1A,0x1E,0x29,0xF0,0x28,0x10,0x48,0x10,0x88,0x10,0x08,0x10,0x08,0x10,0x08,0x10},//科
  
   {0x02,0x00,0x02,0x00,0x02,0x10,0x7F,0xF8,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10,
0x42,0x10,0x7F,0xF0,0x42,0x10,0x02,0x00,0x02,0x04,0x02,0x04,0x01,0xFC,0x00,0x00},//电
  
   {0x00,0x00,0x3F,0xF0,0x00,0x10,0x00,0x20,0x00,0x40,0x01,0x80,0x01,0x04,0xFF,0xFE,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00}//子 
 
 };

/*******************************************************
*                                                      *
* 主函数                                               *
*                                                      *
*******************************************************/
void  main(void)
{
  uchar i,k;
  TMOD = 0x01;             //定时器T0工作方式1
  TH0 = 0xFC;              //1ms定时常数
  TL0 = 0x66;
  G_74138 = 1;             //关闭显示
  RCK_595=0;
  P2 =0xF0;                //行号端口清零

  IE = 0x82;               //允许定时器T0中断
  TR0 = 1;                 //启动定时器T0
  while(1)
  {
    for(k=0;k<5;k++)       //显示"奥科电子"
    {
      for(i=0;i<32;i++)         
  	  {
  	    dispram[i]= ~Bmp[k][31-i];
      }
  	  delay(1500);
    }

  } //end of while(1)
} //end of main()

/*******************************************************
*                                                      *
* 延时函数                                             *
*                                                      *
*******************************************************/
void  delay(uint dt)
{
   uchar bt;
   for(;dt;dt--)
   for(bt=0;bt<255;bt++);
 }

 
/*******************************************************
*                                                      *
*将显示数据送入74HC595内部移位寄存器                   *
*                                                      *
*******************************************************/
void WR_595(void)
{
     uchar x;
      for (x=0;x<8;x++)
     {
      temp=temp<<1; 
      SDATA_595=CY;
      SCLK_595=1;        //上升沿发生移位
       _nop_();
       _nop_();
      SCLK_595=0;
     }        
}
 
/*******************************************************
*                                                      *
* 中断服务函数                                         *
*                                                      *
*******************************************************/
void  leddisplay(void) interrupt 1 using 1
{
   uchar i,j=BLKN;
   TH0 = 0xFC;          //1ms定时常数
   TL0 = 0x66;
   i=P2;                //读取当前显示的行号
   i=++i & 0x0f;        //行号加1,屏蔽高4位
   do{
   	  j--;
      temp = dispram[i*BLKN+j];
      WR_595();
     }while(j);
   
   G_74138=1;          //关闭显示
   P2 &= 0xf0;         //行号端口清零
   RCK_595 = 1;        //上升沿将数据送到输出锁存器
   P2 |=i;             //写入行号
   RCK_595 = 0;        //锁存显示数据
   G_74138=0;          //打开显示
}

/******************************************************/

⌨️ 快捷键说明

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