c语言程序流水灯四亮四灭,c语言四位数码管万年历程序.doc

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

万年历

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

#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;

}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值