zl2168 发表于 2018-6-18 11:05 谢谢兄弟,我会认真看的,十分感谢 |
|
本帖最后由 zl2168 于 2018-6-18 11:07 编辑 给你介绍一个正确有效看得懂的案例,自己对照查错吧! 实例93 99.9秒秒表
实例95 99.9秒秒表.rar
(38.86 KB, 下载次数: 9)
先Proteus仿真一下,确认有效。以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,书中电路和程序设计有详细说明,电路与程序真实可靠可信可行,程序语句条条有注解。 |
figo88130 发表于 2018-6-17 20:39 2显示不正常, 0A4, 高电平不显示, 数据有3个"1", 连小数点共3个段不显, 程序看不出问题, 实际只有2个段不显.估计还是硬件部分, 给P0口全加3K3的上拉电阻试下. |
figo88130 发表于 2018-6-17 20:39 Ledbuff[0] = Ledchar[0];//sec%10]; Ledbuff[1] = Ledchar[1];//sec/10%10]; Ledbuff[2] = Ledchar[2];//sec/100%10]; Ledbuff[3] = Ledchar[3];//sec/1000%10]; Ledbuff[4] = Ledchar[4];//sec/10000%10]; Ledbuff[5] = Ledchar[5];//sec/100000%10]; 没注意, 这样才样显示012345 |
figo88130 发表于 2018-6-17 20:39 Ledbuff[0] = 0: //Ledchar[sec%10]; Ledbuff[1] = 1; //Ledchar[sec/10%10]; Ledbuff[2] = 2; //Ledchar[sec/100%10]; Ledbuff[3] = 3; //Ledchar[sec/1000%10]; Ledbuff[4] = 4; //Ledchar[sec/10000%10]; Ledbuff[5] = 5; //Ledchar[sec/100000%10]; 改这样呀, 你程序有查表, 会显示012345的, 我估计你是串位了. 就是138译码不正确. 你几位显一样的看不出 |
|
60行“ case 0:ADDR0=0;ADDR1=0;ADDR2=0;i++;P0=Ledbuff[0];break;”你这样写没有数码管显示的,中间应该是“ADDR0=1;ADDR1=0;ADDR2=0;”,后面的以此类推 |
|
程序没看出问题呀, 估计是硬件部分问题, 但这句改下会好点 default: break; 改为 default: i = 0; break; // i 异常时下次会正常 可改这几句调试: Ledbuff[0] = 0: //Ledchar[sec%10]; Ledbuff[1] = 1; //Ledchar[sec/10%10]; Ledbuff[2] = 2; //Ledchar[sec/100%10]; Ledbuff[3] = 3; //Ledchar[sec/1000%10]; Ledbuff[4] = 4; //Ledchar[sec/10000%10]; Ledbuff[5] = 5; //Ledchar[sec/100000%10]; 程序正常, 应该显示543210, 显示正常再看程序, 我估算你电路会串位, 也就是138译码不正常, 如是, 试着P1.0 P1.1 P1.2拉个3K3的上拉电阻, 还有, 138输出到三极管要接个几百到1K欧的电阻. 再不行就换138. |