打印

高手给看下程序

[复制链接]
1611|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
长缨在手|  楼主 | 2011-3-12 18:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AI, AN, ge, ni, FOR
UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS) 怎么显示这个??




#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
char code duma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  
char code wema[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7};
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar i,num,t,y;
uchar qian,bai,shi,ge;
void inter_init()
{ EA=1;
  
   ET1=1;
   TMOD=0X10;
   TH1=(65536-5000)/256;
   TL1=(65536-5000)%256;
   TR1=1;
}
void inter_init1()
{ EA=1;
  ET0=1;
  TMOD=0x01;
  TH0=(65535-50000)/256;
  TL0=(65535-50000)%256;
  TR0=1;
}
void delay(uchar x)
{ uchar a,b;
for(a=x;a>0;a--)
for(b=200;b>0;b--);

}
void display(uchar qian,bai,shi,ge)
{ P2=duma[qian] ;
   P1= wema[1];
   delay(15);

    P2=duma[bai] ;
   P1= wema[2];
   delay(15);
  P2=duma[shi] ;
   P1= wema[3];
   delay(15);
    P2=duma[ge] ;
   P1= wema[4];
   delay(15);



}
void main()
{  inter_init();
  
   num=5432;
   while(1)
   {  if(i==2)
       { i=0;
  if(num==5000)
       num=5000;
    else
    num--;
     }
   
    }
        qian=num/1000;     
  bai=num%1000/100;   
  shi=num%1000%100/10;   
  ge=num%10;      
  display(qian,bai,shi,ge);
  inter_init1();
       for(t=0;t<8;t++)
  {
   P2=table[t];
      if(y==10)
       y=0;
      }         
   
  
  
}

  void time0()interrupt 1 using 1   
{
TH0=(65535-5000)/256;     
TL0=(65535-5000)%256;
i++;
}
void time1()interrupt 3 using 1    //如果用T1的话,应为interrupt 3
{
TH0=(65535-50000)/256;     //因为晶振用的是11.0592MHZ。在取初值时,大概定义为一个中断为50MS
TL0=(65535-50000)%256;
y++;
}

相关帖子

沙发
长缨在手|  楼主 | 2011-3-12 18:48 | 只看该作者
.利用动态扫描和定时器1在数码管上显示出从765432开始以1%秒的速度往下递减直至764987并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,同时蜂鸣器发声,当数码管上数减到停止时,实验板上流水灯全部闪烁5次,数码管全熄灭。单片机进入休眠状态。
这个程序怎么写?????大侠帮下忙!

使用特权

评论回复
板凳
ltho| | 2011-3-13 16:31 | 只看该作者
你程序里面只有四位,你的要求是六位,而且以1%递减速度是看不出个位变的,个位会很乱,另外建议你修改程序的结构,个十百千不要用你那种算法吧,那样单片机负担会很大,何况这里是六位。其它没什么建议的

使用特权

评论回复
地板
joyme| | 2011-3-14 11:58 | 只看该作者
TH0=(65535-50000)/256;     //因为晶振用的是11.0592MHZ。在取初值时,大概定义为一个中断为50MS
TL0=(65535-50000)%256;
中断里不要有这种语句,你可以定义宏让编译器做。另外即使在程序了也建议用移位而不是用除法,除以256可以右移8位,整除256直接&0xff就好了

你的显示调用应该放在if(i==2)里,inter_init1();放在初始化里,后面的控制灯的代码也要放在while(1)里,否则就不会被执行。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

27

帖子

1

粉丝