错误:unsigned char count=0; 正确:unsigned int count=0; 错误: case 0: P2=0x01;i++;P1=abuff[0];break; case 1: P2=0x02;i++;P1=abuff[1];break; case 2: P2=0x40;i++;P1=abuff[1];break; case 3: P2=0x80;i++;P1=abuff[1];break; case 4: P2=0x10;i++;P1=abuff[1];break; case 5: P2=0x20;i=0;P1=abuff[1];break; 正确: case 0: P2=0x01;i++;P1=abuff[0];break; case 1: P2=0x02;i++;P1=abuff[1];break; case 2: P2=0x04;i++;P1=abuff[2];break; case 3: P2=0x08;i++;P1=abuff[3];break; case 4: P2=0x10;i++;P1=abuff[4];break; case 5: P2=0x20;i=0;P1=abuff[5];break; |
angmall 发表于 2018-9-23 18:54 十分感谢! |
count和sec换成UINT,i给个初值,定时器的初装值放到启动前,switch语句改正好,应该可以运行了,但到不了999999,建议把秒数分成两部分,高三位和第三位这样定义才放的下。 |
zl2168 发表于 2018-9-22 17:09 亲,请问能不能把keil程序发一下呢谢谢你 |
zl2168 发表于 2018-9-22 17:09 亲,请问能不能把keil程序发一下呢谢谢你 |
unsigned char的取值范围是0-255 char是有长度的,你好好看看书,会有详细的解释 unsigned char sec=0; //记录秒数 unsigned char i=0; //动态扫描索引 unsigned char count=0; //记录中断次数 TF0=1为一次中断 if(count>=1000) // 中断1000次,即达到1s { count=0; sec++; //秒数加1 unsigned char是8位的,占一个寄存器, 无符号字符型,范围(0-255) unsigned int是16位, 占2个寄存器, 无符号整型 范围(0-65,535) unsigned long是32位, 占4个寄存器, 无符号整型 范围(0-4,294,967,296) sec 定义为 unsigned long sec, 可以计到 999999秒 count 定义为 unsigned int |
count 不能定义为char |
本帖最后由 zl2168 于 2018-9-22 19:30 编辑 实例93 99.9秒秒表 先Proteus仿真一下,确认有效。 ![]() ![]() 以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,书中电路和程序设计有详细说明,电路与程序真实可靠可信可行,程序语句条条有注解。 若需99.99秒,硬件电路增加一位595。软件程序增加0.01s(10ms)计数器,并修改相应计数显示程序。 |