&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
万年历
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#include#define uchar unsigned char
#define uint unsigned int
uchar code taba[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code tabb[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uint a,b,c,i,j,n=0,nian=2010,yue=1,ri=1,shi=0,fen=0,miao=0;
sbit K1=P3^2;
sbit K2=P3^3;
sbit K3=P3^4;
sbit K4=P3^5;
sbit F=P3^0;
sbit D=P0^7;
void int0()interrupt 1 //T0定时器中断
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
if(i==20) i=0,miao++,P1=~P1; //定时满1秒,秒进1,流水灯明灭
if(miao==60) miao=0,fen++; //秒钟数满59,秒归0,分进1
if(fen==60) fen=0,shi++;//分钟数满59,分归0
}
void delay(uint j) //延时函数j*1ms
{for(a=1;a<=j;a++) //延时j*1ms
for(b=1;b<=121;b++);}
void del_nian() //实现数码管动态显示年
{while(miao<=5&&K1) //显示5秒,--年
{P0=taba[nian/1000],P2=0xf7,delay(3),P0=0xff,P2=0xff; //数码管第1位显示
P0=taba[nian/100%10],P2=0xfb,delay(3),P0=0xff,P2=0xff; //数码管第2位显示
P0=taba[nian%100/10],P2=0xfd,delay(3),P0=0xff,P2=0xff; //数码管第3位显示
P0=taba[nian%10],P2=0Xfe,delay(3),P0=0xff,P2=0xff;} //数码管第4位显示
}
void del_yue_ri() //实现数码管动态显示月,日
{while(miao<=10&&K1) //显示5秒,--月--日
{P0=taba[yue/10],P2=0xf7,delay(3),P0=0xff,P2=0xff; //数码管第1位显示
P0=tabb[yue%10],P2=0xfb,delay(3),P0=0xff,P2=0xff; //数码管第2位显示
P0=taba[ri/10],P2=0xfd,delay(3),P0=0xff,P2=0xff; //数码管第3位显示
P0=taba[ri%10],P2=0Xfe,delay(3),P0=0xff,P2=0xff;} //数码管第4位显示
}
void del_shi_fen()//实现数码管动态显示时,分
{while(miao>10&&miao<=60&&K1)//显示50秒,--分--钟
{P0=taba[shi/10],P2=0xf7,delay(3),P0=0xff,P2=0xff; //数码管第1位显示
P0=tabb[shi%10],P2=0xfb,delay(3),P0=0xff,P2=0xff; //数码管第2位显示
P0=taba[fen/10],P2=0xfd,delay(3),P0=0xff,P2=0xff; //数码管第3位显示
P0=taba[fen%10],P2=0Xfe,delay(3),P0=0xff,P2=0xff;} //数码管第4位显示
}
void del_tiao_nian()
{while(K1)//按下K1返回
{switch(n)
{case 2:{if(K3==0) delay(200),K3=1,nian++; //第2次按K1,按K3加,来调W2
if(K4==0) delay(200),K4=1,nian--;};break;}
P0=taba[nian/1000],P2=0xf7,delay(3),P0=0xff,P2=0xff;
P0=taba[nian/100%10],P2=0xfb,delay(3),P0=0xff,P2=0xff;
P0=taba[nian%100/10],P2=0xfd,delay(3),P0=0xff,P2=0xff;
P0=tabb[nian%10],P2=0Xfe,delay(3),P0=0xff,P2=0xff;} //用带点数组,表示调整的是哪个值---第四个点---调-年
}
void del_tiao_yue_ri()
{ while(K1) //按下K1返回
{switch(n)
{case 3:{if(K3==0) delay(200),K3=1,yue++; //第3次按K1,按K3加,来调W4
if(K4==0) delay(200),K4=1,yue--;
P0=tabb[yue%10],P2=0xfb,delay(3),P0=0xff,P2=0xff;};break; //用带点数组,表示调整的是哪个值---第二个点---调-月
case 4:{if(K3==0) delay(200),K3=1,ri++; //第4次按K1,按K3加,来调W4
if(K4==0) delay(200),K4=1,ri--;
P0=tabb[ri%10],P2=0Xfe,delay(3),P0=0xff,P2=0xff;};break;} //用带点数组,表示调整的是哪个值---第四个点---调-日
P0=taba[yue/10],P2=0xf7,delay(3),P0=0xff,P2=0xff;
P0=taba[yue%10],P2=0xfb,delay(3),P0=0xff,P2=0xff;
P0=taba[ri/10],P2=0xfd,delay(3),P0=0xff,P2=0xff;
P0=taba[ri%10],P2=0Xfe,delay(3),P0=0xff,P2=0xff;}
}
void del_tiao_shi_fen()
{while(K1) //按下K1返回
{switch(n)
{case 5:{if(K3==0) delay(200),K3=1,shi++; //第5次按K1,按K3加,来调W4
if(K4==0) delay(200),K4=1,shi--;
P0=tabb[shi/10],P2=0xf7,delay(3),P0=0xff,P2=0xff; //
P0=tabb[shi%10],P2=0xfb,delay(3),P0=0xff,P2=0xff;};break; //用带点数组,表示调整的是哪个值---前两个点---调-年
case 6:{if(K3==0) delay(200),K3=1,fen++; //第6次按K1,按K3加,来调W4
if(K4==0) delay(200),K4=1,fen--;
P0=tabb[fen/10],P2=0Xfd,delay(3),P0=0xff,P2=0xff; //
P0=tabb[fen%10],P2=0Xfe,delay(3),P0=0xff,P2=0xff;};break;} //用带点数组,表示调整的是哪个值---后两个点---调-年
P0=taba[shi/10],P2=0xf7,delay(3),P0=0xff,P2=0xff;
P0=taba[shi%10],P2=0xfb,delay(3),P0=0xff,P2=0xff;
P0=taba[fen/10],P2=0xfd,delay(3),P0=0xff,P2=0xff;
P0=taba[fen%10],P2=0Xfe,delay(3),P0=0xff,P2=0xff;}
}
void del_tiao() //暂停调整程序
{while(n!=8)//第8次按下,调整循环了一圈,跳回主程序
{if(K1==0)delay(300),K1=1,n++;//通过K1改变n值
while(K1&&n!=8)//按下K2返回主程序
{switch(n)
{case 1:P0=0x00,P1=0xff,P2=0x00;break;//第1次按下,显示管全亮
case 2:del_tiao_nian();break;//第2次按下,进到调--年--状态
case 3:del_tiao_yue_ri();break;//第3次按下,进到调--月--状态
case 4:del_tiao_yue_ri();break;//第4次按下,进到调--日--状态
case 5:del_tiao_shi_fen();break;//第5次按下,进到调--时--状态
case 6:del_tiao_shi_fen();break;//第6次按下,进到调--分--状态
case 7:P0=0x00,P1=0xff,P2=0x00;break;}//第7次按下,显示管全亮
}
}
}
void main() //主函数
{TMOD=0X01; //
TH0=(65536-50000)/256; //
TL0=(65536-50000)%256; 定时初始化
EA=1; //
ET0=1; //
while(1)
{TR0=1; //开启定时器
n=0;
if(yue==1^yue==3^yue==5^yue==7^yue==8^yue==10) 实现1,3,5,7,8,10月,有31天
{if(ri==32) ri=0,yue++;};
if(yue==4^yue==6^yue==9^yue==11) //实现4,6,9,11月,有30天
{if(ri==31) ri=0,yue++;};
if(!nian%4) //实现闰年有28天
{if(yue==2)
{if(ri==29) ri=0,yue++;}};
if(nian%4) //实现平年有29天
{if(yue==2)
{if(ri==30) ri=0,yue++;}};
if(yue==12) //在12月份,满31天,年加1,月-日归0
{if(ri==32) ri=0,nian++;};
if(shi==24) shi=0,ri++; //实现满24小时,时归0,日加1
del_nian();//调用-年----显示
if(!K1) del_tiao(); //有按键按下,进入调整程序
del_yue_ri();//调用-月-日-显示
if(!K1) del_tiao(); //有按键按下,进入调整程序
del_shi_fen();//调用-时-分-显示
if(!K1) del_tiao(); //有按键按下,进入调整程序
}
}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
抢答器
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#include//头文件
#define uchar unsigned char //宏定义
#define uint unsigned int //宏定义
uchar code table[5]={0xC0,0xF9,0xA4,0xB0,0x99};
// 0 ,1 , 2 , 3, 4 ;
uchar code tab[5]={0xF7, 0xFB, 0xFD, 0xFE, 0xFF};
//数码管 : 一亮,二亮 ,三亮,四亮,全灭
uint i,j=0,z=5,x=5,c=5,v=5,a,b;
sbit K4=P3^5;sbit L4=P1^0;
sbit K3=P3^4;sbit L3=P1^1;
sbit K2=P3^3;sbit L2=P1^2;
sbit K1=P3^2;sbit L1=P1^3;
sbit M=P3^0;
void delay(uint i) //延时子函数---延时:i*1ms
{for(a=0;a0;i--) //倒计时3,2,1
{P3=0xFF,P2=0xF0;
for(j=0;j<=30000;j++) //循环扫描按键
{P0=table[i];
if(K1==0) { while(1) //数码管二,三闪烁锁定提前抢答者1,蜂鸣器报警
{P2=0xF9,P0=table[1],M=0,delay(100),P2=0xFF,M=1,delay(100);}}
if(K2==0) { while(1) //数码管二,三闪烁锁定提前抢答者2,蜂鸣器报警
{P2=0xF9,P0=table[2],M=0,delay(100),P2=0xFF,M=1,delay(100);;}}
if(K3==0) { while(1) //数码管二,三闪烁锁定提前抢答者3,蜂鸣器报警
{P2=0xF9,P0=table[3],M=0,delay(100),P2=0xFF,M=1,delay(100);;}}
if(K4==0) { while(1) //数码管二,三闪烁锁定提前抢答者4,蜂鸣器报警
{P2=0xF9,P0=table[4],M=0,delay(100),P2=0xFF,M=1,delay(100);;}}}
}
;}
void main()
{ del();
if(i==0) M=0,delay(50),M=1; //蜂鸣器响后开始抢答
P3=0xFF,j=0;
while(1) //实现四人强答,动态显示
{ if(K1==0)
{M=0,L1=0; //蜂鸣器响对应第一流水灯亮
if(z==5) z=j++;}
P2=tab[z],P0=table[1],delay(4),M=1,P0=0xFF,P2=0xFF;
if(K2==0)
{M=0,L2=0; //蜂鸣器响对应第二流水灯亮
if(x==5) x=j++;}
P2=tab[x],P0=table[2],delay(4),M=1,P0=0xFF,P2=0xFF;
if(K3==0)
{M=0,L3=0; //蜂鸣器响对应第三流水灯亮
if(c==5) c=j++;}
P2=tab[c],P0=table[3],delay(4),M=1,P0=0xFF,P2=0xFF;
if(K4==0)
{M=0,L4=0; //蜂鸣器响对应第四流水灯亮
if(v==5) v=j++;}
P2=tab[v],P0=table[4],delay(4),M=1,P0=0xFF,P2=0xFF;
}
}