📄 4字点阵屏驱动程序.c
字号:
/****************************************************************************************
51_isp学习板 4个汉字LED点阵屏驱动程序。 C51程序
编写:luojian
日期:2007-7-26
Email:lojan@126.com
接口:
请查看"51_isp学习板原理图"
本程序目的在于了解和撑握单片机人驱动16*16点阵LED动态扫描程序的写法和用LED显示汉字的方法。
所先由专用汉字取模软件对汉字进行取模,由于一个汉字至少要16*16的点阵可能正常,所以一个汉字
在单片机中要32个字节的内存保存。89S51数据存储器有4K,所以89S51中可以保存100个左右的汉字。
单片机通过串口与点阵屏连接,点阵屏列驱动为74HC595一个数8位,四字须8个595IC,行驱动为74HC138由于
两个138驱动16行。
程序的算法为取出每一个汉字的最上一行编码通过串口发送到595上,595通过内移位锁存器将数据锁存在
端口上,8951向595发送移位时钟信号和锁存信号。并驱动138对各列进行扫描。扫描完16行后重复。
*****************************************************************************************/
#include <at89x51.H>
unsigned char code hanzi[4][32]; //字模数组
unsigned char code sw[16]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, //138的驱动代码,根据138的真值表计算而来。
}; /*16行段码*/
unsigned char e;
void delay(); /*延时*/
/*********************************************************
函数名:out_rxd
功能:从串口发送数据。串口工作在同步模式下。RX发送数。TX发送时钟脉
51_isp学习板 4个汉字LED点阵屏驱动程序。 C51程序
/*********************************************************/
void out_rxd(unsigned char *d) /*从串口发送数据*/
{
SBUF=*d;
while(TI==0); //等待发送完毕
TI=0;
}
/*********************************************************
函数名:delay()
功能:延时
51_isp学习板 4个汉字LED点阵屏驱动程序。 C51程序
/*********************************************************/
void delay()
{unsigned char n;
for(n=50;n>0;n--)
{;}
}
/*********************************************************
函数名:main()
功能:主功能函数
51_isp学习板 4个汉字LED点阵屏驱动程序。 C51程序
/*********************************************************/
void main()
{
unsigned char i; //i是从字模数组里向后取数据时的计数器,用以改变显示文字的内容.
P2_0=0; //关闭蜂鸣器
SCON=0; //初始化串口为工作方式0(同步通信方式,TxD输出同步脉冲)
while(1) //重复循环显示
{
for(i=1;i<=31;i+=2) //
{
P0_4=1;
out_rxd(&hanzi[0][i]); //从串口输出第1个字的第一字节。
out_rxd(&hanzi[0][i-1]); //从串口输出第1个字的第二字节。
out_rxd(&hanzi[1][i]); //从串口输出第2个字的第一字节。
out_rxd(&hanzi[1][i-1]); //从串口输出第2个字的第二字节。0x00,
out_rxd(&hanzi[2][i]);
out_rxd(&hanzi[2][i-1]);
out_rxd(&hanzi[3][i]);
out_rxd(&hanzi[3][i-1]);
P0_6=1; //锁存为高,595锁存信号
P0=sw[e]; //输出行信号
delay(); //延时,等待一段时间,让这列显示的内容在人眼内产生“视觉暂留”现象。*/
//关闭显示
e++; //行加一
if(e==16) //一共16行。
e=0;
}
}
}
unsigned char code hanzi[4][32]={ //二维数据
/*-- 文字: 我 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0xFD,0x9F,0xF5,0xE3,0xED,0xEF,0xED,0xEF,0xFD,0xEF,0x80,0x00,0xFD,0xEF,0xED,0xEF,
0xEB,0x8F,0xF3,0xE3,0xFB,0xEC,0xF5,0xEF,0xB6,0x6F,0xAF,0xEF,0x9F,0xEB,0xBF,0xF7,
/*-- 文字: 很 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0xFF,0xF7,0xE0,0x27,0xEF,0xBB,0xE0,0x2D,0xEF,0xAE,0xEF,0xB7,0xE0,0x3B,0xFD,0xB9,
0xED,0xBA,0xC5,0xBB,0xFB,0xBB,0xF7,0xBB,0xE5,0xBB,0x8E,0xBB,0xDF,0x1B,0xFF,0xBB,
/*-- 文字: 爱 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0xE0,0xFF,0xF6,0x03,0xF7,0xB7,0xFB,0x6F,0x80,0x03,0xBF,0xBB,0xFF,0xBD,0xC0,0x03,
0xFF,0xDF,0xF0,0x1F,0xFB,0xCF,0xFD,0x2F,0xFC,0xF7,0xF3,0x39,0x8F,0xCE,0xDF,0xF3,
/*-- 文字: 你 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0xFF,0x6F,0xFE,0x6F,0xDF,0x77,0x80,0x37,0xDF,0xBB,0xED,0xD3,0xFD,0xE9,0xF5,0xBA,
0xED,0x3B,0xED,0xBB,0xDD,0xDB,0x9D,0xDB,0xDD,0xEB,0xFD,0x7B,0xFE,0xFB,0xFF,0xFF
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -