| 在各位朋友的热情帮助下,这个问题终于懂了,衷心地感谢帮助过我的朋友们,祝你们快乐、健康! |
| 谢谢27楼,我再检查一遍。 |
|
24楼的程式:我用 KEIL 下的DEBUG 測試.看來是正常的..並無只有LED1一个灯一闪一闪的,其余的灯都不亮。的情況.... 檢查程式中使用的 IO口與實驗板的IO口是否相符。LED接線有皆對嗎 |
| 回复24楼,您好。您修改后的程序我已试过了,只有LED1一个灯一闪一闪的,其余的灯都不亮。请您在方便的时候再看一下,谢谢您了! |
|
#include <reg52.h> sbit Led1 = P1^7; sbit Led2 = P1^6; sbit Led3 = P1^5; sbit Led11 = P2^6; sbit Led12 = P2^7; sbit Led13 = P2^5; char Led1Tab[]={1,1,0,0,0,0,0,0,0,0}; char Led2Tab[]={0,0,0,1,0,0,0,0,0,0}; char Led3Tab[]={0,0,0,0,0,1,1,1,1,0}; char Led11Tab[]={1,0,0,0,0,0,0,0,0,0}; char Led12Tab[]={0,0,0,1,1,0,0,0,0,0}; char Led13Tab[]={0,0,0,0,0,0,1,1,0,0}; void delay1ms(int del) { int i,j; for(j=0;j<del;j++) for(i=0;i<120;i++); } main() { char i; while(1) { if(Led1Tab[i]) { Led1=0; } else { Led1=1; } if(Led2Tab[i]) { Led2=0; } else { Led2=1; } if(Led3Tab[i]) { Led3=0; } else { Led3=1; } if(Led11Tab[i]) { Led11=0; } else { Led11=1; } if(Led12Tab[i]) { Led12=0; } else { Led12=1; } if(Led13Tab[i]) { Led13=0; } else { Led13=1; } i++; if(i>9) i=0; delay1ms(500); } } 你試看看 ,(之前 if(i<9).i=0,是錯誤 ) |
|
10楼的程序: #include <reg52.h> sbit Led1 = P1^0; sbit Led2 = P1^1; sbit Led3 = P1^2; sbit Led11 = P2^0; sbit Led12 = P2^1; sbit Led13 = P2^2; char Led1Tab[]={1,1,0,1,0,1,1,1,1,0}; char Led11Tab[]={1,0,0,1,1,0,1,1,0,0}; delay1ms(int del) {char i; int j; for(j=0;j<del;j++) for(i=0;i<110;i++); } main() { char i; while(1) { if(Led1Tab[i]) { Led1=1; } else { Led1=0; } if(Led11Tab[i]) { Led11=1; } else { Led11=0; } i++; if (i<9) i=0; delay1ms(500); //延時500 Ms } } //以led1 表示P1 led11 表示P2 |
|
void main(void) { while (1) { LED1=0;LED11=0; // 注意:1个循环用时5秒!!!!1 Delay(500); //这里LED1=0 ,应是 Delay(1000); LED11=1; Delay(500); //这里 LED11=1,应是Delay(1000); LED1=1; Delay(500); LED2=0;LED12=0; Delay(500); //这里LED12=0,应是 Delay(1000); LED2=1; Delay(500); LED3=0;LED12=1; Delay(500); //这里LED3=0,应是Delay(2000) LED13=0; Delay(1000); LED13=1; Delay(500); //这里LED13=1,应是Delay(1000) LED3=1; Delay(500); } } |
| void main(void) { while (1) { LED1=0;LED11=0; // 注意:1个循环用时5秒!!!!1 Delay(500); //这里LED1=0 ,应是 Delay(1000); LED11=1; Delay(500); //这里 LED11=1,应是Delay(1000); LED1=1; Delay(500); LED2=0;LED12=0; Delay(500); //这里LED12=0,应是 Delay(1000); LED2=1; Delay(500); LED3=0;LED12=1; Delay(500); //这里LED3=0,应是Delay(2000) LED13=0; Delay(1000); LED13=1; Delay(500); //这里LED13=1,应是Delay(1000) LED3=1; Delay(500); } } |
| 用延时控制或者用定时器控制 |
本帖最后由 刘海龙 于 2016-10-24 23:23 编辑 tmxk0574 发表于 2016-10-24 19:57 1ms延时程序中的600是在STC增强型51单片机上使用的(速度比传统51单片机快5-10倍),传统的51单片机(比如AT89S52、STC89C52)需要把600改为125左右。 |
| 延时函数中把600改为110后,程序和实际就差不多了 |
| 怎么没有我传上的视频,视频不能上传吗 |
|
十分感谢刘先生,使我学到了新的知识! 十楼朋友们的程序我也去试试,学习学习,也非常感谢十楼朋友对我的的帮助! |
|
把上面的主函数高电平点亮改成低电平点亮,现在看来动作对头了! 另外,我弄不明白,小灯实际亮灭的时间跟程序里的延时时间相差太多了!是什么原因? |
| 我是低电平灯亮,我按照你上面给的主函数,再去试一下,谢谢您啊 |
| #include <reg52.h> sbit Led1 = P1^0; sbit Led2 = P1^1; sbit Led3 = P1^2; sbit Led11 = P2^0; sbit Led12 = P2^1; sbit Led13 = P2^2; char Led1Tab[]={1,1,0,1,0,1,1,1,1,0}; char Led11Tab[]={1,0,0,1,1,0,1,1,0,0}; delay1ms(int del) {char i; int j; for(j=0;j<del;j++) for(i=0;i<110;i++); } main() { char i; while(1) { if(Led1Tab[i]) { Led1=1; } else { Led1=0; } if(Led11Tab[i]) { Led11=1; } else { Led11=0; } i++; if (i<9) i=0; delay1ms(500); //延時500 Ms } } //以led1 表示P1 led11 表示P2 |
| 不知道你电路是怎么连接的,我写的是高电平灯亮,你也可以改成低电平灯亮 |
|
void main() { while(1) { LED1 = 1; //灯亮 LED11 =1; Delay(500);//延时500ms LED11 =0; //灯灭 Delay(500); //延时500ms LED1 = 0; //灯灭 Delay(500); //延时500ms LED2 = 1; //灯亮 LED12 = 1; //灯亮 Delay(500); //延时500ms LED2 = 0; //灯灭 Delay(500); //延时500ms LED12 = 0; //灯灭 LED3 = 1; //灯亮 Delay(500); //延时500ms LED13 = 1; //灯亮 Delay(1000); //延时1000ms LED13 = 0; //灯灭 Delay(500); //延时500ms LED3 = 0; //灯灭 } } |
tmxk0574 发表于 2016-10-22 11:23 你理解错了,只给你解释一小段,你可以实际把我写的烧进去用LED灯实验,不要凭想象。 LED1=0;LED11=0; // LED1从此处开始亮 Delay(500); //这里LED1=0 ,应是 Delay(1000); 延时500ms LED11=1; Delay(500); //这里 LED11=1,应是Delay(1000);这里又延时了500ms LED1=1; //这里才把LED1关闭,所以LED1在第一段时连续亮了500+500=1000ms |
| 回楼上,主要是P1、P2同时运行的程序我不知道怎么写, |
|
刘先生,[测试2]程序中延时时间不对呀!按照“小灯亮灭时序图”要求,一个循环 用时为5秒。(P1、P2各是5秒,因P1、P2同时运行的,所以一个循环只用5秒),下 面延时时间不对的语句后面,我作了说明。望您好再帮助改一下,谢谢!(我自己 不会改) void main(void) { while (1) { LED1=0;LED11=0; //注意了---1个循环用时5秒!!!! Delay(500); //LED1=0应是Delay(1000) LED11=1; Delay(500); // LED11=1应是Delay(1000) LED1=1; Delay(500); LED2=0;LED12=0; Delay(500); //LED12=0应是 Delay(1000) LED2=1; Delay(500); LED3=0;LED12=1; Delay(500); //LED3=0应是Delay(2000) LED13=0; Delay(1000); LED13=1; Delay(500); //LED13=1应是 Delay(1000) LED3=1; Delay(500); } } |
| 编个延时500ms,然后需要输出脉冲,调用若干就行。例如2*500=1000ms、4*500=2000ms. |
|
本帖最后由 tmxk0574 于 2016-10-22 15:24 编辑 [测试2]程序中延时时间不对呀,按照“小灯亮灭时序图”要求,一个循环用时为5秒。(P1、P2各是5秒,因P1、P2同时运行的,所以一个循环只用5秒),下面延时时间不对的语句后面,我作了说明。望您好再帮助改一下,谢谢!(我自己不会改) void main(void) { while (1) { LED1=0;LED11=0; // 注意:1个循环用时5秒!!!!1 Delay(500); //这里LED1=0 ,应是 Delay(1000); LED11=1; Delay(500); //这里 LED11=1,应是Delay(1000); LED1=1; Delay(500); LED2=0;LED12=0; Delay(500); //这里LED12=0,应是 Delay(1000); LED2=1; Delay(500); LED3=0;LED12=1; Delay(500); //这里LED3=0,应是Delay(2000) LED13=0; Delay(1000); LED13=1; Delay(500); //这里LED13=1,应是Delay(1000) LED3=1; Delay(500); } } |