21ic电子技术开发论坛 单片机与嵌入式系统 侃单片机论坛 高手进来
发新帖我要提问
返回列表
打印

高手进来

[复制链接]
1320|9
手机看帖
扫描二维码
随时随地手机跟帖
沙发
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);
      
      }
     }
    }
    }

未命名.jpg (177.73 KB )

未命名.jpg

使用特权

评论回复
地板
NE5532| | 2010-12-30 21:44 | 只看该作者
楼主啊,看问题要看本质,key1、2不就负责增减一个数吗,这个数是什么由key3传入不就可以了么,这像不像一个函数啥的呢?另外楼主晶体接1n的电容,可见Proteus还在害人啊,删了这个软件,你就开始入门了。

使用特权

评论回复
5
shiwilson|  楼主 | 2010-12-30 23:03 | 只看该作者
谢谢楼上的提醒,以后会注意的,但就像你所说的,我这个方法下午试过了,但还是不行

使用特权

评论回复
6
chenczy| | 2010-12-31 10:38 | 只看该作者
KEY1、KEY2做加减,KEY3做分、时转换,为什么不行?

使用特权

评论回复
7
NE5532| | 2010-12-31 22:19 | 只看该作者
楼主,你还没看懂我说的。

使用特权

评论回复
8
shiwilson|  楼主 | 2010-12-31 23:38 | 只看该作者
楼上的请你把那程序改改看

使用特权

评论回复
9
NE5532| | 2011-1-1 10:04 | 只看该作者
我只提供思路,从不写程序。

使用特权

评论回复
10
老鱼探戈| | 2011-1-3 13:15 | 只看该作者
我是来打酱油的。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

154

帖子

0

粉丝
关闭 热门推荐
快速回复 在线客服 返回列表 返回顶部