找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3689|回复: 9
收起左侧

proteus中仿真,目标是实现秒表功能,最大可以计到 999999秒,请问下面这段程序哪错了?

[复制链接]
ID:379308 发表于 2018-9-22 16:00 | 显示全部楼层 |阅读模式

仿真图

仿真图


为啥把程序刷进去没反应

  1. #include<reg52.h>
  2. unsigned char code a[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90};
  3. unsigned char abuff[]={0xFF,0xFF,0XFF,0XFF,0XFF,0XFF};
  4. unsigned char sec=0;   //记录秒数
  5. unsigned char i=0;  //动态扫描索引
  6. unsigned char count=0; //记录中断次数 TF0=1为一次中断

  7. void main()
  8. {
  9.         EA=1;     //开启中断
  10.         ET0=1;    //开启定时器0中断
  11.         TR0=1;   //开启定时器0
  12.         TMOD=0x01;
  13.         TH0=0xFC;
  14.         TL0=0x65;

  15.         while(1)
  16.         {
  17.                 if(count>=1000) // 中断1000次,即达到1s
  18.                 {
  19.                         count=0;
  20.                         sec++;  //秒数加1
  21.                         abuff[0]=a[sec%10];
  22.                         abuff[1]=a[sec/10%10];
  23.                         abuff[2]=a[sec/100%10];
  24.                         abuff[3]=a[sec/1000%10];
  25.                         abuff[4]=a[sec/10000%10];
  26.                         abuff[5]=a[sec/100000%10];
  27.                         }
  28.                 }
  29.         }
  30.         
  31. void InterruptT0() interrupt 1  //interrupt为关键字,1表示定时器0中断
  32. {
  33.         TH0=0xFC;
  34.         TL0=0x65;
  35.         count++;
  36.         P1=0xFF;  //显示消隐
  37.         switch(i)
  38.                         {
  39.                                 case 0: P2=0x01;i++;P1=abuff[0];break;
  40.                                 case 1: P2=0x02;i++;P1=abuff[1];break;
  41.                                 case 2: P2=0x40;i++;P1=abuff[1];break;
  42.                                 case 3: P2=0x80;i++;P1=abuff[1];break;
  43.                                 case 4: P2=0x10;i++;P1=abuff[1];break;
  44.                                 case 5: P2=0x20;i=0;P1=abuff[1];break;
  45.                                 default:break;
  46.                         }                 
  47. }
复制代码


回复

使用道具 举报

ID:303383 发表于 2018-9-22 16:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:111634 发表于 2018-9-22 17:09 | 显示全部楼层
本帖最后由 zl2168 于 2018-9-22 19:30 编辑

实例93  99.9秒秒表
Proteus仿真一下,确认有效。
实例95 99.9秒秒表.rar (38.86 KB, 下载次数: 23)
回复

使用道具 举报

ID:135253 发表于 2018-9-23 16:38 | 显示全部楼层
count 不能定义为char
回复

使用道具 举报

ID:155507 发表于 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
回复

使用道具 举报

ID:726822 发表于 2020-4-11 12:29 | 显示全部楼层
zl2168 发表于 2018-9-22 17:09
实例93  99.9秒秒表
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程— ...

亲,请问能不能把keil程序发一下呢谢谢你
回复

使用道具 举报

ID:726822 发表于 2020-4-11 12:32 | 显示全部楼层
zl2168 发表于 2018-9-22 17:09
实例93  99.9秒秒表
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程— ...

亲,请问能不能把keil程序发一下呢谢谢你
回复

使用道具 举报

ID:591189 发表于 2020-4-13 08:29 | 显示全部楼层
count和sec换成UINT,i给个初值,定时器的初装值放到启动前,switch语句改正好,应该可以运行了,但到不了999999,建议把秒数分成两部分,高三位和第三位这样定义才放的下。
回复

使用道具 举报

ID:726822 发表于 2020-4-18 19:37 | 显示全部楼层
angmall 发表于 2018-9-23 18:54
unsigned char的取值范围是0-255
char是有长度的,你好好看看书,会有详细的解释

十分感谢!
回复

使用道具 举报

ID:213173 发表于 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;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表