51單片機(jī)讀寫(xiě)內(nèi)部EEPROM詳解_第1頁(yè)
51單片機(jī)讀寫(xiě)內(nèi)部EEPROM詳解_第2頁(yè)
51單片機(jī)讀寫(xiě)內(nèi)部EEPROM詳解_第3頁(yè)
51單片機(jī)讀寫(xiě)內(nèi)部EEPROM詳解_第4頁(yè)
51單片機(jī)讀寫(xiě)內(nèi)部EEPROM詳解_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

-.z.此文檔共包含三個(gè)程序。第一個(gè)程序最簡(jiǎn)單易懂,看懂了基本就會(huì)讀寫(xiě)51單片機(jī)部EEPROM了。第二個(gè)程序和第一個(gè)讀寫(xiě)EEPROM原理差不多,包含有LCD1602操作方法,有寫(xiě)字符串的方法。第三個(gè)程序在原有基礎(chǔ)上增加了外部中斷功能,細(xì)心的人會(huì)發(fā)現(xiàn),操作部EEPROM過(guò)程會(huì)將總中斷關(guān)閉,實(shí)際上程序要用到中斷時(shí)只需在原有的EEPROM操作后加上開(kāi)總中斷即可。驗(yàn)證第二、第三個(gè)程序時(shí)需按程序主程序中的操作說(shuō)明進(jìn)行燒錄單片機(jī),以驗(yàn)證是否成功操作單片機(jī)部EEPROM。程序1:/***************************************************************作品:EEPROM實(shí)驗(yàn),開(kāi)機(jī)還原關(guān)電前LED的亮滅狀況單片機(jī):STC89C52RC晶振:12M編譯環(huán)境:KeiluVision4V9.00***************************************************************///*include<STC89C52RC.H>*include<reg52.h>*include<intrins.h>*defineucharunsignedchar*defineuintunsignedint/****************特殊功能寄存器聲明****************/sfrISP_DATA=0*e2;sfrISP_ADDRH=0*e3;sfrISP_ADDRL=0*e4;sfrISP_CMD=0*e5;sfrISP_TRIG=0*e6;sfrISP_CONTR=0*e7;sbitLED1=P2^0;sbitLED2=P2^1;sbitK1=P3^2; //按鈕1sbitK2=P3^3; //按鈕2voidcc(uintaddr);void*c*(uintaddr,uchardat);uchardc*(uintaddr);voidQ0();/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):主程序┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*//*voidmain(void){ucharV;V=dc*(0*2002); //開(kāi)機(jī)讀取EEPROM區(qū)2002h數(shù)據(jù),還原關(guān)電前LED的亮滅狀況if(V==2) {LED1=0;LED2=1;}elseif(V==6){LED1=0;LED2=0;}while(1){if(!K1) { while(!K1);LED1=0;LED2=1;cc(0*2000); //擦除第1個(gè)扇區(qū)(2000h~21FFh)*c*(0*2002,2); //對(duì)EEPROM區(qū)2002h寫(xiě)入2 } if(!K2) { while(!K2);LED1=0;LED2=0;cc(0*2000); //擦除第1個(gè)扇區(qū)(2000h~21FFh)*c*(0*2002,6); //對(duì)EEPROM區(qū)2002h寫(xiě)入6 }}}*//*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):擦除*一扇區(qū)(每個(gè)扇區(qū)512字節(jié))入口:addr=*一扇區(qū)首地址┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidcc(uintaddr){ //打開(kāi)IAP功能(ISP_CONTR.7)=1:允許編程改變Flash,設(shè)置Flash操作等待時(shí)間//0*83(晶振<5M)0*82(晶振<10M)0*81(晶振<20M)0*80(晶振<40M)ISP_CONTR=0*81;ISP_CMD=0*03; //用戶可以對(duì)"DataFlash/EEPROM區(qū)"進(jìn)行扇區(qū)擦除ISP_ADDRL=addr;//ISP/IAP操作時(shí)的地址寄存器低八位,ISP_ADDRH=addr>>8;//ISP/IAP操作時(shí)的地址寄存器高八位。EA=0;ISP_TRIG=0*46;//在ISPEN(ISP_CONTR.7)=1時(shí),對(duì)ISP_TRIG先寫(xiě)入46h,ISP_TRIG=0*B9;//再寫(xiě)入B9h,ISP/IAP命令才會(huì)生效。_nop_();Q0(); //關(guān)閉ISP/IAP}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):寫(xiě)一字節(jié)入口:addr=扇區(qū)單元地址,dat=待寫(xiě)入數(shù)據(jù)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/void*c*(uintaddr,uchardat){ISP_CONTR=0*81; ISP_CMD=0*02; //用戶可以對(duì)"DataFlash/EEPROM區(qū)"進(jìn)行字節(jié)編程ISP_ADDRL=addr;ISP_ADDRH=addr>>8;ISP_DATA=dat;//數(shù)據(jù)進(jìn)ISP_DATAEA=0;ISP_TRIG=0*46;ISP_TRIG=0*B9;_nop_();Q0(); //關(guān)閉ISP/IAP}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):讀一字節(jié)入口:addr=扇區(qū)單元地址出口:dat=讀出的數(shù)據(jù)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/uchardc*(uintaddr){uchardat; ISP_CONTR=0*81; ISP_CMD=0*01;//用戶可以對(duì)"DataFlash/EEPROM區(qū)"進(jìn)行字節(jié)讀ISP_ADDRL=addr;ISP_ADDRH=addr>>8;EA=0;ISP_TRIG=0*46;ISP_TRIG=0*B9;_nop_();dat=ISP_DATA; //取出數(shù)據(jù)Q0(); //關(guān)閉ISP/IAP returndat;}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):關(guān)閉ISP/IAP操作┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidQ0(){ISP_CONTR=0;//關(guān)閉IAP功能ISP_CMD=0;//待機(jī)模式,無(wú)ISP操作ISP_TRIG=0;//關(guān)閉IAP功能,清與ISP有關(guān)的特殊功能寄存器}/*STC89C52RC部EEPROM詳細(xì)地址表:第一扇區(qū)第二扇區(qū)第三扇區(qū)第四扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2000h21FFh2200h23FFh2400h25FFh2600h27FFH第五扇區(qū)第六扇區(qū)第七扇區(qū)第八扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2800h29FFh2A00h2BFFh2C00h2DFFh2E00h2FFFh*/程序2:/***************************************************************作品:EEPROM實(shí)驗(yàn),開(kāi)機(jī)還原關(guān)電前LED的亮滅狀況單片機(jī):STC89C52RC晶振:12M編譯環(huán)境:KeiluVision4V9.00***************************************************************///*include<STC89C52RC.H>*include<reg52.h>*include<intrins.h>*defineucharunsignedchar*defineuintunsignedint/****************特殊功能寄存器聲明****************/sfrISP_DATA=0*e2;sfrISP_ADDRH=0*e3;sfrISP_ADDRL=0*e4;sfrISP_CMD=0*e5;sfrISP_TRIG=0*e6;sfrISP_CONTR=0*e7;sbitLED1=P2^0;sbitLED2=P2^1;sbitK1=P3^2; //按鈕1sbitK2=P3^3; //按鈕2voidcc(uintaddr);void*c*(uintaddr,uchardat);uchardc*(uintaddr);voidQ0();*ifndefuchar*defineucharunsignedchar*endif*ifndefuint*defineuintunsignedint*endif/**********************************PIN口定義**********************************/*defineLCD1602_DATAPINSP0sbitLCD1602_E=P2^7;sbitLCD1602_RW=P2^5;sbitLCD1602_RS=P2^6;/**********************************函數(shù)聲明**********************************//*在51單片機(jī)12MHZ時(shí)鐘下的延時(shí)函數(shù)*/voidLcd1602_Delay1ms(uintc);//誤差0us/*LCD1602寫(xiě)入8位命令子函數(shù)*/voidLcdWrite(uchar);/*LCD1602寫(xiě)入8位數(shù)據(jù)子函數(shù)*/ voidLcdWriteData(uchardat) ;/*LCD1602初始化子程序*/ voidLcdInit();/*LCD1602寫(xiě)入字符串*/voidLCDWrite_String(uchar*,uchary,ucharz,uchar*s);/*設(shè)置LCD1602寫(xiě)入字符串的位置*/voidLCD_set_*y(uchar*,uchary,ucharz); ucharON_Hour=0*07; //初始開(kāi)燈時(shí)間07:00 1ucharWarning_TempH=32; //高溫報(bào)警溫度5/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):主程序┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*//*voidmain(void){ucharV;V=dc*(0*2002); //開(kāi)機(jī)讀取EEPROM區(qū)2002h數(shù)據(jù),還原關(guān)電前LED的亮滅狀況if(V==2) {LED1=0;LED2=1;}elseif(V==6){LED1=0;LED2=0;}while(1){if(!K1) { while(!K1);LED1=0;LED2=1;cc(0*2000); //擦除第1個(gè)扇區(qū)(2000h~21FFh)*c*(0*2002,2); //對(duì)EEPROM區(qū)2002h寫(xiě)入2 } if(!K2) { while(!K2);LED1=0;LED2=0;cc(0*2000); //擦除第1個(gè)扇區(qū)(2000h~21FFh)*c*(0*2002,6); //對(duì)EEPROM區(qū)2002h寫(xiě)入6 }}}*/voidmain(void){LcdInit();//不注銷下面三句,燒錄一次//注銷小面三句,再燒錄一次//若兩次燒錄后現(xiàn)象一致,則操作部EEPROM成功/////////////////////////////////////////////////////////////////cc(0*2000); //擦除第1個(gè)扇區(qū)(2000h~21FFh)*c*(0*2000,ON_Hour); //對(duì)EEPROM區(qū)2002h寫(xiě)入2*c*(0*2001,Warning_TempH); //對(duì)EEPROM區(qū)2002h寫(xiě)入2/////////////////////////////////////////////////////////////////ON_Hour=dc*(0*2000);Warning_TempH=dc*(0*2001);if((ON_Hour==0*07)||(Warning_TempH==32)){ LcdWrite(0*80); LCDWrite_String(0,1,7,"SUCCESS");}elseLCDWrite_String(0,1,5,"ERROR");while(1);}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):擦除*一扇區(qū)(每個(gè)扇區(qū)512字節(jié))入口:addr=*一扇區(qū)首地址┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidcc(uintaddr){ //打開(kāi)IAP功能(ISP_CONTR.7)=1:允許編程改變Flash,設(shè)置Flash操作等待時(shí)間//0*83(晶振<5M)0*82(晶振<10M)0*81(晶振<20M)0*80(晶振<40M)ISP_CONTR=0*81;ISP_CMD=0*03; //用戶可以對(duì)"DataFlash/EEPROM區(qū)"進(jìn)行扇區(qū)擦除ISP_ADDRL=addr;//ISP/IAP操作時(shí)的地址寄存器低八位,ISP_ADDRH=addr>>8;//ISP/IAP操作時(shí)的地址寄存器高八位。EA=0;ISP_TRIG=0*46;//在ISPEN(ISP_CONTR.7)=1時(shí),對(duì)ISP_TRIG先寫(xiě)入46h,ISP_TRIG=0*B9;//再寫(xiě)入B9h,ISP/IAP命令才會(huì)生效。_nop_();Q0(); //關(guān)閉ISP/IAP}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):寫(xiě)一字節(jié)入口:addr=扇區(qū)單元地址,dat=待寫(xiě)入數(shù)據(jù)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/void*c*(uintaddr,uchardat){ISP_CONTR=0*81; ISP_CMD=0*02; //用戶可以對(duì)"DataFlash/EEPROM區(qū)"進(jìn)行字節(jié)編程ISP_ADDRL=addr;ISP_ADDRH=addr>>8;ISP_DATA=dat;//數(shù)據(jù)進(jìn)ISP_DATAEA=0;ISP_TRIG=0*46;ISP_TRIG=0*B9;_nop_();Q0(); //關(guān)閉ISP/IAP}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):讀一字節(jié)入口:addr=扇區(qū)單元地址出口:dat=讀出的數(shù)據(jù)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/uchardc*(uintaddr){uchardat; ISP_CONTR=0*81; ISP_CMD=0*01;//用戶可以對(duì)"DataFlash/EEPROM區(qū)"進(jìn)行字節(jié)讀ISP_ADDRL=addr;ISP_ADDRH=addr>>8;EA=0;ISP_TRIG=0*46;ISP_TRIG=0*B9;_nop_();dat=ISP_DATA; //取出數(shù)據(jù)Q0(); //關(guān)閉ISP/IAP returndat;}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):關(guān)閉ISP/IAP操作┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidQ0(){ISP_CONTR=0;//關(guān)閉IAP功能ISP_CMD=0;//待機(jī)模式,無(wú)ISP操作ISP_TRIG=0;//關(guān)閉IAP功能,清與ISP有關(guān)的特殊功能寄存器}/*STC89C52RC部EEPROM詳細(xì)地址表:第一扇區(qū)第二扇區(qū)第三扇區(qū)第四扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2000h21FFh2200h23FFh2400h25FFh2600h27FFH第五扇區(qū)第六扇區(qū)第七扇區(qū)第八扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2800h29FFh2A00h2BFFh2C00h2DFFh2E00h2FFFh*//********************************************************************************函數(shù)名:Lcd1602_Delay1ms*函數(shù)功能:延時(shí)函數(shù),延時(shí)1ms*輸入:c*輸出:無(wú)*說(shuō)名:該函數(shù)是在12MHZ晶振下,12分頻單片機(jī)的延時(shí)。*******************************************************************************/voidLcd1602_Delay1ms(uintc)//誤差0us{uchara,b; for(;c>0;c--) { for(b=199;b>0;b--) { for(a=1;a>0;a--); } } }/********************************************************************************函數(shù)名:voidLCDWrite_String(uchar*,uchary,uchar*s)*函數(shù)功能:向LCD寫(xiě)入一個(gè)字符串*輸入:*,y,*s*輸出:無(wú)*******************************************************************************/voidLCDWrite_String(uchar*,uchary,ucharz,uchar*s) //*0~15,y0,1,2,3{ LCD_set_*y(*,y,z); while(*s) { LcdWriteData(*s); s++; }}/********************************************************************************函數(shù)名:voidLCD_set_*y(uchar*,uchary,ucharz)*函數(shù)功能:指定向LCD寫(xiě)入字符串的位置*輸入:*,y,z //*:橫坐標(biāo)y:縱坐標(biāo)z:字符串長(zhǎng)度*輸出:無(wú)*******************************************************************************/voidLCD_set_*y(uchar*,uchary,ucharz){ uchari; if(y==0) { LcdWrite(0*80+*); for(i=0;i<z;i++) { LcdWriteData(''); } LcdWrite(0*80+*); } if(y==1) { LcdWrite(0*c0+*); for(i=0;i<z;i++) { LcdWriteData(''); } LcdWrite(0*c0+*); } if(y==2) { LcdWrite(0*94+*); for(i=0;i<z;i++) { LcdWriteData(''); } LcdWrite(0*94+*); } if(y==3) { LcdWrite(0*d4+*); for(i=0;i<z;i++) { LcdWriteData(''); } LcdWrite(0*d4+*); }}/********************************************************************************函數(shù)名:LcdWrite*函數(shù)功能:向LCD寫(xiě)入一個(gè)字節(jié)的命令*輸入:*輸出:無(wú)*******************************************************************************/*ifndef LCD1602_4PINS //當(dāng)沒(méi)有定義這個(gè)LCD1602_4PINS時(shí)voidLcdWrite(uchar) //寫(xiě)入命令{LCD1602_E=0;//使能LCD1602_RS=0; //選擇發(fā)送命令LCD1602_RW=0; //選擇寫(xiě)入LCD1602_DATAPINS=;//放入命令Lcd1602_Delay1ms(1); //等待數(shù)據(jù)穩(wěn)定LCD1602_E=1; //寫(xiě)入時(shí)序Lcd1602_Delay1ms(5); //保持時(shí)間LCD1602_E=0;}*elsevoidLcdWrite(uchar) //寫(xiě)入命令{LCD1602_E=0; //使能清零LCD1602_RS=0; //選擇寫(xiě)入命令LCD1602_RW=0; //選擇寫(xiě)入LCD1602_DATAPINS=; //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改Lcd1602_Delay1ms(1); LCD1602_E=1; //寫(xiě)入時(shí)序Lcd1602_Delay1ms(5);LCD1602_E=0;// Lcd1602_Delay1ms(1); LCD1602_DATAPINS=<<4;//發(fā)送低四位Lcd1602_Delay1ms(1); LCD1602_E=1; //寫(xiě)入時(shí)序Lcd1602_Delay1ms(5);LCD1602_E=0;}*endif/********************************************************************************函數(shù)名:LcdWriteData*函數(shù)功能:向LCD寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù)*輸入:dat*輸出:無(wú)*******************************************************************************/ *ifndef LCD1602_4PINS voidLcdWriteData(uchardat) //寫(xiě)入數(shù)據(jù){LCD1602_E=0; //使能清零LCD1602_RS=1; //選擇輸入數(shù)據(jù)LCD1602_RW=0; //選擇寫(xiě)入LCD1602_DATAPINS=dat;//寫(xiě)入數(shù)據(jù)Lcd1602_Delay1ms(1); LCD1602_E=1;//寫(xiě)入時(shí)序Lcd1602_Delay1ms(5);//保持時(shí)間LCD1602_E=0;}*elsevoidLcdWriteData(uchardat) //寫(xiě)入數(shù)據(jù){LCD1602_E=0; //使能清零LCD1602_RS=1; //選擇寫(xiě)入數(shù)據(jù)LCD1602_RW=0; //選擇寫(xiě)入LCD1602_DATAPINS=dat; //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改Lcd1602_Delay1ms(1); LCD1602_E=1; //寫(xiě)入時(shí)序Lcd1602_Delay1ms(5);LCD1602_E=0;LCD1602_DATAPINS=dat<<4;//寫(xiě)入低四位Lcd1602_Delay1ms(1); LCD1602_E=1; //寫(xiě)入時(shí)序Lcd1602_Delay1ms(5);LCD1602_E=0;}*endif/********************************************************************************函數(shù)名:LcdInit()*函數(shù)功能:初始化LCD屏*輸入:無(wú)*輸出:無(wú)*******************************************************************************/ *ifndef LCD1602_4PINSvoidLcdInit() //LCD初始化子程序{ LcdWrite(0*38);//開(kāi)顯示LcdWrite(0*0c);//開(kāi)顯示不顯示光標(biāo)LcdWrite(0*06);//寫(xiě)一個(gè)指針加1 LcdWrite(0*01);//清屏LcdWrite(0*80);//設(shè)置數(shù)據(jù)指針起點(diǎn)}*elsevoidLcdInit() //LCD初始化子程序{LcdWrite(0*32); //將8位總線轉(zhuǎn)為4位總線LcdWrite(0*28); //在四位線下的初始化LcdWrite(0*0c);//開(kāi)顯示不顯示光標(biāo)LcdWrite(0*06);//寫(xiě)一個(gè)指針加1 LcdWrite(0*01);//清屏LcdWrite(0*80);//設(shè)置數(shù)據(jù)指針起點(diǎn)}*endif程序3:/***************************************************************作品:EEPROM實(shí)驗(yàn),開(kāi)機(jī)還原關(guān)電前LED的亮滅狀況單片機(jī):STC89C52RC晶振:12M編譯環(huán)境:KeiluVision4V9.00***************************************************************///*include<STC89C52RC.H>*include<reg52.h>*include<intrins.h>*defineucharunsignedchar*defineuintunsignedint/****************特殊功能寄存器聲明****************/sfrISP_DATA=0*e2;sfrISP_ADDRH=0*e3;sfrISP_ADDRL=0*e4;sfrISP_CMD=0*e5;sfrISP_TRIG=0*e6;sfrISP_CONTR=0*e7;sbitLED1=P2^0;sbitLED2=P2^1;sbitK1=P3^2; //按鈕1sbitK2=P3^3; //按鈕2voidcc(uintaddr);void*c*(uintaddr,uchardat);uchardc*(uintaddr);voidQ0();*ifndefuchar*defineucharunsignedchar*endif*ifndefuint*defineuintunsignedint*endif/**********************************PIN口定義**********************************/*defineLCD1602_DATAPINSP0sbitLCD1602_E=P2^7;sbitLCD1602_RW=P2^5;sbitLCD1602_RS=P2^6;/**********************************函數(shù)聲明**********************************//*在51單片機(jī)12MHZ時(shí)鐘下的延時(shí)函數(shù)*/voidLcd1602_Delay1ms(uintc);//誤差0us/*LCD1602寫(xiě)入8位命令子函數(shù)*/voidLcdWrite(uchar);/*LCD1602寫(xiě)入8位數(shù)據(jù)子函數(shù)*/ voidLcdWriteData(uchardat) ;/*LCD1602初始化子程序*/ voidLcdInit(); /*LCD1602寫(xiě)入字符串*/voidLCDWrite_String(uchar*,uchary,ucharz,uchar*s);/*設(shè)置LCD1602寫(xiě)入字符串的位置*/voidLCD_set_*y(uchar*,uchary,ucharz); voidIntConfiguration();/*ucharON_Hour=0*07; //初始開(kāi)燈時(shí)間07:00 1ucharWarning_TempH=32; //高溫報(bào)警溫度5*/ucharON_Hour; //初始開(kāi)燈時(shí)間07:00 1ucharWarning_TempH; //高溫報(bào)警溫度/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):主程序┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidmain(void){LcdInit();IntConfiguration();//////////////////////////////////////////////////////////////////*cc(0*2000); //擦除第1個(gè)扇區(qū)(2000h~21FFh)*c*(0*2000,ON_Hour); //對(duì)EEPROM區(qū)2002h寫(xiě)入2*c*(0*2001,Warning_TempH); //對(duì)EEPROM區(qū)2002h寫(xiě)入2*//////////////////////////////////////////////////////////////////while(1){ON_Hour=dc*(0*2000);Warning_TempH=dc*(0*2001);if((ON_Hour==0*07)||(Warning_TempH==32)){ LcdWrite(0*80); LCDWrite_String(0,1,7,"SUCCESS");}elseLcdWrite(0*80);LCDWrite_String(0,1,5,"ERROR");}/*ucharV;V=dc*(0*2002); //開(kāi)機(jī)讀取EEPROM區(qū)2002h數(shù)據(jù),還原關(guān)電前LED的亮滅狀況if(V==2) {LED1=0;LED2=1;}elseif(V==6){LED1=0;LED2=0;}while(1){if(!K1) { while(!K1);LED1=0;LED2=1;cc(0*2000); //擦除第1個(gè)扇區(qū)(2000h~21FFh)*c*(0*2002,2); //對(duì)EEPROM區(qū)2002h寫(xiě)入2 } if(!K2) { while(!K2);LED1=0;LED2=0;cc(0*2000); //擦除第1個(gè)扇區(qū)(2000h~21FFh)*c*(0*2002,6); //對(duì)EEPROM區(qū)2002h寫(xiě)入6 }} */}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):擦除*一扇區(qū)(每個(gè)扇區(qū)512字節(jié))入口:addr=*一扇區(qū)首地址┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidcc(uintaddr){ //打開(kāi)IAP功能(ISP_CONTR.7)=1:允許編程改變Flash,設(shè)置Flash操作等待時(shí)間//0*83(晶振<5M)0*82(晶振<10M)0*81(晶振<20M)0*80(晶振<40M)ISP_CONTR=0*81;ISP_CMD=0*03; //用戶可以對(duì)"DataFlash/EEPROM區(qū)"進(jìn)行扇區(qū)擦除ISP_ADDRL=addr;//ISP/IAP操作時(shí)的地址寄存器低八位,ISP_ADDRH=addr>>8;//ISP/IAP操作時(shí)的地址寄存器高八位。EA=0;ISP_TRIG=0*46;//在ISPEN(ISP_CONTR.7)=1時(shí),對(duì)ISP_TRIG先寫(xiě)入46h,ISP_TRIG=0*B9;//再寫(xiě)入B9h,ISP/IAP命令才會(huì)生效。_nop_();Q0(); //關(guān)閉ISP/IAP}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):寫(xiě)一字節(jié)入口:addr=扇區(qū)單元地址,dat=待寫(xiě)入數(shù)據(jù)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/void*c*(uintaddr,uchardat){ISP_CONTR=0*81; ISP_CMD=0*02; //用戶可以對(duì)"DataFlash/EEPROM區(qū)"進(jìn)行字節(jié)編程ISP_ADDRL=addr;ISP_ADDRH=addr>>8;ISP_DATA=dat;//數(shù)據(jù)進(jìn)ISP_DATAEA=0;ISP_TRIG=0*46;ISP_TRIG=0*B9;_nop_();Q0(); //關(guān)閉ISP/IAP}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):讀一字節(jié)入口:addr=扇區(qū)單元地址出口:dat=讀出的數(shù)據(jù)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/uchardc*(uintaddr){uchardat; ISP_CONTR=0*81; ISP_CMD=0*01;//用戶可以對(duì)"DataFlash/EEPROM區(qū)"進(jìn)行字節(jié)讀ISP_ADDRL=addr;ISP_ADDRH=addr>>8;EA=0;ISP_TRIG=0*46;ISP_TRIG=0*B9;_nop_();dat=ISP_DATA; //取出數(shù)據(jù)Q0(); //關(guān)閉ISP/IAP returndat;}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):關(guān)閉ISP/IAP操作┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidQ0(){ISP_CONTR=0;//關(guān)閉IAP功能ISP_CMD=0;//待機(jī)模式,無(wú)ISP操作ISP_TRIG=0;//關(guān)閉IAP功能,清與ISP有關(guān)的特殊功能寄存器EA=1;}/*STC89C52RC部EEPROM詳細(xì)地址表:第一扇區(qū)第二扇區(qū)第三扇區(qū)第四扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2000h21FFh2200h23FFh2400h25FFh2600h27FFH第五扇區(qū)第六扇區(qū)第七扇區(qū)第八扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2800h29FFh2A00h2BFFh2C00h2DFFh2E00h2FFFh*//********************************************************************************函數(shù)名:Lcd1602_Delay1ms*函數(shù)功能:延時(shí)函數(shù),延時(shí)1ms*輸入:c*輸出:無(wú)*說(shuō)名:該函數(shù)是在12MHZ晶振下,12分頻單片機(jī)的延時(shí)。*******************************************************************************/voidLcd1602_Delay1ms(uintc)//誤差0us{uchara,b; for(;c>0;c--) { for(b=199;b>0;b--) { for(a=1;a>0;a--); } } }/********************************************************************************函數(shù)名:voidLCDWrite_String(uchar*,uchary,uchar*s)*函數(shù)功能:向LCD寫(xiě)入一個(gè)字符串*輸入:*,y,*s*輸出:無(wú)*******************************************************************************/voidLCDWrite_String(uchar*,uchary,ucharz,uchar*s) //*0~15,y0,1,2,3{ LCD_set_*y(*,y,z); while(*s) { LcdWriteData(*s); s++; }}/********************************************************************************函數(shù)名:voidLCD_set_*y(uchar*,uchary,ucharz)*函數(shù)功能:指定向LCD寫(xiě)入字符串的位置*輸入:*,y,z //*:橫坐標(biāo)y:縱坐標(biāo)z:字符串長(zhǎng)度*輸出:無(wú)*******************************************************************************/voidLCD_set_*y(uchar*,uchary,ucharz){ uchari; if(y==0) { LcdWrite(0*80+*); for(i=0;i<z;i++) { LcdWriteData(''); } LcdWrite(0*80+*); } if(y==1) { LcdWrite(0*c0+*); for(i=0;i<z;i++) { LcdWriteData(''); } LcdWrite(0*c0+*); } if(y==2) { LcdWrite(0*94+*); for(i=0;i<z;i++) { LcdWriteData(''); } LcdWrite(0*94+*); } if(y==3) { LcdWrite(0*d4+*); for(i=0;i<z;i++) { LcdWriteData(''); } LcdWrite(0*d4+*); }}/********************************************************************************函數(shù)名:LcdWrite*函數(shù)功能:向LCD寫(xiě)入一個(gè)字節(jié)的命令*輸入:*輸出:無(wú)*******************************************************************************/*ifndef LCD1602_4PINS //當(dāng)沒(méi)有定義這個(gè)LCD1602_4PINS時(shí)voidLcdWrite(uchar) //寫(xiě)入命令{LCD1602_E=0;//使能LCD1602_RS=0; //選擇發(fā)送命令LCD1602_RW=0; //選擇寫(xiě)入LCD1602_DATAPINS=;//放入命令Lcd1602_Delay1ms(1); //等待數(shù)據(jù)穩(wěn)定LCD1602_E=1; //寫(xiě)入時(shí)序Lcd1602_Delay1ms(5); //保持時(shí)間LCD1602_E=0;}*elsevoidLcdWrite(uchar) //寫(xiě)入命令{LCD1602_E=0; //使能清零LCD1602_RS=0; //選擇寫(xiě)入命令LCD1602_RW=0; //選擇寫(xiě)入LCD1602_DATAPINS=; //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改Lcd1602_Delay1ms(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論