📄 debug.c
字号:
page_flash=0x43000/0x7fff;
xp_flash=0x43000|0x8000;
IO_CE=1;
EXT_ADDR=page_flash;
IO_CE=0;
xp_flash=xp_flash+number*5;
for(i=0;i<4;i++)
{
num[i]=*(xp_flash+i);
}
setvalue=(num[0]-0x30)*1000+(num[1]-0x30)*100+(num[2]-0x30)*10+num[3]-0x30;
return(setvalue);
}
void SaveWord(uchar xdata *xp_ram)
{
uint data i;
uint data j;
uchar data k;
uchar data page_flash;
uchar xdata *xp_flash;
uchar data row;
page_flash=0x44000/0x7fff;
xp_flash=0x44000|0x8000;
for(k=0;k<128;k++)
{
IO_CE=1;
EXT_ADDR=0;
IO_CE=0;
XBYTE[0xD555]=0xaa; //load 0xaa to adresss 5555
XBYTE[0xAAAA]=0x55; //load 0x55 to address 2aaa
XBYTE[0xD555]=0xa0; //load 0xa0 to adresss 5555
IO_CE=1;
EXT_ADDR=page_flash;
IO_CE=0;
for(i=0;i<256;i++)
{
if(xp_ram<0x7fff)
{
*xp_flash++=*xp_ram++;
}
else
{
*xp_flash++=' ';
}
}
delay(10000);
}
}
void RamToFlash(uint offset)
{
uint data i;
uint data j;
uchar data page_flash;
uchar xdata *xp_ram;
uchar xdata *xp_flash;
ulint data row1;
uchar data row;
union
{
uchar byte[4];
unsigned long int dword;
uint word[2];
} word;
xp_ram=0;
{
for(row=0;row<16;row++)
{
row1=row;
word.dword=row1*0x3000+offset;
page_flash=word.byte[1]+10;
xp_ram=row*2048;
xp_flash=word.word[1]|0x8000;
for(j=0;j<8;j++)
{
IO_CE=1;
EXT_ADDR=0;
IO_CE=0;
XBYTE[0xD555]=0xaa; //load 0xaa to adresss 5555
XBYTE[0xAAAA]=0x55; //load 0x55 to address 2aaa
XBYTE[0xD555]=0xa0; //load 0xa0 to adresss 5555
IO_CE=1;
EXT_ADDR=page_flash;
IO_CE=0;
for(i=0;i<256;i++)
{
*xp_flash++=*xp_ram++;
}
delay(10000);
}
}
}
}
//******************************************************************************
void ClearRam()
{
uchar xdata *xp_ram;
xp_ram=0x0000;
while(xp_ram<0x7fff)
{
*xp_ram++=0xff;
}
}
void CreateFnt16(uchar kind) //构建16点阵显示RAM
{
uchar xdata *xp_ram;
uchar xdata *xp_rom;
uchar code *xp_code;
uchar xdata *xp_word;
uchar data temp;
uchar data row; //点阵行,16点阵字为16行
uchar data col; // 点阵列,16点阵字为16列
uint data length; // 汉字长度,即多少个汉字,32K RAM 存16点阵字则可存储128字,共2048点
uint data length1;
uchar data low ;
uchar data high;
uchar data asc;
unsigned long int data qu_code;
uint wei_code;
unsigned long int data position;
uint data page;
uchar data page_flash;
uchar data character;
bit flag;
uchar word_end;
union
{
uchar bytel;
uchar byteh;
uint word;
} word;
xp_ram=0x0000;
length=0;
flashaddr=0;
length1=0;
word_end=0;
flag=0;
xp_word=0x4000|0x8000;
IO_CE=1;
EXT_ADDR=8;
IO_CE=0;
character=*xp_word;
// while(character!=0x0D)
while(word_end<4)
{
if((character==0x0d)||(character==0x0a))
{
word_end++;
character=*xp_word++;
}
else
{
word_end=0;
if(character<0xa0) // ASC 处理部分
{
asc=character;
IO_CE=1;
EXT_ADDR=8;
IO_CE=0;
xp_word++;
character=*xp_word;
position=asc*16; // 字符在ASC16中的偏移位置
position=position+0x42000; // ASC字库在存储器中的偏移位置
IO_CE=1;
page=position/32768; // 计数页码 32K/页
EXT_ADDR=page;
IO_CE=0;
page=(position%32768);
xp_rom=(page|0x8000); // 字库芯片在硬件电路中的地址
for(row=0;row<16;row++)
{
xp_ram=row*2048+length*8; // 每行数据为2048个字节
low=*xp_rom++;
for(col=0;col<8;col++) // 将字库中点阵数据变换为LED显示屏把需数据
{
low<<=1;
temp=(CY&RED0)^DAT_INVERSE;
*xp_ram++=temp;
}
}
if(length<255)
{
length++;
flag=~flag;
}
else
{
RamToFlash(length1);
length1+=2048;
xp_ram=0;
length=0;
flag=0;
}
}
else
{
IO_CE=1;
EXT_ADDR=8;
IO_CE=0;
character=*xp_word++;
qu_code=character-0xa1; //区码
character=*xp_word++;
wei_code=character-0xa1; //位码
character=*xp_word;
position=32*(qu_code*94+wei_code); //根据区位码计算汉字点阵在字库中的位置
IO_CE=1; // 选择外部IO
page=position/32768; //计算页码
EXT_ADDR=page; //将页码写入扩展地址寄存器
IO_CE=0; // 选 择EEPROM
page= (position%32768);
xp_rom=(page|0x8000);
for(row=0;row<16;row++)
{
xp_ram=row*2048+length*8;
high=*xp_rom++; // 汉字点阵左半部分
low=*xp_rom++;; // 汉字点阵右半部分
for(col=0;col<8;col++)
{
high<<=1;
temp=(CY&RED0)^DAT_INVERSE;
*xp_ram++=temp;
}
for(col=0;col<8;col++)
{
low<<=1;
temp=(CY&RED0)^DAT_INVERSE;
*xp_ram++=temp;
}
}
if(length<253)
{
length+=2;
}
else
{
RamToFlash(length1);
length1+=2048;
xp_ram=0;
length=0;
flag=0;
}
}
}
}
}
void init()
{
uchar i,j;
uchar xdata *xp2;
uchar xdata *xp1;
uchar idata *ip_time;
uchar sec;
DE=0;
IO_CE=1;
CT_REG=CT_1; // LED显示板上OE
SC_REG=1;
IN_OE=0;
ClearRam();
EA=1;
SCON=0X50; // SM0/SM1/SM2/REN/TB8/RB8/TI/RI
TMOD=0X21;
TH1=0XF4;
TL1=0XF4;
// TH1=0XF7;
// TL1=0XF7;
TR1=1;
ES=1;
PS=1;
IT0=1;
TR0=1;
TH0=0Xf8;
TL0=0Xf8;
dp.dph=0;
charge();
ip_time=timemem;
v_Get1302(ip_time);
sec=*ip_time;
if(sec>0x7f)
*ip_time=0;
v_Set1302(ip_time);
// SetTime();
}
uchar xdata *CompareBuffer(uchar code * pc_str) // 在RAM中搜索指定字符串
{
uchar data i;
uchar xdata *xp_ram;
uchar code *cp_str;
uchar xdata *xp_ram1;
bit same;
xp_ram=0;
for(xp_ram=0;xp_ram<0x7fff;xp_ram++)
{
cp_str=pc_str;
xp_ram1=xp_ram;
while(*cp_str)
{
if(*xp_ram1!=*cp_str)
{
same=0;
break;
}
else
{
same=1;
cp_str++;
xp_ram1++;
_nop_();
}
}
if(same)
break;
}
return(xp_ram);
}
void ProcessBuffer()
{
uchar xdata *xp_ram;
xp_ram=CompareBuffer("*%%%%%#:");
{
if(xp_ram<0x7fff)
{
SetTime(xp_ram+8);
ledflag=1;
}
}
xp_ram=CompareBuffer("*$$$$$#:");
if(xp_ram<0x7fff)
{
SaveWord(xp_ram+8); //将文字存入FLASH
CreateFnt16();
pt_col=START_PT;
_nop_();
}
}
void main()
{
init();
while(1)
{
v_Get1302(timemem);
led_disp();
if(timeout>1000)
{
xp_rbuffer=0;
ET0=0;
IO_CE=1;
CT_REG=CT_0;
ET0=1;
}
else
{
timeout++;
}
if(receiveflag)
{
EA=0;
IO_CE=1;
CT_REG=CT_1;
ProcessBuffer();
receiveflag=0;
IO_CE=1;
CT_REG=CT_0;
EA=1;
}
}
}
void serial() interrupt 4
{
uchar i;
i=SBUF;
RI=0;
timeout=0;
if(!receiveflag)
*xp_rbuffer++=i;
if((i==0x0A)||(i==0x0d))
{
over_count++;
if(over_count>4)
{
xp_rbuffer=0;
over_count=0;
receiveflag=1;
}
}
else
{
over_count=0;
}
_nop_();
}
void intt0() interrupt 1
{
uchar xdata *px2;
uchar xdata *px1;
ulint row1;
uint addr;
uchar temp;
uchar page1;
uchar page;
uint offset;
uchar dot;
union
{
uchar byte[4];
unsigned long int dword;
uint word[2];
} word;
row1=row;
word.dword=row1*0x3000+pt_col;
page=word.byte[1]+10;
IO_CE=1;
EXT_ADDR=page;
IO_CE=0;
px1=(word.word[1]|0x8000);
for(dot=0;dot<128;dot++)
{
temp=*px1++;
}
IO_CE=1; //选择外部IO,也就是使CPLD内部锁存器有效,使eeprom无效
SC_REG=0; // 595 锁存
SC_REG=1;
SCAN=row;//^0xff; // 行扫描 输出
row++; // 下一行
if(row&0x10)
{
row=0; // 扫完16行回到第1行
if(pt_col<=4096-160)
{
pt_col++;
}
else
{
pt_col=START_PT;
}
}
TH0=0Xf5;
TL0=0X00;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -