找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2322|回复: 12
收起左侧

写的单片机延时程序,编译之后提示我语法错误,有没有大佬帮忙解答下

[复制链接]
ID:890771 发表于 2021-3-11 14:34 | 显示全部楼层 |阅读模式
单片机程序如下,用keil编译之后就说语法错误,可是本人实在看不出来为什么,希望大佬帮我解答,谢谢!
#include<reg52.h>
sbit led1=P1^0;
sbit wei=P2^7;
sbit duan=P2^6;
#define uint unsigned int;
#define uchar unsigned char;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uint num1,num2,n;
void delayms(uint);
void main()
{
        TMOD=0x11;
        EA=1;
        ET0=1;
        ET1=1;
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;
        TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
        TR0=1;
        TR1=1;
        while(1)
        {
                wei=1;
                P0=0xfe;
                wei=0;
                P0=0xff;               

                duan=1;
                P0=table[n/10];
                duan=0;
                P0=0xfe;
                delayms(1);

                wei=1;
                P0=0xfd;
                wei=0;
                P0=0xfe;

                duan=1;
                P0=table[n%10];
                duan=0;
                P0=0xfe;
                delayms(1);

        }
}
void delayms(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}
void T0_time() interrupt 1
{
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;
        num1++;
        if(num1==4)
        {        
                num1=0;        
                led1=~led1;

        }
}
void T1_time() interrupt 3
{
        TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
        num2++;
        if(num2==20)
        {        
                num2=0;        
                n++;
                if(n==59)
                        n=0;

        }
}


回复

使用道具 举报

ID:889832 发表于 2021-3-11 16:08 | 显示全部楼层
个人认为你可以把定时器分开写,可以创个函数写,看的轻松点

评分

参与人数 1黑币 +20 收起 理由
51hei跑堂 + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:890771 发表于 2021-3-11 16:32 | 显示全部楼层
村标露娜 发表于 2021-3-11 16:08
个人认为你可以把定时器分开写,可以创个函数写,看的轻松点

好的,大佬,我等会改下再上传,但是延时函数最后还是会出错,说我语法错误,但是我也看不出来哪里出错了。
回复

使用道具 举报

ID:890771 发表于 2021-3-11 16:47 | 显示全部楼层
#include<reg52.h>
#define uint unsigned int;
#define uchar unsigned char;
sbit led1=P1^0;
sbit wei=P2^7;
sbit duan=P2^6;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uint num,n;
void delayms(uint);
void openZD();
void main()
{
        openZD();//开定时器1中断
        while(1)
        {
                wei=1;
                P0=0xfe;
                wei=0;
                P0=0x00;               

                duan=1;
                P0=table[n/10];//让第一个数码管显示十位
                duan=0;
                P0=0xff;
                delayms(1);

                wei=1;
                P0=0xfd;
                wei=0;
                P0=0x00;

                duan=1;
                P0=table[n%10];//让第二个数码管显示个位
                duan=0;
                P0=0xff;
                delayms(1);

        }
}
void T1_time() interrupt 3//定时器1中断
{
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        num++;
        if(num==20)
        {       
                num=0;       
                n++;
                if(n==59)
                        n=0;
        }
}
void openZD()//打开中断子程序
{
        TMOD=0x10;
        EA=1;
        ET1=1;
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        TR1=1;
}
void delayms(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}
这是简化后的程序,我把led闪烁删除了,改成了定时器1中断,加了注释,加了中断子程序,但还是提示语法错误。
回复

使用道具 举报

ID:890771 发表于 2021-3-11 16:52 | 显示全部楼层
本帖最后由 小周单片机 于 2021-3-11 17:13 编辑

改了一下,这个程序的具体功能是让单片机数码管做59s循环计时
回复

使用道具 举报

ID:890771 发表于 2021-3-11 16:53 | 显示全部楼层
村标露娜 发表于 2021-3-11 16:08
个人认为你可以把定时器分开写,可以创个函数写,看的轻松点

#include<reg52.h>
#define uint unsigned int;
#define uchar unsigned char;
sbit led1=P1^0;
sbit wei=P2^7;
sbit duan=P2^6;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uint num,n;
void delayms(uint);
void openZD();
void main()
{
        openZD();//开定时器1中断
        while(1)
        {
                wei=1;
                P0=0xfe;
                wei=0;
                P0=0x00;               

                duan=1;
                P0=table[n/10];//让第一个数码管显示十位
                duan=0;
                P0=0xff;
                delayms(1);

                wei=1;
                P0=0xfd;
                wei=0;
                P0=0x00;

                duan=1;
                P0=table[n%10];//让第二个数码管显示个位
                duan=0;
                P0=0xff;
                delayms(1);

        }
}
void T1_time() interrupt 3//定时器1中断
{
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        num++;
        if(num==20)
        {       
                num=0;       
                n++;
                if(n==59)
                        n=0;
        }
}
void openZD()//打开中断子程序
{
        TMOD=0x10;
        EA=1;
        ET1=1;
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        TR1=1;
}
void delayms(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}
回复

使用道具 举报

ID:739545 发表于 2021-3-11 16:53 | 显示全部楼层
哪行,提示的错误内容是什么,提问要有针对性,你这个太难让人回答了
回复

使用道具 举报

ID:739545 发表于 2021-3-11 16:54 | 显示全部楼层
void delayms(uint); 里面少了一个x
回复

使用道具 举报

ID:890771 发表于 2021-3-11 17:09 | 显示全部楼层
lovezjf234 发表于 2021-3-11 16:54
void delayms(uint); 里面少了一个x

不行改了还是出错,我给你上图片
回复

使用道具 举报

ID:890771 发表于 2021-3-11 17:11 | 显示全部楼层
lovezjf234 发表于 2021-3-11 16:53
哪行,提示的错误内容是什么,提问要有针对性,你这个太难让人回答了

报错是这样的
无标题.png
回复

使用道具 举报

ID:890771 发表于 2021-3-11 17:21 | 显示全部楼层
附件:报错的内容
无标题.png
回复

使用道具 举报

ID:584814 发表于 2021-3-11 17:26 | 显示全部楼层
#define uint unsigned int;
#define uchar unsigned char;
这两句的最后都不可以有分号,去掉后编译正常,其他都是忽悠
回复

使用道具 举报

ID:890771 发表于 2021-3-11 17:44 | 显示全部楼层
man1234567 发表于 2021-3-11 17:26
#define uint unsigned int;
#define uchar unsigned char;
这两句的最后都不可以有分号,去掉后编译正常 ...

哇,我太傻了,谢谢大佬,解决了,我注意力一直在延时程序上,没看到这两个定义后面也加了分号,但是我如果把延时去掉,带不带分号都可以运行,而且在板子上运行也是没问题的,这是什么原理?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表