点阵屏接口
CLK GND
STB GND
G1 R2
R1 G2
LIN GND
A GND
B GND
C D
接口:
点阵屏 单片机(学习板左上角10P插针) * 实物引脚排列
A 1 * 1 2
B 2 * 3 4
C 3 * 5 6
D 4 * 7 8
STB 5 * 9 10
CLK 6 *
R1 7 *
G1 8 *
D 9 *
R2 接屏另一排针5 *
G2 接屏另一排针7 *
*
***********************************************************
功能说明:
单片机通过P0口与点阵屏连接,点阵屏列驱动为74HC595一个数8位,四字须8个595IC,行驱动为74HC138由于
两个138驱动16行。 本程序未用到串口,程序使用P0口模拟串口方式与595通信
8个595输出例信号,两个138输出16行信号。
显示效果为先显示四个红色的汉字,再显示四个绿色的字,接着显示两红绿和两绿两红的汉字
*****************************************************************************************/
#include <at89x51.H>
unsigned char code hanzi[8][32]; //字模数组
unsigned char code sw[16]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x087,
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, };//138的驱动代码,根据138的真值表计算而来。
unsigned char e,i;
sbit EN =P3^0; //使能
sbit STB =P0^4; //锁存
sbit CLK =P0^5; //时钟
sbit R =P0^6; //红数据
sbit G =P0^7; //绿数据
void delay(); //延时
void out_R(unsigned char *d); //发送红色数据
void out_G(unsigned char *d); //发送绿色数据
void SHOW_R(); //显示红色
void SHOW_G(); //显示绿色
void SHOW_RG(); //先红后绿
void SHOW_GR(); //先绿后红
/*********************************************************
函数名:delay()
功能:延时
32*64LED双色点阵屏 C51 程序
编写:xiaoden
时间:2008年6月9日
邮箱:love2151@xinhuanet.com
网址:www.89s51diy.com
/*********************************************************/
void delay()
{unsigned char n;
for(n=200;n>0;n--)
{;}
}
/*********************************************************
函数名:main()
功能:主功能函数
函数名:delay()
功能:延时
32*64LED双色点阵屏 C51 程序
编写:xiaoden
时间:2008年6月9日
邮箱:love2151@xinhuanet.com
网址:www.89s51diy.com
/*********************************************************/
void main()
{unsigned int f;
P2_0=0; //关闭蜂鸣器
CLK=0;
while(1) //重复循环显示
{
for(i=1;i<=31;i+=2) //
{
EN=1; //关闭显示
if(f<100)
SHOW_R(); //显示红色
else if(f<200)
SHOW_G(); //显示绿色
else if(f<300)
SHOW_RG(); //显示红绿色
else
SHOW_GR(); //显示绿红色
STB=1; //锁存为高,595锁存信号
P0=sw[e]; //输出行信号
EN=0; //开显示
delay(); //延时,等待一段时间,让这列显示的内容在人眼内产生“视觉暂留”现象。*/
//关闭显示
e++; //行加一
if(e==16) //一共16行。
e=0;
}
if(f++==400)
f=0;
}
}
/*********************************************************
函数名:SHOW_R()
功能:显示红色汉字
说明:通过端口模拟串口输出。
函数名:delay()
功能:延时
32*64LED双色点阵屏 C51 程序
编写:xiaoden
时间:2008年6月9日
邮箱:love2151@xinhuanet.com
网址:www.89s51diy.com
/*********************************************************/
void SHOW_R()
{
out_R(&hanzi[0][i-1]); //从串口输出第1个字的第二字节。
out_R(&hanzi[0][i]); //从串口输出第1个字的第一字节。
out_R(&hanzi[1][i-1]); //从串口输出第2个字的第二字节
out_R(&hanzi[1][i]); //从串口输出第2个字的第一字节。
out_R(&hanzi[2][i-1]);
out_R(&hanzi[2][i]);
out_R(&hanzi[3][i-1]);
out_R(&hanzi[3][i]);
out_R(&hanzi[4][i-1]); //从串口输出第1个字的第二字节。
out_R(&hanzi[4][i]); //从串口输出第1个字的第一字节。
out_R(&hanzi[5][i-1]); //从串口输出第2个字的第二字节
out_R(&hanzi[5][i]); //从串口输出第2个字的第一字节。
out_R(&hanzi[6][i-1]);
out_R(&hanzi[6][i]);
out_R(&hanzi[7][i-1]);
out_R(&hanzi[7][i]);
}
/*********************************************************
函数名:SHOW_RG()
功能:显示红绿色汉字
说明:通过端口模拟串口输出。
函数名:delay()
功能:延时
32*64LED双色点阵屏 C51 程序
编写:xiaoden
时间:2008年6月9日
邮箱:love2151@xinhuanet.com
网址:www.89s51diy.com
/*********************************************************/
void SHOW_RG()
{
out_R(&hanzi[0][i-1]); //从串口输出第1个字的第二字节。
out_R(&hanzi[0][i]); //从串口输出第1个字的第一字节。
out_G(&hanzi[1][i-1]); //从串口输出第2个字的第二字节
out_G(&hanzi[1][i]); //从串口输出第2个字的第一字节。
out_R(&hanzi[2][i-1]);
out_R(&hanzi[2][i]);
out_G(&hanzi[3][i-1]);
out_G(&hanzi[3][i]);
out_R(&hanzi[4][i-1]); //从串口输出第1个字的第二字节。
out_R(&hanzi[4][i]); //从串口输出第1个字的第一字节。
out_G(&hanzi[5][i-1]); //从串口输出第2个字的第二字节
out_G(&hanzi[5][i]); //从串口输出第2个字的第一字节。
out_R(&hanzi[6][i-1]);
out_R(&hanzi[6][i]);
out_G(&hanzi[7][i-1]);
out_G(&hanzi[7][i]);
}
/*********************************************************
函数名:SHOW_GR()
功能:显示绿红色汉字
说明:通过端口模拟串口输出。
函数名:delay()
功能:延时
32*64LED双色点阵屏 C51 程序
编写:xiaoden
时间:2008年6月9日
邮箱:love2151@xinhuanet.com
网址:www.89s51diy.com
/*********************************************************/
void SHOW_GR()
{
out_G(&hanzi[0][i-1]); //从串口输出第1个字的第二字节。
out_G(&hanzi[0][i]); //从串口输出第1个字的第一字节。
out_R(&hanzi[1][i-1]); //从串口输出第2个字的第二字节
out_R(&hanzi[1][i]); //从串口输出第2个字的第一字节。
out_G(&hanzi[2][i-1]);
out_G(&hanzi[2][i]);
out_R(&hanzi[3][i-1]);
out_R(&hanzi[3][i]);
out_G(&hanzi[4][i-1]); //从串口输出第1个字的第二字节。
out_G(&hanzi[4][i]); //从串口输出第1个字的第一字节。
out_R(&hanzi[5][i-1]); //从串口输出第2个字的第二字节
out_R(&hanzi[5][i]); //从串口输出第2个字的第一字节。
out_G(&hanzi[6][i-1]);
out_G(&hanzi[6][i]);
out_R(&hanzi[7][i-1]);
out_R(&hanzi[7][i]);
}
/*********************************************************
函数名:SHOW_G()
功能:显示绿色汉字
说明:通过端口模拟串口输出。
函数名:delay()
功能:延时
32*64LED双色点阵屏 C51 程序
编写:xiaoden
时间:2008年6月9日
邮箱:love2151@xinhuanet.com
网址:www.89s51diy.com
/*********************************************************/
void SHOW_G()
{
out_G(&hanzi[0][i-1]); //从串口输出第1个字的第二字节。
out_G(&hanzi[0][i]); //从串口输出第1个字的第一字节。
out_G(&hanzi[1][i-1]); //从串口输出第2个字的第二字节
out_G(&hanzi[1][i]); //从串口输出第2个字的第一字节。
out_G(&hanzi[2][i-1]);
out_G(&hanzi[2][i]);
out_G(&hanzi[3][i-1]);
out_G(&hanzi[3][i]);
out_G(&hanzi[4][i-1]); //从串口输出第1个字的第二字节。
out_G(&hanzi[4][i]); //从串口输出第1个字的第一字节。
out_G(&hanzi[5][i-1]); //从串口输出第2个字的第二字节
out_G(&hanzi[5][i]); //从串口输出第2个字的第一字节。
out_G(&hanzi[6][i-1]);
out_G(&hanzi[6][i]);
out_G(&hanzi[7][i-1]);
out_G(&hanzi[7][i]);
}
/*********************************************************
函数名:out_R
功能:发送红色数据
说明:通过端口模拟串口输出。
函数名:delay()
功能:延时
32*64LED双色点阵屏 C51 程序
编写:xiaoden
时间:2008年6月9日
邮箱:love2151@xinhuanet.com
网址:www.89s51diy.com
/*********************************************************/
void out_R(unsigned char *d)//发送数据
{ unsigned char i,TEMP;
bit e;
TEMP=*d;
G=1; //关闭红色
for(i=0;i<8;i++)
{
e=(TEMP<<i)&0x80; //取出最高位。
if(e==0)
R=0;
else
R=1; //输出数据1
CLK=1; //发送时钟
CLK=0;
}
}
/*********************************************************
函数名:out_G
功能:发送绿色数据
说明:通过端口模拟串口输出。
函数名:delay()
功能:延时
32*64LED双色点阵屏 C51 程序
编写:xiaoden
时间:2008年6月9日
邮箱:love2151@xinhuanet.com
网址:www.89s51diy.com
/*********************************************************/
void out_G(unsigned char *d)//发送数据
{ unsigned char i,TEMP;
bit e;
TEMP=*d;
R=1; //关闭红色
for(i=0;i<8;i++)
{
e=(TEMP<<i)&0x80; //取出最高位。
if(e==0)
G=0;
else
G=1; //输出数据1
CLK=1; //发送时钟
CLK=0;
}
}
unsigned char code hanzi[8][32]={ //二维数据
//本程序对应取模软件下载地址:http://www.89s51diy.com/upload/read.php?tid-1211.html
//单片机DIY网 点阵取模软件
//www.89s51diy.com 2008-6-9 17:33:13
0xEF,0xEF,0xF7,0xDF,0xFB,0xB7,0xC0,0x03,0xDE,0xF7,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,
0xDE,0xF7,0xC0,0x07,0xDE,0xFF,0xFE,0xFB,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,//单
0xFF,0x7F,0xDF,0x7F,0xDF,0x7F,0xDF,0x7F,0xDF,0x7B,0xC0,0x01,0xDF,0xFF,0xDF,0xFF,
0xC0,0x3F,0xDF,0xBF,0xDF,0xBF,0xDF,0xBF,0xDF,0xBF,0xDF,0xBF,0xBF,0xBF,0x7F,0xBF,//片
0xEF,0xFF,0xEF,0xEF,0xEE,0x07,0xEE,0xEF,0x02,0xEF,0xEE,0xEF,0xCE,0xEF,0xC6,0xEF,
0xAA,0xEF,0xAE,0xEF,0x6E,0xEF,0xEE,0xEF,0xEE,0xED,0xED,0xED,0xEB,0xF1,0xE7,0xFF,//机
0xFF,0xFB,0x80,0x01,0xBF,0xFB,0xBD,0xF3,0x9D,0x73,0xAB,0xAB,0xAB,0xAB,0xB7,0xDB,
0xB7,0xDB,0xAB,0xAB,0xAD,0xB3,0x9D,0x73,0x9E,0xFB,0xBD,0xFB,0xBF,0xEB,0xBF,0xF7,//网
0xFF,0xF7,0xC0,0x03,0xDF,0xF7,0xC0,0x07,0xDF,0xF7,0xC0,0x07,0xFE,0xFF,0xDE,0xF7,
0xC0,0x03,0xDE,0xFF,0xBE,0xEF,0x40,0x07,0xFE,0xFF,0xFE,0xFB,0x00,0x01,0xFF,0xFF,//星
0xFF,0xF7,0xC0,0x03,0xDF,0xF7,0xC0,0x07,0xDF,0xF7,0xC0,0x07,0xFE,0xFF,0xDE,0xF7,
0xC0,0x03,0xDE,0xFF,0xBE,0xEF,0x40,0x07,0xFE,0xFF,0xFE,0xFB,0x00,0x01,0xFF,0xFF,//星
0xFD,0xFF,0xFD,0xFF,0xFD,0xEF,0x80,0x07,0xBD,0xEF,0xBD,0xEF,0x80,0x0F,0xBD,0xEF,
0xBD,0xEF,0x80,0x0F,0xBD,0xEF,0xFD,0xFF,0xFD,0xFB,0xFD,0xFB,0xFE,0x03,0xFF,0xFF,//电
0xFF,0xFF,0xC0,0x0F,0xFF,0xEF,0xFF,0xDF,0xFF,0xBF,0xFE,0x7F,0xFE,0xFB,0x00,0x01,
0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFA,0xFF,0xFD,0xFF,//子
};