📄 5hanzi-1.c
字号:
/*******************************************************************
* *
* 5汉字LED显示屏程序 *
* *
* 16×16LED点阵显示 单行5汉字 *
* *
* 电路说明:行地址P14-P11,行选通P10, 晶振18.432MHz *
* *
* 版本: V1.0 (2008/06/15) *
* 作者: chen-icdot (Email: icdot@163.com) *
* 网站: www.zrkj.cn *
* *
* *
*******************************************************************/
#include <reg52.H>
#include <intrins.h>
#include <ABSACC.H>
#define uint unsigned int
#define uchar unsigned char
#define BLKN 10 //列锁存器数,2的倍数
sbit sd_595 = P1^5; //串行数据输入
sbit sc_595 = P1^6; //输出锁存器控制脉冲RCK--12
sbit yw_595 = P1^7; //移位时钟脉冲SCLK--11
sbit en_138 = P1^0; //显示允许控制信号端口
sbit en_ram = P3^2; //外部RAM选通
sbit en_ziku = P3^3; //外部字库芯片选通
sbit a16 = P3^1; //外部字库芯片地址16
sbit a17 = P3^5; //外部字库芯片地址17
uchar k; //k用于行数变化
uint h; //h用于滚动显示计数
uchar t,tt; //t为串行数据接收计数
uchar nm; //nm为内码指向计数
uchar comend; //comend为串行数据接收结束标志
uchar fs; //显示方式(0x00,0x10,0x13)
uchar buf;
uchar data comram[67]; //串行口接收缓冲区,首地址,次显示方式,最多64显示内容,最后为0x0d
uchar xdata dispdat[64+BLKN][16]; //单行所有数据的缓存
uchar xdata dispram[64][16];
uchar code chushi[]={0xd6,0xc7,0xc8,0xf1,0xbf,0xc6,0xbc,0xbc}; //'欢迎光临'的内码
uchar code chushi2[]={0xbb,0xb6,0xd3,0xad,0xd4,0xd9,0xb4,0xce,0xb9,0xe2,0xc1,0xd9}; //'欢迎再次光临'的内码
/************************ASCII码字模表--反************************/
uchar code asc[][16]={
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, /*" ",0*/
{0xff,0xff,0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xff,0xff,0xe7,0xe7,0xff,0xff}, /*"!",1*/
{0xff,0xed,0xc9,0xdb,0xb7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, /*""",2*/
{0xff,0xff,0xff,0xdb,0xdb,0xdb,0x01,0xb7,0xb7,0xb7,0x01,0xb7,0xb7,0xb7,0xff,0xff}, /*"#",3*/
{0xff,0xff,0xef,0xc7,0xab,0xab,0xaf,0xcf,0xe7,0xeb,0xeb,0xab,0xab,0xc7,0xef,0xef}, /*"$",4*/
{0xff,0xff,0xff,0xbb,0x5b,0x57,0x57,0x57,0xab,0xe5,0xd5,0xd5,0xd5,0xbb,0xff,0xff}, /*"%",5*/
{0xff,0xff,0xff,0xcf,0xb7,0xb7,0xb7,0xaf,0x91,0x5b,0x6b,0x77,0x76,0x89,0xff,0xff}, /*"&",6*/
{0xff,0x9f,0x9f,0xdf,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, /*"'",7*/
{0xff,0xfd,0xfb,0xf7,0xf7,0xef,0xef,0xef,0xef,0xef,0xef,0xf7,0xf7,0xfb,0xfd,0xff}, /*"(",8*/
{0xff,0xbf,0xdf,0xef,0xef,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xef,0xef,0xdf,0xbf,0xff}, /*")",9*/
{0xff,0xff,0xff,0xff,0xef,0xef,0x29,0xc7,0xc7,0x29,0xef,0xef,0xff,0xff,0xff,0xff}, /*"*",10*/
{0xff,0xff,0xff,0xff,0xef,0xef,0xef,0xef,0x01,0xef,0xef,0xef,0xef,0xff,0xff,0xff}, /*"+",11*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0x9f,0xdf,0x3f}, /*",",12*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, /*"-",13*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0x9f,0xff,0xff}, /*".",14*/
{0xff,0xff,0xfe,0xfd,0xfd,0xfb,0xfb,0xf7,0xf7,0xef,0xef,0xdf,0xdf,0xbf,0xbf,0xff}, /*"/",15*/
{0xff,0xff,0xff,0xe7,0xdb,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xdb,0xe7,0xff,0xff}, /*"0",16*/
{0xff,0xff,0xff,0xef,0x8f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x83,0xff,0xff}, /*"1",17*/
{0xff,0xff,0xff,0xc3,0xbd,0xbd,0xbd,0xfb,0xfb,0xf7,0xef,0xdf,0xbd,0x82,0xff,0xff}, /*"2",18*/
{0xff,0xff,0xff,0xc3,0xbd,0xbd,0xfb,0xe7,0xfb,0xfd,0xfd,0xbd,0xbb,0xc7,0xff,0xff}, /*"3",19*/
{0xff,0xff,0xff,0xfb,0xf3,0xeb,0xdb,0xdb,0xbb,0xbb,0x81,0xfb,0xfb,0xe1,0xff,0xff}, /*"4",20*/
{0xff,0xff,0xff,0x81,0xbf,0xbf,0xbf,0xa7,0x9b,0xfd,0xfd,0xbd,0xbb,0xc7,0xff,0xff}, /*"5",21*/
{0xff,0xff,0xff,0xe3,0xdb,0xbf,0xbf,0xa7,0x9b,0xbd,0xbd,0xbd,0xdb,0xe7,0xff,0xff}, /*"6",22*/
{0xff,0xff,0xff,0x81,0xbb,0xbb,0xf7,0xf7,0xef,0xef,0xef,0xef,0xef,0xef,0xff,0xff}, /*"7",23*/
{0xff,0xff,0xff,0xc3,0xbd,0xbd,0xbd,0xdb,0xe7,0xdb,0xbd,0xbd,0xbd,0xc3,0xff,0xff}, /*"8",24*/
{0xff,0xff,0xff,0xe7,0xdb,0xbd,0xbd,0xbd,0xd9,0xe5,0xfd,0xfd,0xdb,0xc7,0xff,0xff}, /*"9",25*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xe7,0xff,0xff,0xff,0xff,0xe7,0xe7,0xff,0xff}, /*":",26*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xe7,0xff,0xff,0xff,0xff,0xe7,0xe7,0xef,0xdf}, /*";",27*/
{0xff,0xff,0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xff,0xff}, /*"<",28*/
{0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0xff,0xff}, /*"=",29*/
{0xff,0xff,0xff,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0xff,0xff}, /*">",30*/
{0xff,0xff,0xff,0xc3,0xbd,0xbd,0x9d,0xfd,0xfb,0xf7,0xf7,0xff,0xe7,0xe7,0xff,0xff}, /*"?",31*/
{0xff,0xff,0xff,0xc7,0xbb,0xa5,0x55,0x55,0x55,0x55,0x4b,0xbd,0xbb,0xc7,0xff,0xff}, /*"@",32*/
{0xff,0xff,0xff,0xef,0xef,0xe7,0xd7,0xd7,0xdb,0xc3,0xbb,0xbd,0xbd,0x18,0xff,0xff}, /*"A",33*/
{0xff,0xff,0xff,0x07,0xbb,0xbb,0xbb,0x87,0xbb,0xbd,0xbd,0xbd,0xbb,0x07,0xff,0xff}, /*"B",34*/
{0xff,0xff,0xff,0xc1,0xbd,0xbd,0x7f,0x7f,0x7f,0x7f,0x7f,0xbd,0xbb,0xc7,0xff,0xff}, /*"C",35*/
{0xff,0xff,0xff,0x07,0xbb,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbb,0x07,0xff,0xff}, /*"D",36*/
{0xff,0xff,0xff,0x03,0xbd,0xb7,0xb7,0x87,0xb7,0xb7,0xbf,0xbd,0xbd,0x03,0xff,0xff}, /*"E",37*/
{0xff,0xff,0xff,0x03,0xbd,0xb7,0xb7,0x87,0xb7,0xb7,0xbf,0xbf,0xbf,0x1f,0xff,0xff}, /*"F",38*/
{0xff,0xff,0xff,0xc3,0xbb,0xbb,0x7f,0x7f,0x7f,0x71,0x7b,0xbb,0xbb,0xc7,0xff,0xff}, /*"G",39*/
{0xff,0xff,0xff,0x18,0xbd,0xbd,0xbd,0xbd,0x81,0xbd,0xbd,0xbd,0xbd,0x18,0xff,0xff}, /*"H",40*/
{0xff,0xff,0xff,0x83,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x83,0xff,0xff}, /*"I",41*/
{0xff,0xff,0xff,0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x77,0x0f}, /*"J",42*/
{0xff,0xff,0xff,0x11,0xbb,0xb7,0xaf,0x8f,0xaf,0xb7,0xb7,0xbb,0xbb,0x11,0xff,0xff}, /*"K",43*/
{0xff,0xff,0xff,0x1f,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbd,0x01,0xff,0xff}, /*"L",44*/
{0xff,0xff,0xff,0x11,0x93,0x93,0x93,0x93,0xab,0xab,0xab,0xab,0xab,0x29,0xff,0xff}, /*"M",45*/
{0xff,0xff,0xff,0x38,0x9d,0x9d,0xad,0xad,0xb5,0xb5,0xb5,0xb9,0xb9,0x1d,0xff,0xff}, /*"N",46*/
{0xff,0xff,0xff,0xc7,0xbb,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0xbb,0xc7,0xff,0xff}, /*"O",47*/
{0xff,0xff,0xff,0x03,0xbd,0xbd,0xbd,0xbd,0x83,0xbf,0xbf,0xbf,0xbf,0x1f,0xff,0xff}, /*"P",48*/
{0xff,0xff,0xff,0xc7,0xbb,0x7d,0x7d,0x7d,0x7d,0x7d,0x4d,0x35,0xb3,0xc7,0xf9,0xff}, /*"Q",49*/
{0xff,0xff,0xff,0x03,0xbd,0xbd,0xbd,0x83,0xb7,0xb7,0xbb,0xbb,0xbd,0x1c,0xff,0xff}, /*"R",50*/
{0xff,0xff,0xff,0xc1,0xbd,0xbd,0xbf,0xdf,0xe7,0xfb,0xfd,0xbd,0xbd,0x83,0xff,0xff}, /*"S",51*/
{0xff,0xff,0xff,0x01,0x6d,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xc7,0xff,0xff}, /*"T",52*/
{0xff,0xff,0xff,0x18,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xc3,0xff,0xff}, /*"U",53*/
{0xff,0xff,0xff,0x18,0xbd,0xbd,0xbb,0xdb,0xdb,0xd7,0xd7,0xe7,0xef,0xef,0xff,0xff}, /*"V",54*/
{0xff,0xff,0xff,0x29,0x6d,0x6d,0x6d,0x6d,0x55,0x55,0x93,0xbb,0xbb,0xbb,0xff,0xff}, /*"W",55*/
{0xff,0xff,0xff,0x18,0xbd,0xdb,0xdb,0xe7,0xe7,0xe7,0xdb,0xdb,0xbd,0x18,0xff,0xff}, /*"X",56*/
{0xff,0xff,0xff,0x11,0xbb,0xbb,0xd7,0xd7,0xef,0xef,0xef,0xef,0xef,0xc7,0xff,0xff}, /*"Y",57*/
{0xff,0xff,0xff,0xc1,0xbb,0xbb,0xf7,0xf7,0xef,0xdf,0xdf,0xbd,0xbd,0x03,0xff,0xff}, /*"Z",58*/
{0xff,0xe1,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xe1,0xff}, /*"[",59*/
{0xff,0xff,0xbf,0xbf,0xdf,0xdf,0xef,0xef,0xef,0xf7,0xf7,0xfb,0xfb,0xfb,0xfd,0xfd}, /*"\",60*/
{0xff,0x87,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x87,0xff}, /*"]",61*/
{0xff,0xe3,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, /*"^",62*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00}, /*"_",63*/
{0xff,0x9f,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, /*"`",64*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0xbd,0xe1,0xdd,0xbd,0xbd,0xc0,0xff,0xff}, /*"a",65*/
{0xff,0xff,0xff,0x3f,0xbf,0xbf,0xbf,0xa7,0x9b,0xbd,0xbd,0xbd,0x9b,0xa7,0xff,0xff}, /*"b",66*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xdd,0xbf,0xbf,0xbf,0xdd,0xe3,0xff,0xff}, /*"c",67*/
{0xff,0xff,0xff,0xf9,0xfd,0xfd,0xfd,0xe1,0xdd,0xbd,0xbd,0xbd,0xd9,0xe4,0xff,0xff}, /*"d",68*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0xbd,0x81,0xbf,0xbf,0xbd,0xc3,0xff,0xff}, /*"e",69*/
{0xff,0xff,0xff,0xf0,0xee,0xef,0xef,0x81,0xef,0xef,0xef,0xef,0xef,0x83,0xff,0xff}, /*"f",70*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc1,0xbb,0xbb,0xc7,0xbf,0xc3,0xbd,0xbd,0xc3}, /*"g",71*/
{0xff,0xff,0xff,0x3f,0xbf,0xbf,0xbf,0xa3,0x9d,0xbd,0xbd,0xbd,0xbd,0x18,0xff,0xff}, /*"h",72*/
{0xff,0xff,0xff,0xcf,0xcf,0xff,0xff,0x8f,0xef,0xef,0xef,0xef,0xef,0x83,0xff,0xff}, /*"i",73*/
{0xff,0xff,0xff,0xf3,0xf3,0xff,0xff,0xe3,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xbb,0x87}, /*"j",74*/
{0xff,0xff,0xff,0x3f,0xbf,0xbf,0xbf,0xb1,0xb7,0xaf,0x97,0xb7,0xbb,0x11,0xff,0xff}, /*"k",75*/
{0xff,0xff,0xff,0x8f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x83,0xff,0xff}, /*"l",76*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xb6,0xb6,0xb6,0xb6,0xb6,0x12,0xff,0xff}, /*"m",77*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x23,0x9d,0xbd,0xbd,0xbd,0xbd,0x18,0xff,0xff}, /*"n",78*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0xbd,0xbd,0xbd,0xbd,0xbd,0xc3,0xff,0xff}, /*"o",79*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x27,0x9b,0xbd,0xbd,0xbd,0xbb,0x87,0xbf,0x1f}, /*"p",80*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe1,0xdd,0xbd,0xbd,0xbd,0xdd,0xe1,0xfd,0xf8}, /*"q",81*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x11,0xcd,0xdf,0xdf,0xdf,0xdf,0x07,0xff,0xff}, /*"r",82*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc1,0xbd,0xbf,0xc3,0xfd,0xbd,0x83,0xff,0xff}, /*"s",83*/
{0xff,0xff,0xff,0xff,0xff,0xef,0xef,0x83,0xef,0xef,0xef,0xef,0xef,0xf3,0xff,0xff}, /*"t",84*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x39,0xbd,0xbd,0xbd,0xbd,0xb9,0xc4,0xff,0xff}, /*"u",85*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x18,0xbd,0xdb,0xdb,0xd7,0xef,0xef,0xff,0xff}, /*"v",86*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x28,0x6d,0x6d,0x55,0x55,0xbb,0xbb,0xff,0xff}, /*"w",87*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x91,0xdb,0xe7,0xe7,0xe7,0xdb,0x89,0xff,0xff}, /*"x",88*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x18,0xbd,0xdb,0xdb,0xd7,0xe7,0xef,0xef,0x1f}, /*"y",89*/
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x81,0xbb,0xf7,0xef,0xef,0xdd,0x81,0xff,0xff}, /*"z",90*/
{0xff,0xfc,0xfb,0xfb,0xfb,0xfb,0xfb,0xf7,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfc,0xff}, /*"{",91*/
{0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7}, /*"|",92*/
{0xff,0x9f,0xef,0xef,0xef,0xef,0xef,0xf7,0xef,0xef,0xef,0xef,0xef,0xef,0x9f,0xff}, /*"}",93*/
{0xff,0x8e,0x71,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff} /*"~",94*/
};
/********************************************************
* 延时函数 *
********************************************************/
void delay(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<123;i++);
}
}
/*******************************************************
*将一个字节数据送入74HC595内部移位寄存器 *
*******************************************************/
void sd_byte(unsigned char dat)
{
unsigned char i;
for (i=0;i<8;i++)
{
yw_595=0;
if (dat&0x80)
sd_595 = 1;
else
sd_595 = 0;
yw_595=1; //上升沿发生移位
_nop_();
dat = dat << 1;
}
}
/*******************************************************
*发送行数据到595移位寄存器(立即显示方式00) *
*******************************************************/
void sd_hang00(void)
{
unsigned char i;
en_ram = 0; //选通外部ram
for (i=0;i<BLKN;i++)
{
dispdat[i+BLKN][k] = dispram[i][k];
sd_byte(dispdat[i+BLKN][k]);
}
sc_595 = 1;
_nop_();
_nop_();
sc_595 = 0;
en_ram = 1;
}
/*******************************************************
*根据内码提取字模数据 *
*******************************************************/
void quzimo(uchar m,uchar n) // 提取字模程序,m、n为传入的汉字内码
{
uint data x,y;
uchar data z1,z2,i;
if((m>128)&&(n>128)) //如m>128且n>128,为汉字
{
x=(m-0xa1)*94+(n-0xa1); //计算出该汉字在汉字库中的位置
//--汉字0区----------------------------------------------------
if(x<2048) //如x<2048,则为汉字库的第0区
{
y=x*32; //计算出在0区的字节首址
for(i=0;i<16;i++) // 连续取32个字节(为一个汉字的字模)
{
en_ziku=0; a17=0; a16=0; // 选择汉字库的第0区
z1=XBYTE[2*i+y];
z2=XBYTE[2*i+y+1]; // 读出两个字节至z1、z2
en_ziku=1;en_ram=0; //选择外部RAM
dispram[nm][i]=~z1; // 将z1、z2装入字模缓冲区
dispram[nm+1][i]=~z2;
en_ram=1;
}
}
//--汉字1区----------------------------------------------------
if((x>=2048)&&(x<4096)) //如2048<=x<4096,则为汉字库的第1区
{
y=x-2048;y=y*32; //计算出在第1区的字节首址
for(i=0;i<16;i++)
{
en_ziku=0; a17=0; a16=1;
z1=XBYTE[2*i+y];
z2=XBYTE[2*i+y+1];
en_ziku=1;en_ram=0;
dispram[nm][i]=~z1;
dispram[nm+1][i]=~z2;
en_ram=1;
}
}
//--汉字2区---------------------------------------------------
if((x>=4096)&&(x<6144)) //如4096<=x<6144,则为汉字库的第2区
{
y=x-4096;y=y*32; //计算出在2区的字节首址
for(i=0;i<16;i++)
{
en_ziku=0; a17=1; a16=0;
z1=XBYTE[2*i+y];
z2=XBYTE[2*i+y+1];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -