标题: proteus中仿真,目标是实现秒表功能,最大可以计到 999999秒,请问下面这段程序哪错了? [打印本页]
作者: 莲蓬16 时间: 2018-9-22 16:00
标题: proteus中仿真,目标是实现秒表功能,最大可以计到 999999秒,请问下面这段程序哪错了?
为啥把程序刷进去没反应
- #include<reg52.h>
- unsigned char code a[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90};
- unsigned char abuff[]={0xFF,0xFF,0XFF,0XFF,0XFF,0XFF};
- unsigned char sec=0; //记录秒数
- unsigned char i=0; //动态扫描索引
- unsigned char count=0; //记录中断次数 TF0=1为一次中断
- void main()
- {
- EA=1; //开启中断
- ET0=1; //开启定时器0中断
- TR0=1; //开启定时器0
- TMOD=0x01;
- TH0=0xFC;
- TL0=0x65;
- while(1)
- {
- if(count>=1000) // 中断1000次,即达到1s
- {
- count=0;
- sec++; //秒数加1
- abuff[0]=a[sec%10];
- abuff[1]=a[sec/10%10];
- abuff[2]=a[sec/100%10];
- abuff[3]=a[sec/1000%10];
- abuff[4]=a[sec/10000%10];
- abuff[5]=a[sec/100000%10];
- }
- }
- }
-
- void InterruptT0() interrupt 1 //interrupt为关键字,1表示定时器0中断
- {
- TH0=0xFC;
- TL0=0x65;
- count++;
- P1=0xFF; //显示消隐
- switch(i)
- {
- 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;
- default:break;
- }
- }
复制代码
作者: 小猫猫爱吃鱼 时间: 2018-9-22 16:28
看你的仿真,应该没有点 运行 按钮
作者: zl2168 时间: 2018-9-22 17:09
本帖最后由 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)计数器,并修改相应计数显示程序。
作者: xzf586 时间: 2018-9-23 16:38
count 不能定义为char
作者: angmall 时间: 2018-9-23 18:54
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
作者: cdhshuai 时间: 2020-4-11 12:29
亲,请问能不能把keil程序发一下呢谢谢你
作者: cdhshuai 时间: 2020-4-11 12:32
亲,请问能不能把keil程序发一下呢谢谢你
作者: 火神浪客行 时间: 2020-4-13 08:29
count和sec换成UINT,i给个初值,定时器的初装值放到启动前,switch语句改正好,应该可以运行了,但到不了999999,建议把秒数分成两部分,高三位和第三位这样定义才放的下。
作者: cdhshuai 时间: 2020-4-18 19:37
十分感谢!
作者: wulin 时间: 2020-4-19 07:12
错误: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;
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |