标题: 求助大神,单片机延时语句本身没错但报错,实在是不懂了,求教大神 [打印本页]

作者: at89s51G    时间: 2017-5-30 15:02
标题: 求助大神,单片机延时语句本身没错但报错,实在是不懂了,求教大神
延时的3句全报错。。无奈。
#include<reg51.h>
sbit P1_0=P1^0;                                     //脉冲输出//
sbit P1_1=P1^1;                                     //计数开关//
sbit P1_2=P1^2;                                     //脉冲开关//
xdata unsigned char w _at_ 0x8002,d _at_ 0x8004;    //位选 段选//
unsigned char j,x0,x1,x2,x3,x4,x5;                  //定义j(定时倍数10) x显示段码//
unsigned long i;                                    //累加i 显示i //
code unsigned char a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}  //数组显示//
void delay()
{   unsigned char i;
for(i=0;i<250;i++);
}
void play()
{x0=i%10;
x1=i/10%10;
x2=i/100%10;
x3=i/1000%10;
x4=i/10000%10;
x5=i/100000;
w=0x01;d=a[x0]; delay();
w=0x02;d=a[x1]; delay();
w=0x004;d=a[x2];delay();
w=0x08;d=a[x3]; delay();
w=0x10;d=a[x4]; delay();
w=0x20;d=a[x5]; delay();  }
void main()
{EA=1;
ET0=1;
ET1=1;
TMOD=0x15;
TR0=0;
TR1=0;
TH0=0x00;TL1=0x00;
TH1=0x3c;TL1=0xb0;
while(1)
{if(P1_1==0)
{TR0=0;TH0=0x00;TL0=0x00;i=153091;play()}
if(P1_1==1)
{TR0=1;i=TH0<<8|TL0;play();}
if(P1_2==0)
{TR1=0;TH1=0x3c;TL1=0xb0;j=0;P1_0=0}
if(P1_2==1)
{TR1=1;}}}
void int1() interrupt 3
{TH1=0x3c;TL1=0xb0;j++;
if(j==10)
{P1_0=!P1_0;j=0}}

QQ图片20170530150607.png (195.97 KB, 下载次数: 68)

QQ图片20170530150607.png

作者: zjjhtony    时间: 2017-5-30 16:41
任何问题都在你的程序中:
1)注意语句结束了需要分号“;”;
2)注意程序书写,不要一行接一行连着写;
code unsigned char a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}  //数组显示//
这句后面的“;”呢?
作者: yuquanyou    时间: 2017-5-30 19:18
语句结束了需要分号“;”
语句结束了需要分号“;”
语句结束了需要分号“;”
作者: angmall    时间: 2017-5-30 22:37
  1. #include<reg51.h>

  2. sbit P1_0=P1^0;                                     //脉冲输出//
  3. sbit P1_1=P1^1;                                     //计数开关//
  4. sbit P1_2=P1^2;                                     //脉冲开关//
  5. unsigned char xdata w _at_ 0x8002,d _at_ 0x8004;    //位选 段选//
  6. unsigned char j,x0,x1,x2,x3,x4,x5;                  //定义j(定时倍数10) x显示段码//
  7. unsigned long i;                                    //累加i 显示i //
  8. unsigned char code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //数组显示//
  9. void delay()
  10. {   unsigned char i;
  11.         for(i=0;i<250;i++);
  12. }
  13. void play()
  14. {
  15.         x0=i%10;
  16.         x1=i/10%10;
  17.         x2=i/100%10;
  18.         x3=i/1000%10;
  19.         x4=i/10000%10;
  20.         x5=i/100000;
  21.         w=0x01;d=a[x0]; delay();
  22.         w=0x02;d=a[x1]; delay();
  23.         w=0x004;d=a[x2];delay();
  24.         w=0x08;d=a[x3]; delay();
  25.         w=0x10;d=a[x4]; delay();
  26.         w=0x20;d=a[x5]; delay();  
  27. }
  28. void main()
  29. {
  30.         EA=1;
  31.         ET0=1;
  32.         ET1=1;
  33.         TMOD=0x15;
  34.         TR0=0;
  35.         TR1=0;
  36.         TH0=0x00; TL1=0x00;
  37.         TH1=0x3c; TL1=0xb0;
  38.         while(1)
  39.         {
  40.                 if(P1_1==0)
  41.                 {
  42.                         TR0=0; TH0=0x00; TL0=0x00; i=153091; play();
  43.                 }
  44.                 if(P1_1==1)
  45.                 {
  46.                         TR0=1; i=TH0<<8|TL0; play();
  47.                 }
  48.                 if(P1_2==0)
  49.                 {
  50.                         TR1=0; TH1=0x3c; TL1=0xb0; j=0; P1_0=0;
  51.                 }
  52.                 if(P1_2==1)
  53.                 {
  54.                         TR1=1;
  55.                 }
  56.         }
  57. }
  58. void int1() interrupt 3
  59. {
  60.         TH1=0x3c; TL1=0xb0;
  61.         j++;
  62.         if(j==10)
  63.         {
  64.                 P1_0=!P1_0; j=0;
  65.         }
  66. }

复制代码

作者: 阿兹尼亚    时间: 2017-5-31 19:26
延时程序没错就不是他的问题,一些看似无关的小错误也会让程序报错




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