📄 duziku.c
字号:
#include"reg51.h"
//#include "INTRINS.H"
extern void sendcmd(unsigned char cmd);
extern void sendaddress(unsigned long address);
sbit LA=P1^0;
sbit LD=P1^3;
sbit Data=P2^5; //595数据线
sbit CS=P3^3; //595输出线
sbit CLK=P3^2; //595移位时钟线
sbit OE=P3^5; //138的使能
sbit Data1=P3^4;
bit gundong=0;//16点阵汉字向左滚动显示切换标志(功能键F11实现切换)
bit shangfan=0;//16点阵汉字上翻显示切换标志(功能键F10实现切换)
// 读字库芯片****************************************
sbit GT32_CS=P1^4; //字库芯片使能
sbit GT32_CLK=P1^5; //字库芯片时钟线
sbit GT32_SI=P1^7; //字库芯片输入数据线
sbit GT32_SO=P1^6; //字库芯片输出数据线
extern unsigned char xdata zimoku[3][128];
extern unsigned char page;
//*********************8X16 点扩展字符在芯片中的字节地址的计算***********
unsigned long kuozimuaddress(unsigned char LSB)
{
unsigned long Address;
if (LSB>=0x20&&LSB<=0x7E) //内码为20H~7E 的95 个ASC 字符
Address=(LSB-0x20)*16+0x1DD780;
return(Address);
}
//******************************************************************
//****************读一个8x16国际音标字符字母字模(16个字节)********
void jiegjzimu_fun(unsigned char zishu)
{
unsigned i,j,DATA=0;
GT32_CS=0;
GT32_CLK=1;
GT32_CLK=0;
for(i=0;i<16;i++)
{
for(j=0;j<8;j++)
{
GT32_CLK=0;
if(GT32_SO)
DATA=DATA|0x01;
if(i==0&&j==0)DATA=DATA&0xfe;
GT32_CLK=1;
if(j!=7) DATA=DATA<<1;
}
zimoku[page][zishu/2*32+i*2+zishu%2]=DATA;
DATA=0;
}
GT32_CS=1;
}
//*******************************************************************
/*消除某一个字母的显示字模库*/
void Clear_one_zimu(unsigned char ge)
{
xdata unsigned char i=0;
for(i=0;i<16;i++)
zimoku[page][ge/2*32+i*2+ge%2]=0;
}
//********************* //15x16点阵汉字字模地址计算**********************
unsigned long getaddress(unsigned char MSB,unsigned char LSB)
{
unsigned long BaseAdd=0x02C9D0;
unsigned long Address;
if(MSB>=0xA1&&MSB<=0xAB&&LSB>=0xA1)
Address=(((unsigned long)MSB-0xA1)*94+((unsigned long)LSB-0xA1))*32+BaseAdd;
else if(MSB>=0xB0&&MSB<=0xF7&&LSB>=0xA1)
Address=(((unsigned long)MSB-0xB0)*94+((unsigned long)LSB-0xA1)+846)*32+BaseAdd;
return(Address);
}
//************************************************************
//*读一个15x16汉字字模(32个字节)*********************
void jiehanzi_fun(unsigned char zishu)
{
unsigned char i,j,DATA=0;
GT32_CS=0;
GT32_CLK=1;
for(i=0;i<32;i++)
{
for(j=0;j<8;j++)
{
GT32_CLK=0;
if(GT32_SO)
DATA=DATA|0x01;
else DATA=DATA|0x0;
GT32_CLK=1;
if(j!=7) DATA=DATA<<1;
}
zimoku[page][zishu*32+i]=DATA;
DATA=0;
}
GT32_CS=1;
}
//*******************************************************************
//*****************将一个8x16的拼音字母读到显示缓冲区disp_down***************
void Readtodisp_kuodown(unsigned char ASCIICode,unsigned char count)
{
unsigned long kuozimuAdd=0;
kuozimuAdd=kuozimuaddress(ASCIICode);
sendcmd(0x03);
sendaddress(kuozimuAdd);
jiegjzimu_fun(count);
}
void Readtodisp_hanzi(unsigned char *hzstr)
{
int i=0;
for(i=0;i<4;i++)
{
sendcmd(0x03);
sendaddress(getaddress(*(hzstr+i*2),*(hzstr+i*2+1)));
jiehanzi_fun(i);
}
}
void Clear_all(void)
{
unsigned char i=0,j=0;
for(i=0;i<3;i++)
for(j=0;j<128;j++)
zimoku[i][j]=0x00;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -