📄 1.c
字号:
#include <reg52.h>
#include <string.h>
#include "zkFunc.h"
#define false 0
#define true 1
#define bool bit
extern void ShT_LEDBoard_ColShiftOut(uchar ucExtShiftCount);
extern void ShT_LEDBoard_RowShiftOut(uint uiWriteValue);
extern code HZ_MODEL ZK_Data[];
extern code unsigned char ASCII816[][16];//标准的asc码
extern uchar ucDispDataBuff[128];
uchar ucLoopCount;
uchar ucRTCData[16];
uchar ucColDataBuff_High[17];
uchar ucColDataBuff_Low[17];
uint uiRowControlValue;
uchar ucRowLineCount;
//控制移动数量计数器
uchar ucShiftCount;
bool bMoveEnable; //是否流动显示允许标志位
sbit c_Col_SOE = P1^2; //显示开关 0为显示,1为关闭
uchar xdata ucLEDDisplayMemory[17*32]; //显示存储器
#define c_LineWidth 18 //行宽
#define c_MaxLineByteCount 18 //每行占用显示存储器字节数
#define c_MaxColNumber 128
#define c_MaxLineCount 16 //行的高度
#define c_HalfScreenMemoryOffset 16*c_LineWidth //半屏占用存储器单元
uchar ucDispTemperatureCount;
void RefreshLEDScreen(uchar ucLoopCount)//刷新屏幕
{
uchar ucRowLineCount;
uchar ucRefreshCount;
for(ucRefreshCount=0; ucRefreshCount<ucLoopCount; ucRefreshCount++)
{
uiRowControlValue = 0x0001;
for(ucRowLineCount=0; ucRowLineCount<16; ucRowLineCount++)
{
memcpy(ucColDataBuff_Low,ucLEDDisplayMemory+ucRowLineCount*c_LineWidth,17);
memcpy(ucColDataBuff_High,ucLEDDisplayMemory+c_HalfScreenMemoryOffset+ucRowLineCount*c_LineWidth,17);
if(bMoveEnable)
{
ShT_LEDBoard_ColShiftOut(ucShiftCount);
}
else
{
ShT_LEDBoard_ColShiftOut(0);
}
ShT_LEDBoard_RowShiftOut(uiRowControlValue);
c_Col_SOE = 0; //打开显示
uiRowControlValue <<= 1;
}
}
//补偿最后一行的亮度不够
memcpy(ucColDataBuff_Low,ucLEDDisplayMemory+15*c_LineWidth,17);
memcpy(ucColDataBuff_High,ucLEDDisplayMemory+c_HalfScreenMemoryOffset+15*c_LineWidth,17);
if(bMoveEnable)
{
ShT_LEDBoard_ColShiftOut(ucShiftCount);
}
else
{
ShT_LEDBoard_ColShiftOut(0);
}
c_Col_SOE = 1; //关闭显示
}
bool GetHzModelInMem(uint uiHZCode,HZ_MODEL ** pHzModel)
{
//顺序查找法
uint uiIndex;
bool bResultFlag;
uiIndex = 0;
while(1)
{
if(ZK_Data[uiIndex].uiHZcode == 0xFFFF)
{
*pHzModel = (HZ_MODEL *)&(ZK_Data[uiIndex]);
bResultFlag = false;
break;
}
if(ZK_Data[uiIndex].uiHZcode == uiHZCode)
{
//-找到
*pHzModel = (HZ_MODEL *)&(ZK_Data[uiIndex]);
bResultFlag = true;
break;
}
else
{
uiIndex++;
}
}
return bResultFlag;
}
void GetHZDot(uint uiHZCode,uchar *ucHZDotData)
{
HZ_MODEL *pHzModel;
bool bReturnValue;
bReturnValue = GetHzModelInMem(uiHZCode,&pHzModel);
memcpy(ucHZDotData,&pHzModel->model,32);
}
//取字并显示
void LED_DispHZ(uchar ucDispRow,uchar HzNo,uchar *pucDispString)
{
uchar HzNoC=16;
uchar ucZMData;
uchar ucColOffset; //列偏移量
uchar uci;
uchar ucStartPosition;
uint uiHZCode;
uchar xdata ucHZDataBuff[128];
ucColOffset = 0;
bMoveEnable = true;
HzNoC *=HzNo;
while(*pucDispString != '\0')
{
//取字模
uiHZCode = *pucDispString++;
uiHZCode <<=8;
uiHZCode += *pucDispString++;
GetHZDot(uiHZCode,ucHZDataBuff);
for(uci=0; uci<16; uci++)
{
//左半边字
ucZMData = ucHZDataBuff[uci*2];
if(ucDispRow == 1)
{
ucLEDDisplayMemory[uci*c_MaxLineByteCount+ucColOffset] =ucZMData;
}
// else
// {
// ucLEDDisplayMemory[uci*c_MaxLineByteCount+c_HalfScreenMemoryOffset+ucColOffset] =ucZMData;
// }
//右半边字
ucZMData = ucHZDataBuff[uci*2+1];
if(ucDispRow == 1)
{
ucLEDDisplayMemory[uci*c_MaxLineByteCount+ucColOffset+1] =ucZMData;
}
// else
// {
// ucLEDDisplayMemory[uci*c_MaxLineByteCount+c_HalfScreenMemoryOffset+ucColOffset+1] =ucZMData;
// }
}
ucColOffset++;
ucColOffset++;
*pucDispString = pucDispString[ucStartPosition + ucColOffset];
}
for(ucShiftCount=0; ucShiftCount<HzNoC; ucShiftCount++)
{
RefreshLEDScreen(10);
}
// ucStartPosition++;
bMoveEnable = false;
}
//
void LED_ScrollDispString(uchar ucDispRow,uchar ucRefreshCount,uchar *pucDispString)//1
{
uchar ucDispChar;
uchar ucZMData;
uchar ucColOffset; //列偏移量
uchar uci;
uchar ucStartPosition;
bMoveEnable = true;
ucDispChar = *pucDispString;
ucColOffset = 0;
ucStartPosition =0;
ucDispChar = pucDispString[ucStartPosition + ucColOffset];
while(ucDispChar != '\0')
{
for(ucColOffset = 0; ucColOffset<16; ucColOffset++)
{
for(uci=0; uci<17; uci++)
{
ucZMData = ASCII816[ucDispChar - 0x20][uci];
if(ucDispRow == 1)
{
ucLEDDisplayMemory[uci*c_MaxLineByteCount+ucColOffset] =ucZMData;
}
else
{
ucLEDDisplayMemory[uci*c_MaxLineByteCount+c_HalfScreenMemoryOffset+ucColOffset] =ucZMData;
}
}
ucDispChar = pucDispString[ucStartPosition + ucColOffset];
}
for(ucShiftCount=0; ucShiftCount<0x08; ucShiftCount++)
{
RefreshLEDScreen(ucRefreshCount);
}
ucStartPosition++;
}
bMoveEnable = false;
}
void main (void)
{
while(1)
{
// LED_ScrollDispString(1, 15, "Hello");
//下面两行为清屏用
memset(ucLEDDisplayMemory,0,c_LineWidth*c_MaxLineCount);
LED_DispHZ(1,4,"南师泰院");
// RefreshLEDScreen(100);
memset(ucLEDDisplayMemory,0,c_LineWidth*c_MaxLineCount);
LED_DispHZ(1,8,"谢谢使用南师泰院");
RefreshLEDScreen(100);
}
}
//字库
code HZ_MODEL ZK_Data[]=
{
{ 0xD0BB, //谢
0x02,0x08,0x44,0x88,0x2F,0xC8,0x28,0x88,0x0F,0x88,0x08,0xFE,0xEF,0x88,0x28,0x88,
0x28,0xC8,0x3F,0xA8,0x21,0xA8,0x2A,0x88,0x34,0x88,0x28,0x88,0x12,0xA8,0x01,0x10},
{ 0xCAB9, //使
0x10,0x40,0x10,0x44,0x1F,0xFE,0x20,0x40,0x27,0xFC,0x64,0x44,0xA4,0x44,0x24,0x44,
0x27,0xFC,0x24,0x44,0x22,0x40,0x21,0x80,0x20,0xC0,0x21,0x30,0x26,0x0E,0x28,0x04},
{ 0xD3C3, //用
0x00,0x08,0x3F,0xFC,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,
0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x41,0x08,0x41,0x28,0x80,0x10},
{ 0xC4CF, //南
0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x02,0x00,0x3F,0xFC,0x24,0x24,0x22,0x44,
0x2F,0xF4,0x21,0x04,0x3F,0xFC,0x21,0x04,0x21,0x04,0x21,0x14,0x21,0x08,0x00,0x00},
{ 0xCAA6, //师
0x08,0x00,0x0B,0xFE,0x48,0x20,0x48,0x20,0x4B,0xFE,0x4A,0x22,0x4A,0x22,0x4A,0x22,
0x4A,0x22,0x52,0x22,0x52,0x2A,0x12,0x24,0x20,0x20,0x40,0x20,0x80,0x20,0x00,0x20},
{ 0xCCA9, //泰
0x02,0x00,0x7F,0xFC,0x02,0x00,0x3F,0xF8,0x02,0x00,0xFF,0xFE,0x04,0x40,0x09,0x20,
0x11,0x18,0x29,0x2E,0xC7,0x44,0x05,0xC0,0x19,0x20,0x61,0x18,0x05,0x00,0x02,0x00},
{ 0xD4BA, //院
0x00,0x80,0xF8,0x40,0x8F,0xFE,0x94,0x04,0xA0,0x00,0xA3,0xF8,0x90,0x00,0x88,0x00,
0x8F,0xFE,0xA9,0x20,0x91,0x20,0x81,0x20,0x82,0x22,0x82,0x22,0x84,0x22,0x88,0x1E},
{ 0xFFFF, //字库结尾标志符
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -