导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求助]救我!!!![wake]

 *第27118篇: [求助]救我!!!!

  
楼 主:wake 2004年10月27日12:17
 [求助]救我!!!!
#include   <stdio.h>  
#include   <reg51.h>  
#include   <absacc.h>  

#define s1 XBYTE[0x0300]
#define s2 XBYTE[0x0700]
#define s3 XBYTE[0x0b00]
#define DA XBYTE[0x4000]
typedef unsigned char uchar;
unsigned char code letter[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  void delay_1(void);
void delay_2(void);
void delay_3(void);
void main(void)
{

int j;
uchar k;
uchar m;
uchar l;

uchar f;
k=0;
do
                   {
       f=k;
       k++;

  for(j==0;j  <=500;j++)
  {
  DA=0;
  delay_1();
 DA=64;
 delay_2();
 DA=175;
 delay_3();
 DA=150;
 delay_3();
 DA=64;
 delay_2();
 }
 
m=f/10;
l=f%10;
s1=letter[m];

s2=letter[l];
}
while(k  <=20);
}

void delay_1(void)
{
uchar h;
for(h=0;h  <=100;h++)
{;}
}
void delay_2(void)
{
uchar h;
for(h=0;h  <=127;h++)
{;}
}
void delay_3(void)
{
uchar h;
for(h=0;h  <=75;h++)
{;}
}

我是一个单片机初学者。这是我前几天写的一个东东,目的是发一个阶梯波。首先电压为0v,持续0.2ms,接着为1v,持续0.3ms,再接着为3.5v,持续0.1ms,再是3v,持续0.1ms,接着为1v,持续0.3ms。总周期为1ms。并要求发10000次,每500次使显示器加1,直到20。然而,在这里我却遇到几个问题:
 1:显示没有加一的过程,直接显示20,且将k++改为++k时,显示为21。
 2:对于延时程序的调试上,有很多随机因素。比如delay_2,若将h〈=127改为h〈=125,则严时由0.4ms变为0.2ms。而且,很多原本设计为0.1ms的,他可能变化很大。
  以上两个问题,我一直不得其解。希望各位大虾指教。谢谢

  
2楼:xiaodao35 2004年10月27日20:01
 [quote][b]以下是引用[i]wa
以下是引用wake在2004-10-27 12:17:43的发言:
[求助]救我!!!!#include   <stdio.h>  
 #include   <reg51.h>  
 #include   <absacc.h>  

 #define s1 XBYTE[0x0300]
 #define s2 XBYTE[0x0700]
 #define s3 XBYTE[0x0b00]
 #define DA XBYTE[0x4000]
 typedef unsigned char uchar;
 unsigned char code letter[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
   void delay_1(void);
 void delay_2(void);
 void delay_3(void);
 void main(void)
 {

 int j;
 uchar k;
 uchar m;
 uchar l;

 uchar f;
 k=0;
 do
                    {
        f=k;
        k++;

   for(j==0;j  <=500;j++)
   {
   DA=0;
   delay_1();
  DA=64;
  delay_2();
  DA=175;
  delay_3();
  DA=150;
  delay_3();
  DA=64;
  delay_2();
  }
  
 m=f/10;
 l=f%10;
 s1=letter[m];

 s2=letter[l];
 }
 while(k  <=20);
 }

 void delay_1(void)
 {
 uchar h;
 for(h=0;h  <=100;h++)
 {;}
 }
 void delay_2(void)
 {
 uchar h;
 for(h=0;h  <=127;h++)
 {;}
 }
 void delay_3(void)
 {
 uchar h;
 for(h=0;h  <=75;h++)
 {;}
 }

 我是一个单片机初学者。这是我前几天写的一个东东,目的是发一个阶梯波。首先电压为0v,持续0.2ms,接着为1v,持续0.3ms,再接着为3.5v,持续0.1ms,再是3v,持续0.1ms,接着为1v,持续0.3ms。总周期为1ms。并要求发10000次,每500次使显示器加1,直到20。然而,在这里我却遇到几个问题:
  1:显示没有加一的过程,直接显示20,且将k++改为++k时,显示为21。
  2:对于延时程序的调试上,有很多随机因素。比如delay_2,若将h〈=127改为h〈=125,则严时由0.4ms变为0.2ms。而且,很多原本设计为0.1ms的,他可能变化很大。
   以上两个问题,我一直不得其解。希望各位大虾指教。谢谢
 



能显示20说明k++是对的,加到20之后你的程序就到有了。
也就是说,你的程序没有大循环。
加上:
while(1)
{
k=0;
.
.
.
.
.
while(k  <=20);
}
}
  
3楼:wake 2004年10月28日11:54
 感谢xiaodao345给我的帮助,经过
感谢xiaodao345给我的帮助,经过昨天的调试发现,问题出在for语句上,必须在
while(1)
{
k=0;
do{
.
.
.
j==0;
while(k  <=20);
}
}
for语句循环使用第一次时,j自动赋直,但在下一次使用时j直不变,依然保持j==501

>>>>>>对该主题发表你的看法

本主题贴数3,分页: [第1页]


[上一篇主题]:74lvc4245的/OE,DIR位的高电位用+5v还是+3.3v????? [求助][讨

[下一篇主题]:紧急求助各位大侠关于vb的mscomm控件与单片机通讯: