//CD4094 20120302 8路基准电压源使用测试
//程序...
#include<REG51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit k6=P1^7;
sbit k5=P1^6;
sbit k4=P1^5;
sbit k3=P1^4;
sbit k2=P1^3;
sbit k1=P1^2;
sbit LED_ON=P1^1;
sbit led=P3^7;
sbit A_=P3^3;
sbit B_=P3^4;
sbit C_=P3^5;
sbit DEL=P1^0;
sbit STR = P3^2;//定义CD4094各端口;
sbit DATA = P3^1;
sbit CLK = P3^0;
uchar tt,tt1,K=0;
uchar KEY();
uchar code table[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41};
//code unsigned char C51BOX2[3] _at_ 0x43;
void Out_4094(uchar data1);//CD4094写数据子函数;
void Delay(uint a); //延时子函数;
//主程序开始;
void timer0(void) interrupt 1 using 0
{
TH0 =5000/256;
TL0 =5000%256;
if(K==0)
{tt++;
if(K==0&&tt==7){
{tt=0;LED_ON=~LED_ON;}
}
}
Out_4094(table[K]);
if(K!=0)
LED_ON=0;
tt1++;
if(tt1==7){tt1=0;led=~led;}
}
void main()
{
uchar i,f,g; //无限循环;
TMOD=0x01;
TH0 =5000/256;
TL0 =5000%256;
EA=1;
ET0=1;
TR0=1;
A_=0;
B_=0;
C_=0;
DEL=0;
while(1)
{
/*for(g=0;g<6;g++)
{Delay(30000);
f=table[g];
Out_4094(f); //调用显示子函数;
Delay(30000); //延时;
} */
KEY();
if(K==0){A_=0;B_=0; C_=0; DEL=0 ;}
if(K==1){A_=0;B_=1; C_=1; DEL=0 ;}
if(K==2){A_=1;B_=0; C_=1; DEL=0 ;}
if(K==3){A_=0;B_=0; C_=1; DEL=0 ;}
if(K==4){A_=1;B_=1; C_=0; DEL=0 ;}
if(K==5){A_=0;B_=1; C_=0; DEL=1 ;}
if(K==6){A_=1;B_=0; C_=0; DEL=1 ;}
}
}
void Out_4094(uchar data1) //写CD4094子函数;
{
uchar i; //定义子函数;
STR=0; //保持然来的状态不变;
for(i=0;i<8;i++) //写八位数据进CD4094;
{
if(data1&0x01) //判断并发串行数据;
{
DATA=1; //发高电平;
}
else
{
DATA=0; //发低电平;
}
CLK=0; //形成上升延脉冲;
_nop_();
_nop_(); //延时;
_nop_();
CLK=1;
data1>>=1; //数据移位,送下一位数据;
}
STR=1; //数据送完;更新显示;
}
void Delay(uint a) //延时子函数;
{
uint b;
for(b=0;b<a;b++);
}
uchar KEY()
{
if(k1==0)
{
Delay(10);
if(k1==0)
{
K=1;
while(!k1);
}
} //检测k1;
if(k2==0)
{
Delay(10);
if(k2==0)
{
K=2;
while(!k2);
}
} ///////////////////////
if(k3==0)
{
Delay(10);
if(k3==0)
{
K=3;
while(!k3);
}
}
//////////////////////
if(k4==0)
{
Delay(10);
if(k4==0)
{
K=4;
while(!k4);
}
}
///////////////////////
if(k5==0)
{
Delay(10);
if(k5==0)
{
K=5;
while(!k5);
}
}//////////////////////////
if(k6==0)
{
Delay(10);
if(k6==0)
{
K=6;
while(!k6);
}
} ////////////////////////////
return K;
}