zjb2106558 发表于 2017-11-4 09:26 是的 为什么 |
Afan的单片机 发表于 2017-11-3 17:05 score[1]=(number-score[1]*1000)/100;后面的score[1]也得跟着改成score[0]呀。剩下那几句也是……。 |
Afan的单片机 发表于 2017-11-3 23:14 读懂正确有效程序,就知道自己错在哪儿了! |
Afan的单片机 发表于 2017-11-3 23:14 位扫描要有延时 |
位扫描要加延时,不然看不到效果![]() |
zl2168 发表于 2017-11-3 21:08 额。。。感谢 但是我的哪里错了呢 |
本帖最后由 zl2168 于 2017-11-3 21:10 编辑 实例93 99.9秒秒表 先Proteus仿真一下,确认有效。 ![]() ![]() 以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,书中电路和程序设计有详细说明,电路与程序真实可靠可信可行,程序语句条条有注解。若需99.99秒,硬件电路增加一位595。软件程序增加0.01s(10ms)计数器,并修改相应计数显示程序。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。 |
spark399 发表于 2017-11-3 14:16 是1-4呢,5不满足条件 |
改动了以下: #include<reg51.h> #include<intrins.h> char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int number=0; char score[]={0,0,0,0}; void timer0(void) interrupt 1 { number++; score[0]=number/1000; score[1]=(number-score[1]*1000)/100; score[2]=(number-score[1]*1000-score[2]*100)/10; score[3]=(number-score[1]*1000-score[2]*100)%10; if (number>6000){number=0;} TL0=0Xf0; TH0=0Xd8; } main(){ int k=0; int wei=0x01; TMOD=0X01; TH0=0Xd8; TL0=0Xf0;//10ms TR0=1; ET0=1; EA=1; while(1){ for(k=0;k<4;k++) { P2=led[score[k]]; wei=_crol_(wei,2); P3=wei; } } } |
spark399 发表于 2017-11-3 14:16 我改成了for(k=0;k<4;k++),为什么还是不能正常显示呢 |
yzwzfyz 发表于 2017-11-3 10:10 秒表计时呢 |
声明处:05.char score[]={0,0,0,0};初始为4个元素,编译器分配4个存储空间,数组长度为4,最大有效下标3:有效下标score[0]---score[3];“ for(k=1;k<5;k++)”中k=1~5,一是错位,二是最后一个数据超出地址空间了。 |
数组寻址是从0开始吧?score[0]开始。还有取余数用%就行了,不用那么麻烦。 |
不知道你要表达的意思是什么! |
有人吗 |