高手进来

[复制链接]
 楼主| shiwilson 发表于 2010-12-30 21:15 | 显示全部楼层 |阅读模式
[img]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/(VIQU3[@]LGÇJFQB%60987G.jpg[/img]
NE5532 发表于 2010-12-30 21:19 | 显示全部楼层
高手是解决不了了,可能要神仙了。
 楼主| shiwilson 发表于 2010-12-30 21:24 | 显示全部楼层

RE: 高手进来

下面的程序中 key1按下,分钟自增1,key2按下,分钟自减1,我现在设置好了key3,按键一按下小时就自增1 ,请问怎么设置使key3有切换时与分的功能,也就是使key3 能控制时与分
   
#include<reg52.h>  //引用标准库的头文件
#define uint unsigned int
#define uchar unsigned char
void keys();
sbit P20=P2^0;  
sbit P21=P2^1;  
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;  
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
sbit key1=P3^5;  
sbit key2=P3^4;
sbit key3=P3^3;
uchar code table [10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar hour=00,minute=00,second=00;
uint a,b,dd,ee,gg,ii,hh,jj;
static char count=0;
void delay(uint z)
{
    int x,y;
    for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}
void int1() interrupt 1
{
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;  //延时50ms常数
    count++;
}
void main()
{
    TMOD=0x01;  //置T1为方式1
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;  //延时50ms的时间常数
    EA=1;  //开中断
    ET0=1;
    TR0=1;
    for(;;)
    {
        a=hour/10;
        b=hour%10;  
        ee=minute/10;  
        gg=minute%10;  
        ii=second/10;  
        jj=second%10;
                keys();
     
            P2=0X00;
            P1=table[a];
            P27=1;
            delay(1);
            P2=0X00;
            P1=table[b];
            P26=1;
            delay(1);

            P2=0X00;
            P1=0xbf;
            P25=1;
            delay(1);

            P2=0X00;
            P1=table[ee];
            P24=1;
            delay(1);

            P2=0X00;
            P1=table[gg];
            P23=1;
            delay(1);

            P2=0X00;
            P1=0xbf;
            P22=1;
            delay(1);
            P2=0X00;
            P1=table[hh];
            P21=1;
            delay(1);


            P2=0X00;
            P1=table[jj];
            P20=1;
            delay(1);


            if(count==20)
      {
            count=0;
            second++;
            if(second==60)
      {
                second=0;
                minute++;
                if(minute==60)
          {
                 minute=0;
              hour++;
                    if(hour==24)
              hour=0;
          }
      }
     }
    }
}
void keys()
{
    if(key1==0)
    {
        delay(5);
        if(key1==0)
     {
            while(!key1);
            delay(5);
            minute++;
            if(minute==60)
      {
                minute=0;
                delay(10);
      }
     }
    }



    if(key2==0)
    {
        delay(5);
        if(key2==0)
     {
            while(!key2);
            delay(5);
            minute--;
            if(minute==0)
      {
                minute=59;
                delay(10);
      }
     }
    }


if(key3==0)
    {
        delay(10);
        if(key3==0)
     {
            while(!key3);
            delay(10);
      
            hour++;
            if(hour==24)
      {
             hour=0;
                delay(10);
      
      }
     }
    }
    }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
NE5532 发表于 2010-12-30 21:44 | 显示全部楼层
楼主啊,看问题要看本质,key1、2不就负责增减一个数吗,这个数是什么由key3传入不就可以了么,这像不像一个函数啥的呢?另外楼主晶体接1n的电容,可见Proteus还在害人啊,删了这个软件,你就开始入门了。
 楼主| shiwilson 发表于 2010-12-30 23:03 | 显示全部楼层
谢谢楼上的提醒,以后会注意的,但就像你所说的,我这个方法下午试过了,但还是不行
chenczy 发表于 2010-12-31 10:38 | 显示全部楼层
KEY1、KEY2做加减,KEY3做分、时转换,为什么不行?
NE5532 发表于 2010-12-31 22:19 | 显示全部楼层
楼主,你还没看懂我说的。
 楼主| shiwilson 发表于 2010-12-31 23:38 | 显示全部楼层
楼上的请你把那程序改改看
NE5532 发表于 2011-1-1 10:04 | 显示全部楼层
我只提供思路,从不写程序。
老鱼探戈 发表于 2011-1-3 13:15 | 显示全部楼层
我是来打酱油的。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

154

帖子

0

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

0

主题

154

帖子

0

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