| 你这样P0完全不能读到i的值 |
| 因为你的循环里面没有写延时呀,你直接跳过去了括号里面应该定义 |
|
#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit wea=P2^2; sbit web=P2^3; sbit wec=P2^4; uchar i; uchar code duanma[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delay(uint z); void delay(uint z) { while(z--); } void main() { while(1) { P0=0xff; wea=0; web=0; wec=0; for(i=0;i<=15;i++) { P0=duanma[i]; delay(40000); } } } 这是我修正过的,现在可以正常一位数码管,0~F循环显示,时间delay,里面的可以写数值,谢谢大家指点! |
hantu 发表于 2019-5-3 18:08 是普中的,普中的视频我看不懂,因为我学历不高,以前学习又不太好,他们讲的我看不懂!我在网上看的电路都是不一样的! |
| 谢谢个各位老师,我找到问题了,第一个是你们说的FOR循环有问题,第二个是delay,这个写错了,才报错,等会晚一点把我写的,再发出来看看, |
| for循环那里有问题,思路是对的 |
51go 发表于 2019-5-3 13:50 测试了一下,还是delay(50000)这个时长比较合适 |
| LE应该为高电平 |
| 看看人家正确的案例吧! |
| 楼主这个应该是普中的单片机吧 |
江西奉新 发表于 2019-5-3 13:07 按你的意思这样写就可以了,但必须把跳线帽J21插在LE与VCC上,如果插在P10与LE上就可能须加一句P10=1;
|
| 延时不是空,明明定义delay(int Z),调用的时候你直接delay(); |
| 低电平还是高电平? |
| 还有你主循环根本就没用到延时,delay括号里面是空的,就算在显示也看不出来啊, |
| P0=duanma[i];这一段代码写在for语句里试试 |
| while(1)后面改为for(i=0;i<=15;i++) { P0=duanma[i]; delay(1000); } |
| P0=duanma[i]应该放在for(i=0;i<15;i++)循环语句里面,另外要保持足够长的延时 |
|
静态显示.C(114): warning C206: 'delay': missing function-prototype 静态显示.C(114): error C267: 'delay': requires ANSI-style prototype Target not created 提示这个错误, |
堂堂 发表于 2019-5-3 12:44 在delay里加数会报错,这也是问题之一 |
ping264888 发表于 2019-5-3 08:33 我在while里面的delay括号中加数值会报错。 |
|
for循环有毛病 for(i=o;i<=15;i++); 每次执行后i的值不会变。 应该把P0=duanma[i];delay(); 放在for循环里面 并且添加合适的延时时间。 |
wulin 发表于 2019-5-3 08:31 老师,我的意思是让一位数码管显示0~F,但是我写的,就是显示0运行不了,我不知道错在哪,刚学。 |
|
我也觉得delay太少了,改为50000比较合适,for循环也有毛病 主循环可改为 for(i=o;i<=15;i++) { P0=duanma[i]; delay(50000); } |
| 1) 把对应的电路图也贴上来方便吧友帮你分析. 2) 我觉得可能你的Delay时间太少了. |
|
本帖最后由 wulin 于 2019-5-3 10:54 编辑 楼主的本意是想写3位数码管动态显示0~F,实际没有动起来。要想动起来位码需要随时间变化,显示的数字也要随时间变化。给你改成了不同数字的动态显示,你试试。
|