📄 16×16-ldianzhen.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 + -