/* d1-p31,d2-p32,d3-p33,d4-p34
a-P10,b-P11,c-P12,d-P13,e-P14,f-P15,g-P16,dp-P17
12v to in1 to p37(IN)......P35 is out......P30 is OUT2 */
#include <stc12c20xx.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define FOSC 11059200L
#define T1MS (FOSC/12-1000)
uint a,b,c;
uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void cc(uint addr);
void xcx(uint addr,uchar dat);
uchar dcx(uint addr);
void Q0();
void delay(uint i)
{
uint j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display()
{
P1=table[a%10000/1000];
P31 = 0;
delay(5);
P31 = 1;
P1=table[a%1000/100];
P32 = 0;
delay(5);
P32 = 1;
P1=table[a%100/10];
P33 = 0;
delay(5);
P33 = 1;
P1=table[a%10];
P34 = 0;
delay(5);
P34 = 1;
}
void Timer_Init(void)
{
AUXR &= 0x3F;//00111111
TMOD = 0x11;
TL1 = T1MS;
TH1 = T1MS>>8;
TF1 = 0;
ET1 = 1;
}
void main(void)
{
P1M0 = 0x00;
P1M1 = 0x00;
P3M1 = 0x00;
P3M0 = 0x20; //00100000
a=0;
b=0;
P35=0;
c = dcx(0x2002);
Timer_Init();
while(1)
{
if((P37==1)&&(P30==0))
{
delay(5);
if((P37==1)&&(P30==0))
{
if(c<8){c==8;cc(0x2000);xcx(0x2002,c);}else;
if(c>20){c==8;cc(0x2000);xcx(0x2002,c);}else;
cc(0x2000);xcx(0x2002,c);
EA=1;
TR1=1;
}else;
}else;
}
}
void cc(uint addr)
{
// 0x83(??<5M) 0x82(??<10M) 0x81(??<20M) 0x80(??<40M)
ISP_CONTR = 0x81;
ISP_CMD = 0x03;
ISP_ADDRL = addr;
ISP_ADDRH = addr>>8;
EA =0;
ISP_TRIG = 0x46;
ISP_TRIG = 0xB9;
_nop_();
Q0();
}
void xcx(uint addr,uchar dat)
{
ISP_CONTR = 0x81;
ISP_CMD = 0x02;
ISP_ADDRL = addr;
ISP_ADDRH = addr>>8;
ISP_DATA = dat;
EA = 0;
ISP_TRIG = 0x46;
ISP_TRIG = 0xB9;
_nop_();
Q0();
}
uchar dcx(uint addr)
{
uchar dat;
ISP_CONTR = 0x81;
ISP_CMD = 0x01;
ISP_ADDRL = addr;
ISP_ADDRH = addr>>8;
EA = 0;
ISP_TRIG = 0x46;
ISP_TRIG = 0xB9;
_nop_();
dat = ISP_DATA;
Q0();
return dat;
}
void Q0()
{
ISP_CONTR = 0;
ISP_CMD = 0;
ISP_TRIG = 0;
}
void t1(void) interrupt 3 using 2
{
TL1=T1MS;
TH1=T1MS>>8;
b++;
a=c;
display();
if(b>=1000)
{
b=0;
c++;
if(c>20)c=8;else ;
}
if(P30==1){delay(5);if(P30==1){a=0;TR1=0;}else;}else ;
} |