⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5hanzi-1.c

📁 单行5汉字led显示屏的c51程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*******************************************************************
*                                                                  *
* 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 + -