#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;
}