以下是引用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的,他可能变化很大。 以上两个问题,我一直不得其解。希望各位大虾指教。谢谢 |