电子1912 发表于 2019-12-20 22:16 如下:给你调好了,P0改成P2了,自己改回来。 #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int uchar dat,num,t; void delayms(uint time) { uint x,y; for(x=0;x<time;x++) for(y=0;y<112;y++); } void main() { TMOD=0x20; TH1=0xfd; TH1=0xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; while(1) { if(num==1) { delayms(500); switch(dat) { case 1:P2=0xfe;break; case 2:P2=0xfd;break; case 3:P2=0xfb;break; case 4:P2=0xf7;break; case 5:P2=0xef;break; case 6:P2=0xdf;break; case 7:P2=0xbf;break; case 8:P2=0x7f;break; case 0:P2=0xff;break; case 9: { delayms(500); P2=0xfe; delayms(500); P2=0xfd; delayms(500); P2=0xfb; delayms(500); P2=0xf7; delayms(500); P2=0xef; delayms(500); P2=0xdf; delayms(500); P2=0xbf; delayms(500); P2=0x7f; delayms(500); P2=0xff; }break; } ES=1; num=0; } } } void ser() interrupt 4 { RI=0; dat=SBUF; ES=0; num=1; } |
图上没看到晶振的频率多少,这个好波特率有关,11.0592,或22.1184Mhz 9600 或 19200波特率发数据 |
baiyun1234 发表于 2019-12-20 13:59 大神,这个程序只可以控制单个LED灯亮,能不能改成花样流水 |
csmyldl 发表于 2019-12-20 14:54 原版:case1:,我改成了:case 1:他的case中间的空格没有,语句写法还需巩固下。 |
baiyun1234 发表于 2019-12-20 13:59 除了P0改为P2,还改了什么?看不出来 |
给你调好了,问题出在case 语句上,我给你的P0改成P2了,你自己改回来。 #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int uchar dat,num; uint a,i; void main() { TMOD=0x20; TH1=0xfd; TH1=0xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; while(1) { if(num==1) { switch(dat) { case 1:P2=0xfe;break; case 2:P2=0xfd;break; case 3:P2=0xfb;break; case 4:P2=0xf7;break; case 5:P2=0xef;break; case 6:P2=0xdf;break; case 7:P2=0xbf;break; case 8:P2=0x7f;break; case 0:P2=0xff;break; } ES=1; num=0; } } } void ser() interrupt 4 { RI=0; dat=SBUF; ES=0; num=1; } |
不懂帮顶一下! |
程序看起来没错,关键是你上位机发送时是以何种代码发送,未打开HEX开关时,发送1,接收则是31,要找开HEX开发,发送01才收到1 |