久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7894|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

STC單片機片內(nèi)EEPROM的使用-記憶按鍵的方法

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:70941 發(fā)表于 2014-12-27 19:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 dagu 于 2014-12-27 19:48 編輯

      STC單片機其中的一個大特點就是片內(nèi)可觀的存儲空間,雖然大部分資深的單片機"老鳥"對于宏鑫公司將Flash描述成EEPROM頗為不滿,對我來說能夠利用好這部分空間就是勝利...
前面已經(jīng)介紹了我手頭上的芯片型號為STC89C52RC,其中的52就是表示它的內(nèi)部Flash程序存儲容量為8K,EEPROM為2K. 不說廢話貼程序.........
/*********************************************************
;----P1.7---P1.6---P1.5---P1.4-------
;----03H----02H----01H----00H----P1.0
;----07H----06H----05H----04H----P1.1
;----0BH----0AH----09H----08H----P1.2
;----0FH----0EH----0DH----0CH----P1.3
先將鍵盤的值存入EEPROM然后再去讀取
**********************************************************/

#include <reg51.h>
#include <stdio.h>

sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sfr isp_data  =0xe2;
sfr isp_addrh =0xe3;
sfr isp_addrl =0xe4;
sfr isp_cmd   =0xe5;
sfr isp_trig  =0xe6;
sfr isp_contr =0xe7;

unsigned char eeprom_read(unsigned int addres);    //讀EEPROM
void eeprom_write(unsigned int address,unsigned char write_data);//寫EEPROM.
void eeprom_eares(unsigned int addres);      //扇區(qū)擦除。
void KeyScan();
void delay10ms(unsigned char time);
void Dispaly(unsigned char k);
void Send(unsigned char s);

unsigned char key,temp; //全局變量
unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, //0~9
    0x88,0x83,0xA7,0xA1,0x86,0x8E}; //A~F 數(shù)碼管顯示數(shù)組      

//防抖動延時程序
void delay10ms(unsigned char time)
{
unsigned char a,b,c;

for(a=0;a<time;a++)
for(b=0;b<10;b++)
  for(c=0;c<120;c++)
  ;
}

void Dispaly(unsigned char k) //顯示程序
{
P0=table[k];
P2=0x00;
}
/**********************************
   eeprom擦除
***********************************/
void eeprom_eares(unsigned int addres)//扇區(qū)擦除。
     {
   unsigned i;
      isp_addrl=addres;     //低位地址
      isp_addrh=addres>>8;  //高位地址
      isp_contr=0x01;
      isp_contr=isp_contr|0x80; //設(shè)時間與充ISP操作。
      isp_cmd=0x03;         //扇區(qū)命命令
      isp_trig=0x46;        //觸發(fā)
      isp_trig=0xb9;        //觸發(fā)啟動。
      for(i=0;i<3;i++);
      isp_addrl=0xff;
      isp_addrh=0xff;
      isp_contr=0x00;
      isp_cmd=0x00;
      isp_trig=0x00;
      }
/******************************************
   EEPROM寫
*******************************************/
void eeprom_write(unsigned int addres,unsigned char write_data)
     {
   unsigned char i;
      isp_data=write_data;   //要寫入的數(shù)據(jù)。
      isp_addrl=addres;     //低位地址
      isp_addrh=addres>>8;  //高位地址
      isp_contr=0x01;
      isp_contr=isp_contr|0x80; //設(shè)時間與充ISP操作。
      isp_cmd=0x02;         //寫命令
      isp_trig=0x46;        //觸發(fā)
      isp_trig=0xb9;        //觸發(fā)啟動。
      for(i=0;i<3;i++);
      isp_addrl=0xff;
      isp_addrh=0xff;
      isp_contr=0x00;
      isp_cmd=0x00;
      isp_trig=0x00;     
       }
/**********************************************
   EEPROM讀
***********************************************/
unsigned char eeprom_read(unsigned int addres)
     {
   unsigned char i,z;
      isp_addrl=addres;   
      isp_addrh=addres>>8;  

      isp_contr=0x01;
      isp_contr=isp_contr|0x80;
      isp_cmd=0x01;         
      isp_trig=0x46;        

      isp_trig=0xb9;        
      for(i=0;i<3;i++);
      isp_addrl=0xff;
      isp_addrh=0xff;
      isp_contr=0x00;
      isp_cmd=0x00;
      isp_trig=0x00;
      z=isp_data;
      return(z);
      }

/*****************
    主程序
*****************/
void main() //主程序
{
while(1)
{
KeyScan();
}
}

void KeyScan() //按鍵掃描子程序
{
P1=0xFF;
P1_3=0;         

temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{
delay10ms(1);
temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{
  temp=P1;
  temp&=0xF0;

  switch(temp)
  {
  case 0x70:
  key=15;
  eeprom_eares(0x2200);
  eeprom_write(0x2200,key);break;
  case 0xB0:
  key=14;
  eeprom_eares(0x2200);
  eeprom_write(0x2200,key);break;
  case 0xD0:
  key=13;
  eeprom_eares(0x2200);
  eeprom_write(0x2200,key);break;
  case 0xe0:
  key=eeprom_read(0x2200);break;
  }
  Dispaly(key);
}
}

P1=0xFF;
P1_2=0;         

temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{
delay10ms(1);
temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{
  temp=P1;
  temp&=0xF0;

  switch(temp)
  {
  case 0x70:
  key=11;break;
  case 0xB0:
  key=10;break;
  case 0xD0:
  key=9;break;
  case 0xe0:
  key=8;break;
  }
  eeprom_eares(0x2200);
  eeprom_write(0x2200,key);
  Dispaly(key);
}
}

P1=0xFF;
P1_1=0;     

temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{
delay10ms(1);
temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{
  temp=P1;
  temp&=0xF0;

  switch(temp)
  {
  case 0x70:
  key=7;break;
  case 0xB0:
  key=6;break;
  case 0xD0:
  key=5;break;
  case 0xe0:
  key=4;break;
  }
  eeprom_eares(0x2200);
  eeprom_write(0x2200,key);
  Dispaly(key);
}
}

P1=0xFF;
P1_0=0;     

temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{
delay10ms(1);
temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{
  temp=P1;
  temp&=0xF0;

  switch(temp)
  {
  case 0x70:
  key=3;break;
  case 0xB0:
  key=2;break;
  case 0xD0:
  key=1;break;
   case 0xe0:
  key=0;break;
  }
  eeprom_eares(0x2200);
  eeprom_write(0x2200,key);
  Dispaly(key);
}
}
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:71547 發(fā)表于 2015-1-7 19:17 | 只看該作者
不錯,我不知道的東西
回復(fù)

使用道具 舉報

板凳
ID:242560 發(fā)表于 2017-12-19 09:04 | 只看該作者
很好的,謝謝!剛好要用到
回復(fù)

使用道具 舉報

地板
ID:521117 發(fā)表于 2019-12-30 20:25 | 只看該作者
感謝感謝
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品在线免费观看 | 一区在线视频 | a毛片| 欧美激情综合五月色丁香小说 | 在线一区二区三区 | 国产在线视频三区 | 美国a级毛片免费视频 | 亚洲精品国产综合区久久久久久久 | 黄色大片免费看 | 国产精品成人久久久久 | 欧美精品日韩精品国产精品 | 亚洲欧美第一视频 | 欧美视频免费在线 | www免费视频 | 一区二区三区精品在线视频 | 麻豆久久久9性大片 | 精品久久香蕉国产线看观看亚洲 | 亚洲视频在线播放 | 久久久人成影片免费观看 | 欧美亚洲视频 | 一道本在线 | 亚洲国产网 | www亚洲精品 | 国产福利在线 | 国产乱码精品一区二区三区中文 | 天天干天天操天天看 | 欧美日韩国产一区二区三区 | 国产精品久久久久久久久久不蜜臀 | 国产日韩精品视频 | 一区二区三区欧美 | 日韩一级不卡 | 天天爱爱网 | 亚洲视频欧美视频 | 日韩不卡三区 | 日本一区二区不卡 | 一区二区三区四区国产 | 久久久一二三区 | 日本xx视频免费观看 | 午夜丰满少妇一级毛片 | 国产精品久久久久久吹潮日韩动画 | 天天天操 |