您现在的位置是:主页 > news > dw网站首页的滚动图片怎么做/站长之家是干什么的
dw网站首页的滚动图片怎么做/站长之家是干什么的
admin2025/5/24 19:13:30【news】
简介dw网站首页的滚动图片怎么做,站长之家是干什么的,东莞制作公司网站的公司,网站合作建设方案STC单片机大部分内部集成了EEPROM,也有部分单片机没有专门的EEPROM,但可以将用户程序区存储用户程序后剩余的Flash当EEPROM使用,如IAP15W4K61S4,IRC15W4K63S4。EEPROM擦写次数在10万次以上。EEPROM擦写是按扇区擦写的,需要一次擦写…
dw网站首页的滚动图片怎么做,站长之家是干什么的,东莞制作公司网站的公司,网站合作建设方案STC单片机大部分内部集成了EEPROM,也有部分单片机没有专门的EEPROM,但可以将用户程序区存储用户程序后剩余的Flash当EEPROM使用,如IAP15W4K61S4,IRC15W4K63S4。EEPROM擦写次数在10万次以上。EEPROM擦写是按扇区擦写的,需要一次擦写…
STC单片机大部分内部集成了EEPROM,也有部分单片机没有专门的EEPROM,但可以将用户程序区存储用户程序后剩余的Flash当EEPROM使用,如IAP15W4K61S4,IRC15W4K63S4。EEPROM擦写次数在10万次以上。EEPROM擦写是按扇区擦写的,需要一次擦写的数据尽量放在同一扇区。停电时EEPROM不会丢失数据,可用以保存一些设置参数,或在停电关机前保存本次运行的部分参数,供下次运行时使用。与IAP及EEPROM相关的寄存器如下:
下面寄存器的说明:
下面我们来写ISP/IAP操作的库函数。新建两个文件,分别以stceeprom.h,stceeprom.c存入C51 Template文件夹下Library文件夹中。完成后的头文件如下:
/*stceeprom.hDesigned by Bill LiuVersion 0.0 Modified last by Bill Liu on 12/15/2021
*/
#ifndef __STCEEPROM_H__
#define __SSTCEEPROM_H__#include "stc15w4k.h"
#include "mtype.h"#define CMD_IDLE 0 //idle
#define CMD_READ 1 //IAP command: read
#define CMD_PROGRAM 2 //IAP command: write
#define CMD_ERASE 3 //IAP command: erase#define ENABLE_IAP 0x80 //if SYSCLK>30MHz
//#define ENABLE_IAP 0x81 //if SYSCLK<24MHz
//#define ENABLE_IAP 0x82 //if SYSCLK<20MHz
//#define ENABLE_IAP 0x83 //if SYSCLK<12MHz
//#define ENABLE_IAP 0x84 //if SYSCLK<6MHz
//#define ENABLE_IAP 0x85 //if SYSCLK<3MHz
//#define ENABLE_IAP 0x86 //if SYSCLK<2MHz
//#define ENABLE_IAP 0x87 //if SYSCLK<1MHz
/***********************************************************
Function:IapIdle();
Return value: void
Discription: configure IAP idle mode
Example:IapIdle();
***********************************************************************/
void IapIdle();/***********************************************************
Function:IapEraseSector(WORD addr);
Return value: void
Discription: erase section data, addr is head of the section's address
Example:IapEraseSector(0x6200); //erase 50th section
***********************************************************************/
void IapEraseSector(WORD addr); /***********************************************************
Function:IapWritecChar(WORD addr, i8 dat);
Return value: void
Discription: write char to eeprom
Example:
IapWritecChar(0x6200,127); //write 127 addr:0x6200
***********************************************************************/
void IapWritecChar(WORD addr, i8 dat); /***********************************************************
Function:IapWriteInt(WORD addr, int dat);
Return value: void
Discription: write int dat to the addr~addr+1
Example:
IapWriteInt(0x6200,5000); //write 5000 to 0x6200~0x6201
***********************************************************************/
void IapWriteInt(WORD addr, int dat); /***********************************************************
Function:IapWriteI32(WORD addr, i32 dat);
Return value: void
Discription: write i32 dat to the addr~addr+3
Example:
IapWriteI32(0x6200,5000); //write 5000 to 0x6200~0x6203
***********************************************************************/
void IapWriteI32(WORD addr, i32 dat); /***********************************************************
Function:IapWriteString(WORD addr,BYTE *mString);
Return value: void
Discription: write string's all character to eeprom, not write end flag of string
Example:
IapWriteString(0x6200,"abcd"); //write 5000 to 0x6200~0x6203
***********************************************************************/
void IapWriteString(WORD addr,BYTE *mString); /***********************************************************
Function:IapReadChar(WORD addr, i8 *dat);
Return value: i8
Discription: read char from eeprom
Example:
IapReadChar(0x6200,&mbyte);
***********************************************************************/
i8 IapReadChar(WORD addr, i8 *dat); /***********************************************************
Function:IapReadInt(WORD addr, i16 *dat);
Return value: int
Discription: read integer from eeprom
Example:
IIapReadByte(0x6200,&mInt);
***********************************************************************/
i16 IapReadInt(WORD addr, i16 *dat); /***********************************************************
Function:IapReadInt(WORD addr, i16 *dat);
Return value: int
Discription: read long from eeprom
Example:
IIapReadByte(0x6200,&mLong);
***********************************************************************/
i32 IapReadI32(WORD addr, i32 *dat);/***********************************************************
Function:IapReadInt(WORD addr, i16 *dat);
Return value: int
Discription: read n character to string from eeprom
Example:
IIapReadByte(0x6200,mString,10);
***********************************************************************/
void IapReadString(WORD addr,BYTE *mString, ui8 n); #endif
完成后的源文件如下:
/*stceeprom.cDesigned by Bill LiuVersion 0.0 Modified last by Bill Liu on 12/1/2021
*/
#include "stceeprom.h"
#include <intrins.h>#include <string.h>
//*******************************
void IapIdle()
{IAP_CONTR = 0; //¹Ø±ÕIAP¹¦ÄÜIAP_CMD = 0; //Çå³ýÃüÁî¼Ä´æÆ÷IAP_TRIG = 0; //Çå³ý´¥·¢¼Ä´æÆ÷IAP_ADDRH = 0x80; //½«µØÖ·ÉèÖõ½·ÇIAPÇøÓòIAP_ADDRL = 0;
}
//End of IapIdle()//*****************************************
void IapEraseSector(WORD addr)
{IAP_CONTR = ENABLE_IAP; //ʹÄÜIAPIAP_CMD = CMD_ERASE; //ÉèÖÃIAPÃüÁî Erase sectionIAP_ADDRL = addr; //ÉèÖÃIAPµÍµØÖ·IAP_ADDRH = addr >> 8; //ÉèÖÃIAP¸ßµØÖ·IAP_TRIG = 0x5a; //д´¥·¢ÃüÁî(0x5a)_nop_();IAP_TRIG = 0xa5; //д´¥·¢ÃüÁî(0xa5)_nop_(); //µÈ´ýISP/IAP/EEPROM²Ù×÷Íê³ÉIapIdle();
}
//End of IapEraseSector(WORD addr)//*****************************************
void IapWritecChar(WORD addr, i8 dat)
{IAP_CONTR = ENABLE_IAP; //ʹÄÜIAPIAP_CMD = CMD_PROGRAM; //ÉèÖÃIAPÃüÁî WriteIAP_ADDRL = addr; //ÉèÖÃIAPµÍµØÖ·IAP_ADDRH = addr >> 8; //ÉèÖÃIAP¸ßµØÖ·IAP_DATA = dat; //дISP/IAP/EEPROMÊý¾ÝIAP_TRIG = 0x5a; //д´¥·¢ÃüÁî(0x5a)_nop_();IAP_TRIG = 0xa5; //д´¥·¢ÃüÁî(0xa5)_nop_(); //µÈ´ýISP/IAP/EEPROM²Ù×÷Íê³ÉIapIdle();
}
//En of IapWritecChar(WORD addr, i8 dat)//****************************************
void IapWriteInt(WORD addr, int dat)
{ui8 i;typedef union{i16 dat1;char mchar[2];}NEW_DATA;NEW_DATA data1;data1.dat1 = dat;for(i = 0; i < 2; i++){IAP_CONTR = ENABLE_IAP; //ʹÄÜIAPIAP_CMD = CMD_PROGRAM; //ÉèÖÃIAPÃüÁî WriteIAP_ADDRL = addr; //ÉèÖÃIAPµÍµØÖ·IAP_ADDRH = addr >> 8;IAP_DATA = data1.mchar[i];IAP_TRIG = 0x5a; //д´¥·¢ÃüÁî(0x5a)_nop_();IAP_TRIG = 0xa5; //д´¥·¢ÃüÁî(0xa5)_nop_(); addr++;}IapIdle(); //¹Ø±ÕIAP¹¦ÄÜ
}
//End of IapWriteInt(WORD addr, int dat)//***************************************
void IapWriteI32(WORD addr, i32 dat)
{ui8 i;typedef union{i32 dat1;char mchar[4];}NEW_DATA;NEW_DATA data1;data1.dat1 = dat;for(i = 0; i < 4; i++){IAP_CONTR = ENABLE_IAP; //ʹÄÜIAPIAP_CMD = CMD_PROGRAM; //ÉèÖÃIAPÃüÁî WriteIAP_ADDRL = addr; //ÉèÖÃIAPµÍµØÖ·IAP_ADDRH = addr >> 8;IAP_DATA = data1.mchar[i];IAP_TRIG = 0x5a; //д´¥·¢ÃüÁî(0x5a)_nop_();IAP_TRIG = 0xa5; //д´¥·¢ÃüÁî(0xa5)_nop_(); addr++;}IapIdle(); //¹Ø±ÕIAP¹¦ÄÜ
}
//End of IapWriteI32(WORD addr, i32 dat) //*******************************************
void IapWriteString(WORD addr,BYTE *mString)
{ui8 i;IAP_CONTR = ENABLE_IAP; //ʹÄÜIAPIAP_CMD = CMD_PROGRAM; //ÉèÖÃIAPÃüÁîfor(i=0; i<strlen(mString);i++){IAP_ADDRL = (addr + i); //ÉèÖÃIAPµÍµØÖ·IAP_ADDRH = (addr + i) >> 8;IAP_DATA = mString[i];IAP_TRIG = 0x5a; //д´¥·¢ÃüÁî(0x5a)_nop_();IAP_TRIG = 0xa5; //д´¥·¢ÃüÁî(0xa5)_nop_(); }IapIdle(); //¹Ø±ÕIAP¹¦ÄÜ
}
//End of IapWriteString(WORD addr,BYTE *mString)//***********************************************
i8 IapReadChar(WORD addr, i8 *dat)
{IAP_CONTR = ENABLE_IAP; //ʹÄÜIAPIAP_CMD = CMD_READ; //ÉèÖÃIAPÃüÁîIAP_ADDRL = addr; //ÉèÖÃIAPµÍµØÖ·IAP_ADDRH = addr >> 8; //ÉèÖÃIAP¸ßµØÖ·IAP_TRIG = 0x5a; //д´¥·¢ÃüÁî(0x5a)_nop_(); IAP_TRIG = 0xa5; //д´¥·¢ÃüÁî(0xa5)_nop_(); //µÈ´ýISP/IAP/EEPROM²Ù×÷Íê³É*dat = IAP_DATA; //¶ÁISP/IAP/EEPROMÊý¾ÝIapIdle(); //¹Ø±ÕIAP¹¦ÄÜreturn *dat; //·µ»Ø
}
//End of IapReadChar(WORD addr, i8 *dat)//***********************************
i16 IapReadInt(WORD addr, i16 *dat)
{ui8 i;typedef union{i16 dat1;char mchar[2];}NEW_DATA;NEW_DATA data1;IAP_CONTR = ENABLE_IAP; //ʹÄÜIAPIAP_CMD = CMD_READ; //ÉèÖÃIAPÃüÁîfor(i = 0; i < 2; i++){IAP_ADDRL = (addr + i); //ÉèÖÃIAPµÍµØÖ·IAP_ADDRH = ((addr + i) >> 8); //ÉèÖÃIAP¸ßµØÖ·IAP_TRIG = 0x5a; //д´¥·¢ÃüÁî(0x5a)_nop_(); IAP_TRIG = 0xa5; //д´¥·¢ÃüÁî(0xa5)_nop_(); //µÈ´ýISP/IAP/EEPROM²Ù×÷Íê³Édata1.mchar[i]= IAP_DATA; //¶ÁISP/IAP/EEPROMÊý¾Ý}IapIdle();*dat = data1.dat1;return *dat;
}
//End of IapReadInt(WORD addr, i16 *dat)//***********************************
i32 IapReadI32(WORD addr, i32 *dat)
{ui8 i;typedef union{i32 dat1;char mchar[4];}NEW_DATA;NEW_DATA data1;IAP_CONTR = ENABLE_IAP; //ʹÄÜIAPIAP_CMD = CMD_READ; //ÉèÖÃIAPÃüÁîfor(i = 0; i < 4; i++){IAP_ADDRL = (addr + i); //ÉèÖÃIAPµÍµØÖ·IAP_ADDRH = ((addr + i) >> 8); //ÉèÖÃIAP¸ßµØÖ·IAP_TRIG = 0x5a; //д´¥·¢ÃüÁî(0x5a)_nop_(); IAP_TRIG = 0xa5; //д´¥·¢ÃüÁî(0xa5)_nop_(); //µÈ´ýISP/IAP/EEPROM²Ù×÷Íê³Édata1.mchar[i] = IAP_DATA; //¶ÁISP/IAP/EEPROMÊý¾Ý}IapIdle();*dat = data1.dat1;return *dat;
}
//End of IapReadI32(WORD addr, i32 *dat)//***************************************
void IapReadString(WORD addr,BYTE *mString, ui8 n) read n char to a string
{ui8 i;memset(mString,0,strlen(mString));IAP_CONTR = ENABLE_IAP; //ʹÄÜIAPIAP_CMD = CMD_READ; //ÉèÖÃIAPÃüÁîfor(i = 0; i < n; i++){IAP_ADDRL = (addr + i); //ÉèÖÃIAPµÍµØÖ·IAP_ADDRH = ((addr + i) >> 8); //ÉèÖÃIAP¸ßµØÖ·IAP_TRIG = 0x5a; //д´¥·¢ÃüÁî(0x5a)_nop_(); IAP_TRIG = 0xa5; //д´¥·¢ÃüÁî(0xa5)_nop_(); //µÈ´ýISP/IAP/EEPROM²Ù×÷Íê³ÉmString[i] = IAP_DATA; //¶ÁISP/IAP/EEPROMÊý¾Ý}IapIdle();
}
//End of IapReadString(WORD addr,BYTE *mString, ui8 n)
测试程序,头文件:
/*main.hDesigned by Bill LiuVersion 0.0 Modified last by Bill Liu on 12/15/2021
*/#ifndef __MAIN_H_
#define __MAIN_H_#include "mtype.h"
#include "stcio.h"
//#include "lcd.h"
#include "delay.h"
#include "stctimer.h"
#include "stcuart.h"
#include "myport.h"
#include "stceeprom.h"const FSYSCLOCK FSCLK = F30MHz; //define system clock frequency 30MHz, FSYSCLOCK was defined in mtype.h
const ui32 FSCLK1 = 30000000L; //define system clock frequency 30MHzi8 mstr[25] ="";void SundBuzzerx10ms(ui8 x);#endif
测试程序,源文件:
/*main.cDesigned by Bill LiuVersion 0.0 Modified last by Bill Liu on 12/15/2021
*/#include "main.h" void main()
{STCIO_InitPortsBits(P0|P1|P2|P3|P4, 0xFF, BI_IO);P3 = 0xFF;UartS1_Init(VBAUD_8BITS,G1,T2,9600);STCIO_InitP3Bit(SCT_BIT1, PP_OUT);IapEraseSector(0x6000); IapWriteString(0x6000,"Eeprom & Uart1 test!");IapEraseSector(0x6200); IapWriteI32(0x6200, 123456789);SundBuzzerx10ms(50);Delay10xms(50, FSCLK);SundBuzzerx10ms(50);while(1){memset(mstr,0,strlen(mstr));IapReadString(0x6000,mstr,20); UartS1_SendString(mstr);UartS1_SendString("\r\n");LongToString(IapReadI32(0x6200, &myi),mstr);UartS1_SendString(mstr);UartS1_SendString("\r\n");UartS1_SendString("\r\n");Delay10xms(200, FSCLK);}
}
//End of main()//*********************************************
void SundBuzzerx10ms(ui8 x)
{BUZZER = 0;Delay10xms(x, FSCLK);BUZZER = 1;
}
//End of SundBuzzerx10ms(ui8 x)
编译结果:
下载到单片机,串口调试助手显示结果:
以上演示代码及相关库文件已上传到CSDN,文件名为:Stceeprom Library Source Code.rar。如需离线查看可去下载。