專注電子技術學習與研究
當前位置:單片機教程網(wǎng) >> MCU設計實例 >> 瀏覽文章

STC12C5A60S2 EEPROM 應用實例及數(shù)碼管顯示

作者:佚名   來源:會員整理上傳   點擊數(shù):  更新時間:2014年05月22日   【字體:

 #include"stc12c5a60s2.h"

#include"intrins.h"
 
 #define uchar unsigned char
 #define uint unsigned int
 #define ADC_POWER  0x80
 #define ADC_FLAG   0x10
 #define ADC_START  0x08
 #define CMD_IDLE 0     //IAP等待
 #define CMD_READ 1     //讀flash
 #define CMD_PROGRAM  2    //寫入
 #define CMD_ERASE 3    //擦除
 #define IAP_EN 0x83
 #define iap_ADDRESS 0x0000
  void key();
void SEG();
 
char code TAB[16]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,
     0x82,0xf8,0x80,0x98,0xa0,
     0x83,0xc6,0xa1,0x86,0x8e};
#define disp P0   //smg的段控制口
 
 
sbit WE1=P2^0; //數(shù)碼管的位控制口
sbit WE2=P2^1;
sbit WE3=P2^2;
sbit WE4=P2^3;
sbit s1=P2^4;
sbit s2=P2^5;
sbit s3=P2^6;
sbit s4=P2^7;
bit bz=0;
 
 
bit s11=0;
char temp=5;
 char  td[10]={0,1,2,3,4,5,6,7,8,9};//AD 8通道
 uchar ch=0;
 
led3=2,led2=0,led1=4,led0=5; //數(shù)碼管將要顯示的數(shù)字
void delay(int k)
{
 int i,j;
 for(i=0;i<184;i++)
 for(j=0;j
 
}
 
 
void SEG()
{  WE1=WE2=WE3=WE4=1;
 disp=TAB[led3]; WE1=0;delay(1); WE1=1;
 disp=TAB[led2]; WE2=0;delay(1); WE2=1;
 disp=TAB[led1]; WE3=0;delay(1); WE3=1;
 disp=TAB[led0]; WE4=0;delay(1); WE4=1; 
}
 
 void iap_IDLE()
 {
   IAP_CONTR=0;  //禁止IAP讀寫擦除
   IAP_CMD=0;  //等待
   IAP_TRIG=0;  //命令未觸發(fā)
   IAP_ADDRH=0x80;  //高位數(shù)據(jù)地址
   IAP_ADDRL=0;     //低位
 }
 
 uchar iap_READ(uint addr)
 { uchar datas;
 IAP_CONTR=IAP_EN; //控制允許位
 IAP_CMD=CMD_READ;   //寫入讀命令
 IAP_ADDRL=addr;  //自定義地址
 IAP_ADDRH=addr>>8;
 IAP_TRIG=0x5a;  //命令有效
 IAP_TRIG=0xa5;
 _nop_();
 datas=IAP_DATA;
 iap_IDLE();
 return datas;  //返回讀出的數(shù)據(jù)
 }
 
 void iap_PROGRAM(uint addr,uchar datas)
 {
  IAP_CONTR=IAP_EN;
 IAP_CMD=CMD_PROGRAM;
 IAP_ADDRL=addr;
 IAP_ADDRH=addr>>8;
 IAP_DATA=datas;
 IAP_TRIG=0x5a;
 IAP_TRIG=0xa5;
 _nop_();
 iap_IDLE();
 }
 
 void iap_ERASE(uint addr)
 {
    IAP_CONTR=IAP_EN;
 IAP_CMD=CMD_ERASE;
 IAP_ADDRL=addr;
 IAP_ADDRH=addr>>8;
 IAP_TRIG=0x5a;
 IAP_TRIG=0xa5;
 _nop_();
 iap_IDLE();
 }
 
 
main()
{  
 
 
 while(1)
 {
     led0= temp;
  SEG();
     key();
 }
}
 void key()
{
    if(s1==0)
  { delay(1);
   if(s1==0)
   {
     if(bz==0)
     {bz=1;s11=!s11;
      if(s11==1)
      temp= iap_READ(iap_ADDRESS);
       else
       {
       iap_ERASE(iap_ADDRESS);
      iap_PROGRAM(iap_ADDRESS, temp);          
       
      temp= iap_READ(iap_ADDRESS); 
        }
     }
   }
   
  }
  else
   if(s2==0) 
 {
 delay(1);
  if(s2==0)
  { if(bz==0)
  { bz=1;
 
  
  temp++;
  if(temp==10)
  temp=0; 
   
  
  } 
  }
  }
 
  else bz=0;
}
   
關閉窗口

相關文章