?? 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 + -