帅到火车倒车 帅到火车倒车
关注数: 21 粉丝数: 42 发帖数: 231 关注贴吧数: 46
【提问】想知道怎么同时进行两个循环,求大神指出错误之处。 是单片机的显示问题,我是想LED跟数码管同时运行,可是编出来的只能运行一个,不知怎么做到同时运行两个死循环。 #include<reg52.h> sbit KeyIn4 = P2^7; sbit KeyOut1 = P2^3; sbit KeyOut3 = P2^1; sbit ENLED = P1^4; sbit ADDR3 = P1^3; sbit ADDR2 = P1^2; sbit ADDR1 = P1^1; sbit ADDR0 = P1^0; sbit EN = P1^5; unsigned char code Ledcode[1]={0x90}; unsigned char code yi [] ={0xEF,0xE7,0xE3,0xE7,0xE7,0xE7,0xE7,0xC3}; unsigned char code er [] ={0xC3,0x99,0xBD,0x9F,0xCF,0xF7,0xF3,0x81}; unsigned char code san [] ={0xC3,0x99,0x9F,0xCF,0x9F,0xBD,0x99,0xC3}; unsigned char val = 1; void delay(unsigned int a) { while (a++); } main() { unsigned int val=1,n=5; unsigned int i,j,k; ADDR0 = 0; ADDR1 = 0; ADDR2 = 0; ADDR3 = 1; ENLED = 0; P0=Ledcode[0]; while (1) { n++; if (n>300) { n = 5; if (val >=1) val = 1; else val++; P0 = Ledcode[val]; } switch (n%6) { case 5: ADDR0 = 0; ADDR1 = 0; ADDR2 = 0; break; case 4: ADDR0 = 1; ADDR1 = 0; ADDR2 = 0; break; case 3: ADDR0 = 0; ADDR1 = 1; ADDR2 = 0; break; case 2: ADDR0 = 1; ADDR1 = 1; ADDR2 = 0; break; case 1: ADDR0 = 0; ADDR1 = 0; ADDR2 = 1; break; case 0: ADDR0 = 1; ADDR1 = 0; ADDR2 = 1; break; } delay(50000); } P0 = 0xFF; P1 &= 0xF8; ADDR3 = 0; ENLED = 0; while (1) { for (k=0;k<50;k++) { P1 &= 0xF8; for (i=0;i<8;i++) { P0 = 0; for (j=0;j<300;j++); if ((P1 & 0x07) !=0x07) P1++; } } for (k=0;k<50;k++) { P1 %=0xF8; for (i=0;i<8;i++) { P0 = san[i]; for (j=0;j<300;j++); if ((P1 & 0x07) !=0x07) P1++; } } for (k=0;k<50;k++) { P1 &= 0xF8; for (i=0;i<8;i++) { P0 = yi[i]; for (j=0;j<300;j++); if ((P1 & 0x07) !=0x07) P1++; } } } }
1 下一页