for(j=0;j<62;j++);}
main()
{
while
(1)
{
if(K1==0)
{
delay(40);
if(K1==0)
{while(K1==0);
count++;P1=0xFF;}
}
elseif(K2==0)
{
delay(40);
if(K2==0)
{while(K2==0);
count++;P1=0xFF;}
}
elseif(K3==0)
{
delay(40);
if(K3==0)
{while(K3==0);
count++;P1=0xFF;}
}
elseif(K4==0)
{
delay(40);
if(K4==0)
{while(K4==0);
count++;P1=0xFF;}
}
elseif(K5==0)
{
delay(40);
if(K5==0)
{while(K5==0);
count++;P1=0xFF;}
}
if(count>=3)
{led=~led;
delay(200);}
if(RST==0)
{delay(40);
if(RST==0)
{count=0;
P1=0xFF;}}
}
}
4.A/D转换法一
#include#include#defineCS273XBYTE[0xCFA0]
#defineIN7XBYTE[0xCFAF]voidDelay(intU);voidDisplay();
unsignedcharcodetable[17]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,
0x71,0x00};
unsignedBUF[2]={0,0};unsignedchark,sn;voidmain()
{unsignedchari;
IE=0x81;IT0=1;
while
(1)
{IN7=i;
sn=1;
while(sn);
Display();
}
}
voidINT_0(void)interrupt0
{k=IN7;sn=0;}
voidDisplay()
{unsignedchari,j;
BUF[0]=k/16;
BUF[1]=k%16;
while(j--)
{CS273=table[BUF[0]];
P1=0xFE;
Delay
(2);
CS273=table[BUF[1]];
P1=0xFD;
Delay
(2);
}
}
voidDelay(intU)
{
unsignedchari;
while(U--)
{
for(i=0;i<62;i++)
{;}
}
}
A/D法二
/*
************************************************
*文件名:
sy8.c
*版本:
V1.0_C
*功能:
AD0809通道0采集数据,并有四个数码管显示*注意:
实验时,拔掉LED_JUMP跳帽
*创建:
吴文波
************************************************
*/
#include
#include
#defineAD0809_0XBYTE[0xCFA0]#defineCS273XBYTE[0xCFA8]/*分别控制4位数码管的位码*/
sbitP10=P1^0;
sbitP11=P1^1;
sbitP12=P1^2;
sbitP13=P1^3;
/*共阴极数码管显示数据:
0-9A-F黑屏*/
table[17]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
unsignedchardispbuf[4];
unsignedcharsn;
unsignedintidataBUF[8];
/*
************************************************
*函数名:
INIT0_FUNC
*功能:
外部中断0服务函数,实现AD0809通道0数据采集*输入:
无
*返回:
AD0809通道0数据
************************************************
*/
voidINIT0_FUNC(void)interrupt0{
BUF[0]=AD0809_0;
sn=0;
}
/*
************************************************
*函数名:
Delay
*功能:
Delay实现延时约1ms*temp(晶振6M)
*for循环执行一次需:
(12*(1/6M))*8s*输入:
延时时间temp
*返回:
无
************************************************
*/
voidDelay(unsignedchartemp){
unsignedintj;
while(temp--)
{
for(j=0;j<62;j++){;}
}
}
/*
************************************************
*函数名:
Display
*功能:
进行AD0809通道0数据的显示
*输入:
k--AD0809通道0、BUF[k]--AD0809通道0数据
*返回:
无
************************************************
*/
voidDisplay(unsignedchark){
unsignedintt,j=10;
while(j--)
{
t=(double)BUF[k]/255*500;//?
?
?
dispbuf[0]=t%10;
dispbuf[1]=t/10%10;
dispbuf[2]=t/100%10;
dispbuf[3]=t/1000;
P10=0;/*第1位数码管位选通*/
P11=1;
P12=1;
P13=1;
CS273=table[dispbuf[0]];/*第1位数码管段码*/
Delay
(2);
P10=1;
P11=0;/*第2位数码管位选通*/
P12=1;
P13=1;
CS273=table[dispbuf[1]];/*第2位数码管段码*/
Delay
(2);
P10=1;
P11=1;
P12=0;/*第3位数码管位选通*/
P13=1;
CS273=table[dispbuf[2]]|0x80;/*第3位数码管段码*/
Delay
(2);
P10=1;
P11=1;
P12=1;
P13=0;/*第4位数码管位选通*/
CS273=table[dispbuf[3]];/*第4位数码管段码*/
Delay
(2);
}
}
/*
************************************************
*函数名:
INIT0Init
*功能:
外部中断0初始化
*输入:
无
*返回:
无
************************************************
*/
voidINIT0Init()
{
IT0=1;
EX0=1;
EA=1;
}
/*
************************************************
*函数名:
main主函数
*功能:
实现AD0809采集通道0数据并由4位数码管显示其值
*说明:
无
************************************************
*/
voidmain(void)
{
INIT0Init();/*外部中断0初始化*/
while
(1)
{
AD0809_0=0;/*启动通道0采集*/
sn=1;
while(sn);
Display(0);/*AD0809通道0数据显示*/
}
}
5.抢答器(加数码管和LED灯)
#include#include#definecs273XBYTE[0xCFA0]
sbitRST=P1^7;
sbitK1=P1^0;
sbitK2=P1^1;
sbitK3=P1^2;
sbitP1_6=P1^6;
sbitled1=P1^3;
sbitled2=P1^4;
sbitled3=P1^5;
unsignedcharcodetable[4]={0x06,0x5b,0x4f,0x3f};
voiddelay(unsignedk){
unsignedinti,j;
for(i=0;ifor(j=0;j<62;j++);}
main()
{
while
(1)
{
start:
P1_6=0;
if(K1==0)
{
delay(30);
if(K1==0)
{cs273=table[0];led1=0;led2=1;led3=1;while
(1)if(RST==0){led1=1;led2=1;led3=1;cs273=table[3
];gotostart;}}
}
elseif(K2==0)
{
delay(30);
if(K2==0)
{cs273=table[1];led1=1;led2=0;led3=1;while
(1)if(RST==0){led1=1;led2=1;led3=1;cs273=table[3
];gotostart;}}
}
elseif(K3==0)
{
delay(30);
if(K3==0)
{cs273=table[2];led1=1;led2=1;led3=0;while
(1)if(RST==0){led1=1;led2=1;led3=1;cs273=table[3
];gotostart;}}
}
}
}
6.跑马表
#include
#include
#defineCS273XBYTE[0xcfa0]sbitSP1=P1^7;
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsignedcharcount,keycnt,second;
voiddelay(unsignedchari){unsignedj;
for(i;i>0;i--)
for(j=62;j>0;j--);
}
voidTimer0_INTI()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=0;
ET0=1;
EA=1;
}
voidTimer0()interrupt1using0
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
count++;
if(count==100)
second++;
if(second==60)
second=0;
}
voidmain(void)
{
Timer0_INTI();
while
(1)
{
CS273=table[second/10];P1=0xFB;delay
(1);
CS273=table[second%10];P1=0xFD;delay
(1);
if(SP1==0)
{
delay(5);
if(SP1==0)
{while(SP1==0);
keycnt++;
switch(keycnt)
{case1:
TR0=1;
break;
case2:
TR0=0;
break;
case3:
keycnt=0;
second=0;
break;
}
}
}
}
}