1616LED点阵滚动显示汉字

#include<reg51.h>

#define uint unsigned int
#define uchar unsigned char
sbit st_cp=P3^5;//接输出存储器锁存时钟线 12号管脚
sbit sh_cp=P3^6;//接数据输入时钟线 11号管脚
sbit ds_data=P3^4;//接数据线 14号管脚
//OE使能端一直接地
sbit key=P3^7;

unsigned char code wo[][32]=//汉字编码 ***一切皆有可能***
{
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//一

{0x10,0x00,0x10,0x00,0x13,0xFC,0x10,0x44,0x10,0x44,0x1E,0x44,0xF0,0x44,0x10,0x44,
0x10,0x44,0x12,0x84,0x14,0x84,0x19,0x04,0x11,0x04,0x02,0x14,0x04,0x08,0x00,0x00},//切

{0x20,0x80,0x24,0x88,0x3E,0x9C,0x20,0xE0,0x24,0x82,0x28,0x82,0x32,0x7E,0x24,0x00,
0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10},//皆

{0x01,0x00,0x01,0x00,0x7F,0xFE,0x02,0x00,0x04,0x00,0x0F,0xF0,0x18,0x10,0x28,0x10,
0x4F,0xF0,0x88,0x10,0x08,0x10,0x0F,0xF0,0x08,0x10,0x08,0x90,0x08,0x70,0x08,0x20},//有

{0x00,0x00,0x7F,0xFE,0x00,0x08,0x00,0x08,0x1F,0x88,0x10,0x88,0x10,0x88,0x10,0x88,
0x10,0x88,0x1F,0x88,0x10,0x88,0x00,0x08,0x00,0x48,0x00,0x28,0x00,0x10,0x00,0x00},//可

{0x20,0x40,0x30,0x40,0x24,0x4C,0x42,0x70,0xFF,0x44,0x42,0x46,0x00,0x7C,0x7E,0x00,
0x42,0x40,0x7E,0x4C,0x42,0x70,0x7E,0x40,0x42,0x44,0x42,0x46,0x4A,0x3C,0x44,0x00},//能

{0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x09,0x40,0x0D,0x20,0x19,0x10,0x11,0x18,//小
0x21,0x0C,0x41,0x06,0x81,0x04,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00},

{0x00,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x08,0x3F,0xFC,//王
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,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,0x00,0x00,0x00,0x00}//空格
};

/****************************************************************************************
函数声明
****************************************************************************************/

void delay(unsigned int k);
void HC595send_data(uchar _data);
void zishu (uchar x);
/****************************************************************************************
主函数
****************************************************************************************/
void main()
{
zishu (8);
}
/****************************************************************************************
74HC595芯片使能函数
****************************************************************************************/
void HC595send_data(uchar d_data)
{
uchar i;
st_cp=0;//使输出存储器锁存时钟线=0,与下面的st_cp=1组成一个上升沿以便并行输出8位数据
for(i=0;i<8;i++)
{
sh_cp=
0;//使接数据输入时钟线=0,与

下面的sh_cp=1组成一个上升沿以便读取数据位放入锁存器的Q0位,
//Q0位原来的数据位移入Q1

if((d_data&0x80)!=0)//如果数据的最高位不为0,
ds_data=1; //使数据位=1;
else //否则
ds_data=0;//使数据位=0;
d_data<<=1; //让数据左移一位
sh_cp=1;//使接数据输入时钟线=1,与上面的sh_cp=0组成一个上升沿以便读取数据位放入锁存器的Q0位,
//Q0位原来的数据移入Q1
}

st_cp=1;//使输出存储器锁存时钟线=0,与上面的st_cp=0组成一个上升沿以便并行输出8位数据
}
/****************************************************************************************
延时函数
****************************************************************************************/
void delay(unsigned int k)
{
unsigned int m,n;
for(m=k;m>0;m--)
for(n=110;n>0;n--);

}
/****************************************************************************************
显示汉字个数=x
****************************************************************************************/
void zishu (uchar x)
{
uchar m, n,p, k,q=20;
while(1)
{
if(key==0)
{
q-=1;

if(q==0) q=20;

}
for(m=0;m<x;m++)//显示显示汉字个数
for(p=0;p<16;p++)//控制整行移动
for(n=0;n<q;n++)//控制移动速度
for(k=0;k<16;k++)//行选
{
P2=k;
HC595send_data(wo[m][2*(k+p)+1]);
HC595send_data(wo[m][2*(k+p)]);
delay(1);
}
}
}



相关文档
最新文档