📄 stc_iap_eeprom.c
字号:
if(++adcount==25)
{
aveab=sumab/25;
sumab=0;
adcount=0;
// disp_flag=1;
}
}
//读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节
INT8U Byte_Read(INT16U add)
{
IAP_DATA = 0x00;
IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间
IAP_CMD = 0x01; //IAP/ISP/EEPROM 字节读命令
my_unTemp16.un_temp16 = add;
IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
//EA = 0;
IAP_TRIG = 0x5A; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG = 0xA5; //送完A5h 后,ISP/IAP 命令立即被触发起动
_nop_();
//EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
return (IAP_DATA);
}
//字节编程,调用前需打开IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据
void Byte_Program(INT16U add, INT8U ch)
{
IAP_CONTR = ENABLE_ISP; //打开 IAP 功能, 设置Flash 操作等待时间
IAP_CMD = 0x02; //IAP/ISP/EEPROM 字节编程命令
my_unTemp16.un_temp16 = add;
IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
IAP_DATA = ch; //要编程的数据先送进IAP_DATA 寄存器
//EA = 0;
IAP_TRIG = 0x5A; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG = 0xA5; //送完A5h 后,ISP/IAP 命令立即被触发起动
_nop_();
//EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}
//擦除扇区, 入口:DPTR = 扇区地址
void Sector_Erase(INT16U add)
{
IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间
IAP_CMD = 0x03; //IAP/ISP/EEPROM 扇区擦除命令
my_unTemp16.un_temp16 = add;
IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
//EA = 0;
IAP_TRIG = 0x5A; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG = 0xA5; //送完A5h 后,ISP/IAP 命令立即被触发起动
_nop_();
//EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}
void IAP_Disable()
{
//关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
IAP_CONTR = 0; //关闭IAP 功能
IAP_CMD = 0; //清命令寄存器,使命令寄存器无命令,此句可不用
IAP_TRIG = 0; //清命令触发寄存器,使命令触发寄存器无触发,此句可不用
IAP_ADDRH = 0;
IAP_ADDRL = 0;
}
void Delay()
{
INT8U i;
INT16U d=5000;
while (d--)
{
i=255;
while (i--);
}
}
void sjzh(int disdata,uchar dec)//data coded
{
int m;
uchar i,k,n;
for(i=0;i<8;i++)
{
dis1[i]=0;
}
if(disdata<0) {disdata=-disdata;dis1[0]=0x0c;}
k=1;
n=0;
for(i=0;i<5;i++)
{
switch(i)
{
case 0:
m=10000;
break;
case 1:
m=1000;
break;
case 2:
m=100;
break;
case 3:
m=10;
break;
case 4:
m=1;
break;
}
dis1[k]=disdata/m+1;
if(dis1[k]==1 && n==0) dis1[k]=0;
disdata=disdata%m;
k++;
if(dec==4-i && dec!=0)
{
dis1[k]=0x0b;
if(dis1[k-1]==0) dis1[k-1]=0x1;
k++;
n=1;
}
}
/*
dis1[1]=disdata/10000+16;
if(dis1[1]==16 && dec<3) dis1[1]=0;
disdata=disdata%10000;
dis1[2]=disdata/1000+16;
if(dis1[2]==16 && dis1[1]==0 && dec<2) dis1[2]=0;
disdata=disdata%1000;
dis1[3]=disdata/100+16;
if(dis1[3]==16 && dis1[2]==0) dis1[3]=0;
disdata=disdata%100;
dis1[4]=disdata/10+16;
dis1[5]=disdata%10+16;
*/
}
//void writelcd(uchar disdata,bit flag)
//{
// int i;
// CD=flag;
// P2=disdata;
// MWR=0;
// CS=0;
// for(i=0;i<10;i++) i=i;
// CS=1;
// MWR=1;
//}
void writelcd(uchar disdata,bit flag,bit pos)
{
if(pos==0)
CS1=1;
else
CS2=1;
MWR=0;
CD=flag;
// P2=disdata;
senddat(disdata);
MEN=1;
_nop_();
_nop_();
MEN=0;
if(pos==0)
CS1=0;
else
CS2=0;
MWR=1;
}
void zfdisp(int ddx,uchar ggl,int rows,int cols) //ddx--code addr ggl--number
{
int i;
//addr=rows*0x100+cols+0x400; //width=0x10 first addr=0x400
for(i=0;i<ggl;i++)
zfxs(rows,cols+i,zfcode[ddx+i]);
}
void zfxs(int addrx,int addry,int zfcode)
{
int dptr,i,ddx;
bit pos;
dptr=zfcode*0x10;
if(addry<8)
{
ddx=addry*0x8;
pos=0;
}
else
{
ddx=(addry-8)*0x8;
pos=1;
}
writelcd(addrx+0xb8,0,pos);
writelcd(0x40+ddx,0,pos);
for(i=0;i<0x8;i++)
writelcd(EETAB[dptr+i],1,pos);
writelcd(addrx+0xb8+1,0,pos);
writelcd(0x40+ddx,0,pos);
for(i=0;i<0x8;i++)
writelcd(EETAB[dptr+i+8],1,pos);
}
void sjxs(int rows,int cols)
{
int i;
for(i=0;i<8;i++)
zfxs(rows,cols+i,dis1[i]);
}
void initlcd()
{
writelcd(0x3e,0,0);
writelcd(0x3e,0,1);
writelcd(0xc0,0,0);
writelcd(0xc0,0,1);
clear();
writelcd(0x3f,0,0);
writelcd(0x3f,0,1);
}
void openlcd()
{
writelcd(0x3f,0,0);
writelcd(0x3f,0,1);
}
void shutlcd()
{
writelcd(0x3e,0,0);
writelcd(0x3e,0,1);
}
void clear()
{
int i,j;
for(i=0;i<8;i++)
{
writelcd(0xb8+i,0,0);
writelcd(0xb8+i,0,1);
writelcd(0x40,0,0);
writelcd(0x40,0,1);
for(j=0;j<64;j++)
{
writelcd(0,1,0);
writelcd(0,1,1);
}
}
}
void mydelay(int stime)
{
int i;
for(i=0;i<stime;i++)
i=i;
}
void senddat(uchar dat)
{
int i;
for(i=0;i<8;i++)
{
if(dat&0x1<<(7-i))
SDAT=1;
else
SDAT=0;
_nop_();
_nop_();
SCLK=0;
mydelay(5);
SCLK=1;
mydelay(5);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -