[51单片机] 请各位前辈帮忙!

[复制链接]
1744|12
 楼主| 鲫鱼汤 发表于 2014-7-4 09:09 | 显示全部楼层 |阅读模式
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit relay=P1^0;        //继电器由P1.0控制

sbit add=P1^1;                 //申明按键
sbit sub=P1^2;
sbit start=P1^3;


sbit LED_shi=P2^1;        //申明数码管位选
sbit LED_ge=P2^2;

uchar code table[]={ 0x3f,0x06,0x5b,0x4f,
                     0x66,0x6d,0x7d,0x07,
                     0x7f,0x6f,0x77,0x7c,
                     0x39,0x5e,0x79,0x71 };//数码管共阴极编码
                                         
uchar n,num;//
void delay_ms(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void init()
{
        num=5;
        TMOD=0x01;
        TH0=(65536-5000)/256;
        TL0=(65536-5000)%256;
        EA=1;
        ET0=1;
}
void display(uchar number)
{
        uchar ge,shi;
        shi=number/10;
        ge=number%10;
   
        LED_shi=0;
        P0=table[shi];
        delay_ms(5);
        LED_shi=1;

        LED_ge=0;
        P0=table[ge];
        delay_ms(5);
        LED_ge=1;

}
void keyscan()
{
        if(add==1)
        {
                delay_ms(10);
                if(add==1)
                        {
                                num++;
                                if(num==60)
                                        num=0;
                                while(!add);
                         }
        }
        if(sub==1)
        {
                delay_ms(10);
                if(sub==1)
                        {
                                num--;
                                if(num==0)
                                        num=59;
                                while(!sub);
                         }
        }
        if(start==1)
        {
                delay_ms(10);
                if(start==1)
                        {
                                while(!start);
                                TR0=~TR0;
                         }
        }
}
void main()
{       
        init();
        while(1)
        {
                 keyscan();
                display(num);
                if(n==20num)
                {
                        n=0;
                        relay=0;
                        delay_ms(50);
                        relay=1;
                }
        }       
}

void time0() interrupt 1
{
        TH0=(65536-5000)/256;
        TL0=(65536-5000)%256;
        n++;               
}
各位前辈,能不能帮我看下程序出了什么问题,编译完总是说有语法错误,在主程序的的if语句那块,已经标成红色了,我是想让数码管显示一个两位数,表示设定的时间是多少秒,可以由按键加减,等到时间到了就让继电器短暂吸合,定时器是50ms中断一次,谢谢各位了!       
 楼主| 鲫鱼汤 发表于 2014-7-4 09:18 | 显示全部楼层
才学单片机不久,在线等各位老师的解答,谢谢了!
原野之狼 发表于 2014-7-4 09:19 | 显示全部楼层
20num?   20*num?

评分

参与人数 1威望 +1 收起 理由
鲫鱼汤 + 1 很给力!

查看全部评分

 楼主| 鲫鱼汤 发表于 2014-7-4 09:22 | 显示全部楼层
原野之狼 发表于 2014-7-4 09:19
20num?   20*num?

我照着前辈说的改了下,变成20*num之后就没错误了,真是太感谢了!不过为什么20num就不行呢
原野之狼 发表于 2014-7-4 09:24 | 显示全部楼层
鲫鱼汤 发表于 2014-7-4 09:22
我照着前辈说的改了下,变成20*num之后就没错误了,真是太感谢了!不过为什么20num就不行呢 ...

没有为什么   语法就是这样
弥勒开怀笑 发表于 2014-7-4 09:31 | 显示全部楼层
 楼主| 鲫鱼汤 发表于 2014-7-4 09:33 | 显示全部楼层
弥勒开怀笑 发表于 2014-7-4 09:31

怎么结贴呀
弥勒开怀笑 发表于 2014-7-4 09:35 | 显示全部楼层
我也不知道
 楼主| 鲫鱼汤 发表于 2014-7-4 09:37 | 显示全部楼层
原野之狼 发表于 2014-7-4 09:24
没有为什么   语法就是这样

前辈怎么结贴
原野之狼 发表于 2014-7-4 09:40 | 显示全部楼层
鲫鱼汤 发表于 2014-7-4 09:37
前辈怎么结贴

左侧导航栏   我的未结主题
很忙 发表于 2014-7-4 11:51 | 显示全部楼层
lvyunhua 发表于 2014-7-5 19:34 | 显示全部楼层
xg3469 发表于 2014-7-5 20:41 | 显示全部楼层
,同意12楼。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

12

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部