📄 chengxu.c
字号:
#include<reg52.h>
unsigned char xx[8]={0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06},yy[8]={0},kk[8]={0};
unsigned char n=0,n0=0,n1=0,k1=8,k2=0,mm=0,mmm=0,zhj;sbit xy1=P3^7;
void delay(int x)//延时
{int y;for(y=0;y<30000;y++)for(;x>0;x--){;}}
void display( unsigned char x){P0=x;}//数码管显示
void AB()//确定巡环显示值
{ unsigned char x,i;char j,jj,zhj1;
x=P2;for(i=0;i<8;i++){if(yy[i]==0&&x%2==0){k2=1;k1=i;}if(x%2==0)kk[i]=1;yy[i]=!(x%2);x=x>>1;}
for(j=7,zhj=0;j>=0;j--)if(kk[j]==0){for(jj=0,zhj1=1;jj<j;jj++)zhj1=zhj1<<1;zhj=zhj+zhj1;}}
void A0()interrupt 0 using 2//实验键P3.2
{EA=0;n0++;n1=0;k2=0;delay(50);EA=1;}
void A1()interrupt 2 using 1//确认键P3.3
{int i;EA=0;n1++;n0=0;k2=0;delay(50);for(i=0;i<8;i++)kk[i]=yy[i];EA=1;}
void AA()//确定快闪二极管
{ unsigned char m=0;for(mm=0;m<8;m++)if(m==7-k1)mm=1;else mm=mm<<1;mmm=~mm;}
void main()//主函数
{ int i; EA=1;EX0=1;EX1=1;IT0=1;IT1=1;P2=0xff;xy1=0;
while(1)
{if(n0>=1){P0=0x79;xy1=1;k2=n1=0;P1=0xff;delay(2000);P1=0x00;delay(2000);AB();if(k2==1)n0=0;}
if(n1>=1){xy1=k2=n0=0;AB();P1=zhj;for(i=7;i>=0;i--)if(kk[i]==1){display(xx[i]);delay(8000);AB();
if(k2==1){n1=0;i=0;}}for(i=0;i<8;i++)if(yy[i]==1||kk[i]==1)break;if(k1==8||i==8)display(0);}
if(k2==1){AB();for(i=7;i>=0;i--)if(kk[i]==1){xy1=~xy1;display(xx[i]); P1=zhj;delay(500);AA();
P1=P1|mm;delay(500);P1=P1&mmm;delay(500);xy1=~xy1;AB();if(n1>0||n0>0){k2=i=0;}
P1=0xff; delay(500);AA();P1=P1&mmm;delay(500);P1=0xff;delay(500);}}
}}
//P0口作为数码管显示(共阴极);P2口用作开关量的输入(低电平有效);
//P1口作为二极管指示(共阳极);;音响P3.7(xy1--P3.7高电平响); E=0x79;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -