![]() |
發(fā)布時間: 2020-3-4 22:24
正文摘要:用Keil uVision5編寫的C語言代碼如下畫的原件圖在附件里 不懂哪里有問題 #include<regx51.h> #define uchar unsigned char #define uint unsigned int uint code ... |
運行了之后什么樣,亮都不亮嗎 |
/* 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); } 沒太仔細看,你這段有錯誤,每次調用函數(shù)返回結果key始終是0,且P1被賦值0xf3; 每次進入按鍵函數(shù),key被定義為0,P1被賦值0xf3; if選擇函數(shù)表達式結果均為0,即key=0,函數(shù)返回0 |
Powered by 單片機教程網(wǎng)