标题: 求大神帮忙看看程序!数码管无法一直循环! [打印本页]

作者: 天下大同    时间: 2017-3-29 20:26
标题: 求大神帮忙看看程序!数码管无法一直循环!
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit seg=P1^4;
sbit bi=P1^5;
u8 code seg_table[]={0xc0,0xf9,0xa4,0xb0,0x99,
           0x92,0x82,0xf8,0x80,0x90
           };//定义数字编码;
u8 code bi_table[]={0x80,0x40,0x20,0x10,
          0x08,0x04,0x02,0x01
          };//定义位置编码;
void delay(u16 num)
{
   u16 x,y;
  for(x=num;x>0;x--)
    for(y=110;y>0;y--);
}
void dis(u16 which_bi,u16 which_num)//模块化函数;
{  bi=1;//解除锁存,开始输入位数;
  P0=bi_table[which_bi];
  bi=0;//解除锁存,开始输入位数;

  seg=1;//解除锁存,开始输入数字;
  P0=seg_table[which_num];
  seg=0;//解除锁存,开始输入数字;
  delay(300);

}
void main(void)
{ u16 num;
  P0 = 0xff;//初始化;
  P1 = 0xff;//初始化;
  seg=0;
  bi=0;//禁止锁存;
  while(1)
   {
     for(num=7;num>=0;num--)
           dis(num,num);//输入位数与数字;
         

   }
}


求问为何用protues 里数码管无法循环呢


作者: imxuheng    时间: 2017-3-29 21:11
像这种问题最好是把protues仿真图也附上
作者: cjjcjj1    时间: 2017-3-30 06:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: zl2168    时间: 2017-3-30 12:30
只需将最末一句 for(num=7;num>=0;num--) 改为 for(num=7;num>0;num--) 就能循环。但这个程序很烂,例如循环序数num最大7,却定义u16,完全可以与延时程序中的num分别定义。还有功能有些莫名其妙,也许只是一部分程序,另有目的。但看样子楼主是初学者,用这种范例作为学习样本基础,以后就没法长进了。网上和部分教材中的烂程序实在太多!!!
作者: 15936059539    时间: 2017-3-31 10:53
楼上说的有道理
作者: 天下大同    时间: 2017-4-4 21:07
zl2168 发表于 2017-3-30 12:30
只需将最末一句 for(num=7;num>=0;num--) 改为 for(num=7;num>0;num--) 就能循环。但这个程序很烂,例如循 ...

O(∩_∩)O谢谢大神,不好意思~我刚刚学习单片机,看网上的教程写的,刚入门的确写得很烂
作者: zl2168    时间: 2017-4-5 10:03
天下大同 发表于 2017-4-4 21:07
O(∩_∩)O谢谢大神,不好意思~我刚刚学习单片机,看网上的教程写的,刚入门的确写得很烂

真诚地给你介绍2本书,张志良编著的:
《80C51单片机实用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于学习51单片机原理,程序(c和汇编)语句条条有注解,便于阅读理解,便于自学。
《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。
有比较才能有鉴别!真心想学就去比较一下,绝不忽悠你!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1