main`
#include "sys.h"
u8 KeySta[]={1,1,1,1};
u8 KeyBack[]={1,1,1,1};
//u8 Mode_Led=0;
u8 Mode_Option=0;
sbit S4= P3^3;
sbit S5= P3^2;
sbit S6= P3^1;
sbit S7= P3^0;
void Key_Scan()
{
u8 i;
static u8 Keybuff[]={0xff,0xff,0xff,0xff};
Keybuff[0] =(Keybuff[0]<<1)|S7;
Keybuff[1] =(Keybuff[1]<<1)|S6;
Keybuff[2] =(Keybuff[2]<<1)|S5;
Keybuff[3] =(Keybuff[3]<<1)|S4;
for(i=0;i<4;i++)
{
if(Keybuff[i]==0x00)
KeySta[i]=0;
if(Keybuff[i]==0xff)
KeySta[i]=1;
}
// for(i=0;i<4;i++)
// {
// if(KeySta[i]==0)
// return i;
// }
}
void KeyPress()
{
u8 i;
for(i=0;i<4;i++)
{
if(KeySta[i]!=KeyBack[i])
{
if(KeyBack[i]!=1)
{
KeyDrive(i);
}
KeyBack[i]=KeySta[i];
}
}
if(Mode_Option==0)
{
if(KeySta[3]==0)
display_pwm=1;
else
display_pwm=0;
}
}
void KeyDrive(u8 key)
{
if(key==0)
{
if(TR1==0)
{
TR1=1;
}
else
{
TR1=0;
}
}
else if(key==1)
{
Mode_Option++;
if(Mode_Option>=3)
Mode_Option=0;
}
else if(key==2)
{
if(Mode_Option==1)
{
Mode_Led++;
if(Mode_Led>=4)
Mode_Led=4;
}
else if(Mode_Option==2)
{
time_led[Mode_Led]++;
if(time_led[Mode_Led]>=12)
time_led[Mode_Led]=12;
}
}
else if(key == 3)
{
if(Mode_Option == 1)
{
Mode_Led --;
if(Mode_Led <= 1)
Mode_Led = 1;
}
else if(Mode_Option == 2)
{
time_led[Mode_Led] --;
if(time_led[Mode_Led] <= 4)
time_led[Mode_Led] = 4;
}
}
}
//void Mode()
//{
// if(Mode_Led==1)
// {
// P2=(P2&0x1f)|0x80;
// // P0=_cror_(0x01,1);
// P0=0xaa;
// }
// if(Mode_Led==2)
// {
// P2=(P2&0x1f)|0x80;
// // P0=_cror_(0x01,1);
// P0=0xff;
// }
//}
sys.c
#include "sys.h"
void ALL_Init()
{
P2=(P2&0x1f)|0x80;
P0=0xff;
P2=(P2&0x1f)|0xa0;
P0=0x00;
P2=(P2&0x1f)|0xc0;
P0=0x00;
P2=P2&0x1f;
}
void Timer0_Init()
{
TMOD|=0x01;
TF0=0;
TR0=1;
ET0=1;
}
void Timer0() interrupt 1
{
static u16 T0c1=0,T0c2=0;
static u8 index=0,e2_addr=0x00;
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
T0c2++;
if(Mode_Option>0)
{
T0c1++;
if(T0c1>=400)
{
T0c1=0;
flag_800ms=~flag_800ms;
}
}
if((T0c2%5==0)&&(T0c2<30))
{
switch(index)
{
case 0:Write_E2PROM(0x00,time_led[e2_addr]);break;
case 1:Write_E2PROM(0x01,time_led[e2_addr]);break;
case 2:Write_E2PROM(0x02,time_led[e2_addr]);break;
case 3:Write_E2PROM(0x03,time_led[e2_addr]);break;
case 4:Write_E2PROM(0x04,time_led[e2_addr]);break;
default:break;
}
index ++;
e2_addr++;
if(index>=5)
{
index=0;
e2_addr =0;
}
}
else if(T0c2>=30)
{
T0c2=0;
pwm= Read_AIN(0x03);
}
Key_Scan();
SaoMiao();
smg_show();
}
void Timer1_Init()
{
TMOD=0x10;
TF1=0;
ET1=1;
TR1=1;
}
void Timer1() interrupt 3
{
static mback=0;
static u16 temp;
static u8 index;
u8 light,dat;
static u16 T1c0,T1c1;
TH1=(65535-1000)/256;
TL1=(65535-1000)%256;
T1c0++; T1c1++;
T1c1=T1c1&0x0f;
light=pwm*pwm;
temp=100*time_led[Mode_Led];
if(T1c0>=temp)
{
T1c0=0;
if(Mode_Led==1)
{
if(Mode_Led!=mback)
{
dat=0x7f;
mback=Mode_Led;
}
dat=_crol_(dat,1);
}
if(Mode_Led==2)
{
if(Mode_Led!=mback)
{
dat=0xfe;
mback=Mode_Led;
}
dat=_cror_(dat,1);
}
if(Mode_Led==3)
{
if(Mode_Led!=mback)
{
index=0;
mback=Mode_Led;
}
switch(index)
{
case 0: dat = 0x7e; break; //0111 1110
case 1: dat = 0xbd; break; //1011 1101
case 2: dat = 0xdb; break;
case 3: dat = 0xe7; break;
default : break;
}
index ++;
index &= 0x03;
}
if(Mode_Led==4)
{
if(Mode_Led!=mback)
{
index=0;
mback=Mode_Led;
}
switch(index)
{
case 0: dat = 0xe7; break; //1110 0111
case 1: dat = 0xdb; break; //1011 1101
case 2: dat = 0xbd; break;
case 3: dat = 0x7e; break;
default : break;
}
index ++;
index &= 0x03;
}
}
if(light>T1c1)
{
LED_work(dat);
}
else
{
LED_work(0xff);
}
}
key.c
#include "sys.h"
u8 KeySta[]={1,1,1,1};
u8 KeyBack[]={1,1,1,1};
//u8 Mode_Led=0;
u8 Mode_Option=0;
sbit S4= P3^3;
sbit S5= P3^2;
sbit S6= P3^1;
sbit S7= P3^0;
void Key_Scan()
{
u8 i;
static u8 Keybuff[]={0xff,0xff,0xff,0xff};
Keybuff[0] =(Keybuff[0]<<1)|S7;
Keybuff[1] =(Keybuff[1]<<1)|S6;
Keybuff[2] =(Keybuff[2]<<1)|S5;
Keybuff[3] =(Keybuff[3]<<1)|S4;
for(i=0;i<4;i++)
{
if(Keybuff[i]==0x00)
KeySta[i]=0;
if(Keybuff[i]==0xff)
KeySta[i]=1;
}
// for(i=0;i<4;i++)
// {
// if(KeySta[i]==0)
// return i;
// }
}
void KeyPress()
{
u8 i;
for(i=0;i<4;i++)
{
if(KeySta[i]!=KeyBack[i])
{
if(KeyBack[i]!=1)
{
KeyDrive(i);
}
KeyBack[i]=KeySta[i];
}
}
if(Mode_Option==0)
{
if(KeySta[3]==0)
display_pwm=1;
else
display_pwm=0;
}
}
void KeyDrive(u8 key)
{
if(key==0)
{
if(TR1==0)
{
TR1=1;
}
else
{
TR1=0;
}
}
else if(key==1)
{
Mode_Option++;
if(Mode_Option>=3)
Mode_Option=0;
}
else if(key==2)
{
if(Mode_Option==1)
{
Mode_Led++;
if(Mode_Led>=4)
Mode_Led=4;
}
else if(Mode_Option==2)
{
time_led[Mode_Led]++;
if(time_led[Mode_Led]>=12)
time_led[Mode_Led]=12;
}
}
else if(key == 3)
{
if(Mode_Option == 1)
{
Mode_Led --;
if(Mode_Led <= 1)
Mode_Led = 1;
}
else if(Mode_Option == 2)
{
time_led[Mode_Led] --;
if(time_led[Mode_Led] <= 4)
time_led[Mode_Led] = 4;
}
}
}
//void Mode()
//{
// if(Mode_Led==1)
// {
// P2=(P2&0x1f)|0x80;
// // P0=_cror_(0x01,1);
// P0=0xaa;
// }
// if(Mode_Led==2)
// {
// P2=(P2&0x1f)|0x80;
// // P0=_cror_(0x01,1);
// P0=0xff;
// }
//}
smg.c
#include "sys.h"
u8 Nixie[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,
0xff, 0xbf}; //0-15&off&-
u8 WeiMa[]={0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
u8 Nixiebuff[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
u8 smg1,smg2,smg3,smg4,smg5,smg6,smg7,smg8;
//u8 Mode_Led;
void SaoMiao()
{
static u8 i=0;
P2=(P2&0x1f)|0xc0; // open weima
P0=0x01<<i;
P2=(P2&0x1f)|0xe0;
P0=0xff;
P0=Nixiebuff[i];
i++;
i&=0x07;
}
void smg_show()
{
if(Mode_Option==0)
{
if(display_pwm==0)
smg1=smg2=smg3=smg4=smg5=smg6=smg7=smg8=16;
else
{
smg1=smg2=smg3=smg4=smg5=smg6=16;
smg7=17;
smg8=pwm%10;
}
}
else if(Mode_Option == 1)
{
if(flag_800ms == 1)
{
smg1 = 17;
smg2 = Mode_Led % 10;
smg3 = 17;
smg4 = 16;
smg5 = time_led[Mode_Led] / 10;
smg6 = time_led[Mode_Led] % 10;
smg7 = 0;
smg8 = 0;
}
else
{
smg1 = 16;
smg2 = 16;
smg3 = 16;
smg4 = 16;
smg5 = time_led[Mode_Led] / 10;
smg6 = time_led[Mode_Led] % 10;
smg7 = 0;
smg8 = 0;
}
}
else if(Mode_Option == 2)
{
if(flag_800ms == 1)
{
smg1 = 17;
smg2 = Mode_Led % 10;
smg3 = 17;
smg4 = 16;
smg5 = time_led[Mode_Led] / 10;
smg6 = time_led[Mode_Led] % 10;
smg7 = 0;
smg8 = 0;
}
else
{
smg1 = 17;
smg2 = Mode_Led % 10;
smg3 = 17;
smg4 = 16;
smg5 = 16;
smg6 = 16;
smg7 = 16;
smg8 = 16;
}
}
Nixiebuff[0] = Nixie[smg1];
Nixiebuff[1] = Nixie[smg2];
Nixiebuff[2] = Nixie[smg3];
Nixiebuff[3] = Nixie[smg4];
Nixiebuff[4] = Nixie[smg5];
Nixiebuff[5] = Nixie[smg6];
Nixiebuff[6] = Nixie[smg7];
Nixiebuff[7] = Nixie[smg8];
}
void LED_work(u8 dat)
{
P2=(P2&0x1f)|0x80;
P0=dat;
P2= P2&0x1f;
}
iic
#include "sys.h"
#define DELAY_TIME 5
#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1
//×ÜÏßÒý½Å¶¨Òå
sbit SDA = P2^1; /* Êý¾ÝÏß */
sbit SCL = P2^0; /* ʱÖÓÏß */
void IIC_Delay(unsigned char i)
{
do{_nop_();}
while(i--);
}
//×ÜÏßÆô¶¯Ìõ¼þ
void IIC_Start(void)
{
SDA = 1;
SCL = 1;
IIC_Delay(DELAY_TIME);
SDA = 0;
IIC_Delay(DELAY_TIME);
SCL = 0;
}
//×ÜÏßÍ£Ö¹Ìõ¼þ
void IIC_Stop(void)
{
SDA = 0;
SCL = 1;
IIC_Delay(DELAY_TIME);
SDA = 1;
IIC_Delay(DELAY_TIME);
}
//·¢ËÍÓ¦´ð
void IIC_SendAck(bit ackbit)
{
SCL = 0;
SDA = ackbit; // 0£ºÓ¦´ð£¬1£º·ÇÓ¦´ð
IIC_Delay(DELAY_TIME);
SCL = 1;
IIC_Delay(DELAY_TIME);
SCL = 0;
SDA = 1;
IIC_Delay(DELAY_TIME);
}
//µÈ´ýÓ¦´ð
bit IIC_WaitAck(void)
{
bit ackbit;
SCL = 1;
IIC_Delay(DELAY_TIME);
ackbit = SDA;
SCL = 0;
IIC_Delay(DELAY_TIME);
return ackbit;
}
//ͨ¹ýI2C×ÜÏß·¢ËÍÊý¾Ý
void IIC_SendByte(unsigned char byt)
{
unsigned char i;
for(i=0; i<8; i++)
{
SCL = 0;
IIC_Delay(DELAY_TIME);
if(byt & 0x80) SDA = 1;
else SDA = 0;
IIC_Delay(DELAY_TIME);
SCL = 1;
byt <<= 1;
IIC_Delay(DELAY_TIME);
}
SCL = 0;
}
//´ÓI2C×ÜÏßÉϽÓÊÕÊý¾Ý
unsigned char IIC_RecByte(void)
{
unsigned char i, da;
for(i=0; i<8; i++)
{
SCL = 1;
IIC_Delay(DELAY_TIME);
da <<= 1;
if(SDA) da |= 1;
SCL = 0;
IIC_Delay(DELAY_TIME);
}
return da;
}
unsigned char Read_AIN(unsigned char chn)
{
unsigned char dat,val,ad_pwm;
EA=0;
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(chn);
IIC_WaitAck();
IIC_Stop();
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
dat=IIC_RecByte();
IIC_SendAck(1);
IIC_Stop();
val=(dat*40)/255;
if((val>=30)&&(val<=40))
ad_pwm=4;
else if((val>=20)&&(val<30))
ad_pwm=3;
else if((val>=10)&&(val<20))
ad_pwm=2;
else if((val>=0)&&(val<10))
ad_pwm=1;
EA=1;
return ad_pwm;
}
void Write_E2PROM(unsigned char add,unsigned char dat)
{
EA=0;
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_SendByte(dat);
IIC_WaitAck();
IIC_Stop();
IIC_Delay(5);
EA=1;
}
unsigned char Read_E2PROM(unsigned char add)
{
unsigned char d;
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_Stop();
IIC_Start();
IIC_SendByte(0xa1);
IIC_WaitAck();
d=IIC_RecByte();
IIC_SendAck(1);
IIC_Stop();
return d;
}
iic.h
#ifndef _IIC_H_
#define _IIC_H_
void IIC_Start(void);
void IIC_Stop(void);
bit IIC_WaitAck(void);
void IIC_SendAck(bit ackbit);
void IIC_SendByte(unsigned char byt);
unsigned char IIC_RecByte(void);
unsigned char Read_AIN(unsigned char chn);
void Write_E2PROM(unsigned char add,unsigned char dat);
unsigned char Read_E2PROM(unsigned char add);
#endif