运行了之后什么样,亮都不亮吗 |
/* Main.c file generated by New Project wizard * * Created: 周四 3月 5 2020 * Processor: AT89C52 * Compiler: Keil for 8051 */ #include <reg51.h> #include <stdio.h> //#include<regx51.h> #define uchar unsigned char #define uint unsigned int uint code unm[]={0,1,3,5,7,9,15,60,100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500}; uchar unm1[]={0xff,0xef,0xc7,0xab,0xef,0xef,0xef,0xff}; sbit buzz=P1^7; //定义单片机I/O口 P1.7的伪名称叫buzz uchar m,n,j,y; uint l,g; void delay(uint i) { uchar j; while(i--) for(j=0;j<120;j++); } void init() { TMOD = 0x11; TH0 = 0x00; TL0 = 0x00; TH1 = 0xaa; TL1 = 0xbb; EA = 1; ET0 = 1; ET1 = 1; TR0 = 1; TR1 = 1; } bit ce_anjian ( ) { bit key=0; P1=0xf3; if(P1!=0xf3) key=1; else key=0; return(key); } void ce_jianzhi ( ) { uchar i,j,p; do { while(ce_anjian()==0); delay(50); }while(ce_anjian()==0); for(i=0;i<2;i++) { P1=(0xfe<<i)|i; for(j=0;j<2;j++) { p=P1&0x0c; if(p==0x08>>j) { y=i*2+j+1; goto D1; } } } D1: delay(50); do { while(ce_anjian()==1); delay(50); }while(ce_anjian()==1); } void mingjiao() { uchar t; for(t=0;t<50;t++) { buzz=0; //P1_7被替换 } buzz=1; //P1_7被替换 } void main() { init(); n=5; while(1) { l=unm[n]; if(ce_anjian()==1) { ce_jianzhi(); switch(y) { case 1: {m=1;j=0x7f;mingjiao();}break; case 2: {m=2;j=0xfe;mingjiao();}break; case 3: {n=n+1;if(n==24)n=23;mingjiao();}break; case 4: {n=n-1;if(n==0)n=1;mingjiao();}break; default: break; } } } } void t_1()interrupt 3 { uchar a,k; TH1 = 0xaa; TL1 = 0xbb; switch(m) { case 1: { a=0x01; for(k=0;k<8;k++) { P2=a; P3=unm1[k]; delay(2); a=a<<1; if(a==0)a=0x01; P0=j; } }break; case 2: { a=0x80; for(k=0;k<8;k++) { P2=a; P3=unm1[k]; delay(2); a=a>>1; if(a==0)a=0x80; P0=j; } } } } void t_0()interrupt 1 { uchar b1,b2,b3,b4,b5,b6,b7,b8; if(++g<l) return; g=0; switch(m) { case 1:{ j=(j>>1)|0x80; if(j==0xff)j=0x7f;}break; case 2:{ j=(j<<1)|0x01; if(j==0xff)j=0xfe;}break; } b1=unm1[0]; b2=unm1[1]; b3=unm1[2]; b4=unm1[3]; b5=unm1[4]; b6=unm1[5]; b7=unm1[6]; b8=unm1[7]; unm1[0]=b2; unm1[1]=b3; unm1[2]=b4; unm1[3]=b5; unm1[4]=b6; unm1[5]=b7; unm1[6]=b8; unm1[7]=b1; } |
p1_7替换为BUZZ 可以运行 ![]() ![]() |
bit ce_anjian ( ) { bit key=0; P1=0xf3; if(P1!=0xf3) key=1; else key=0; return(key); } 没太仔细看,你这段有错误,每次调用函数返回结果key始终是0,且P1被赋值0xf3; 每次进入按键函数,key被定义为0,P1被赋值0xf3; if选择函数表达式结果均为0,即key=0,函数返回0 |