找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2896|回复: 3
打印 上一主题 下一主题
收起左侧

新手求助求帮忙。。实在是没辙了。。

[复制链接]
跳转到指定楼层
楼主
求大神给这个程序在添加一个秒表的功能。。。。。跪求。。。。。。源程序在下面
#include<reg52.h>//lcd1602 数字钟 可调整时间和日期
#define uint unsigned int
#define uchar unsigned char
//lcd_data=P0
//位定义
sbit lcdrs=P2^2;
sbit lcdrw=P2^1;
sbit lcden=P2^0;
sbit k1=P3^3;//mod
sbit k2=P3^2;//+
sbit k3=P3^1;//-
//函数声明
uchar i,t=0,k1num=0;//t为中断次数计数,k1num为k1按下的次数
uint year=2013;//year年
char h=0,m=0,s=0,w=7,month=3,day=3;//h时,m分,s秒,w星期,year年,month月,day日

uchar code table1[]={" 2013-03-03 SUN "};//日期
uchar code table2[]={"    00:00:00    "};//时间
//延时z ms
void delay(uchar z)
{
        uchar x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void write_com(uchar com)
{
        lcdrs=0;
        lcdrw=0;
        P0=com;
        delay(10);
        lcden=1;
        delay(10);
        lcden=0;
}
//lcd写数据
void write_dat(uchar dat)
{
        lcdrs=1;
        lcdrw=0;
        P0=dat;
        delay(10);
        lcden=1;
        delay(10);
        lcden=0;
}
void Monday(void)
{
        write_com(0x80+12);
        write_dat('M');
        write_com(0x80+13);
        write_dat('O');
        write_com(0x80+14);
        write_dat('N');
}
void Tuesday(void)
{
        write_com(0x80+12);
        write_dat('T');
        write_com(0x80+13);
        write_dat('U');
        write_com(0x80+14);
        write_dat('E');
}
void Wednesday(void)
{
        write_com(0x80+12);
        write_dat('W');
        write_com(0x80+13);
        write_dat('E');
        write_com(0x80+14);
        write_dat('D');
}
void Thursday(void)
{
        write_com(0x80+12);
        write_dat('T');
        write_com(0x80+13);
        write_dat('H');
        write_com(0x80+14);
        write_dat('U');
}
void Friday(void)
{
        write_com(0x80+12);
        write_dat('F');
        write_com(0x80+13);
        write_dat('R');
        write_com(0x80+14);
        write_dat('I');
}
void Saturday(void)
{
        write_com(0x80+12);
        write_dat('S');
        write_com(0x80+13);
        write_dat('A');
        write_com(0x80+14);
        write_dat('T');
}
void Sunday(void)
{
        write_com(0x80+12);
        write_dat('S');
        write_com(0x80+13);
        write_dat('U');
        write_com(0x80+14);
        write_dat('N');
}
void display_week(uchar week)//星期显示
{
        switch(week)
        {
        case 1:Monday();break;
        case 2:Tuesday();break;
        case 3:Wednesday();break;
        case 4:Thursday();break;
        case 5:Friday();break;
        case 6:Saturday();break;
        case 7:Sunday();break;
        }
}
//lcd初始设置
void init(void)
{
        lcden=0;
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
        write_com(0x80);
        TMOD=0x01;
        ET0=1;
        EA=1;
        TH0=0x3c;TL0=0xb0;//50ms
        TR0=1;
        write_com(0x80);//第一行
        for(i=0;i<15;i++)
                {write_dat(table1);delay(5);}
        write_com(0x80+0x40);//第二行
        for(i=0;i<11;i++)
                {write_dat(table2);delay(5);}       
}


void display_time(uchar ad,uchar time)//时间显示
{
        uchar a,b;
        a=time/10;b=time%10;
        write_com(0x80+0x40+ad);
        write_dat(0x30+a);
        write_com(0x80+0x40+1+ad);
        write_dat(0x30+b);
}

void display_date(uint nian,char yue,char ri)//日期显示
{
        uint y1,y2,y3,y4;
        char a,b,c,d;
        y1=nian/1000;         //千位
        y2=nian%1000/100;     //百位
        y3=nian%1000%100/10;  //十位
        y4=nian%1000%100%10;  //个位
        a=yue/10;
        b=yue%10;
        c=ri/10;
        d=ri%10;
        write_com(0x80+1);
        write_dat(0x30+y1);
        write_com(0x80+2);
        write_dat(0x30+y2);
        write_com(0x80+3);
        write_dat(0x30+y3);
        write_com(0x80+4);
        write_dat(0x30+y4);
        write_com(0x80+6);
        write_dat(0x30+a);
        write_com(0x80+7);
        write_dat(0x30+b);
        write_com(0x80+9);
        write_dat(0x30+c);
        write_com(0x80+10);
        write_dat(0x30+d);
}

void keyscan(void)//按键扫描
{
        if(k1==0)
        {
                delay(10);
                if(k1==0)
                {
                        k1num++;TR0=0;t=0;
                        while(!k1);
                        if(k1num==1)
                        {write_com(0x80+0x40+11);write_com(0x0f);}//s
                        if(k1num==2)
                        {write_com(0x80+0x40+8);}//m
                        if(k1num==3)
                        {write_com(0x80+0x40+5);}//h
                        if(k1num==4)
                        {write_com(0x80+14);}//week
                        if(k1num==5)
                        {write_com(0x80+10);}//day
                        if(k1num==6)
                        {write_com(0x80+7);}//month
                        if(k1num==7)
                        {write_com(0x80+4);}//year
                        if(k1num==8)
                        {k1num=0;write_com(0x0c);TR0=1;}                       
                }
        }
        if(k1num!=0)
        {
                if(k2==0)
                {
                        delay(5);
                        if(k2==0)
                        {
                                while(!k2);
                                if(k1num==1)
                                {
                                        s++;
                                        if(s==60)
                                        s=0;
                                        display_time(10,s);
                                }
                                if(k1num==2)
                                {
                                        m++;
                                        if(m==60)
                                        m=0;
                                        display_time(7,m);
                                }
                                if(k1num==3)
                                {
                                        h++;
                                        if(h==24)
                                        h=0;
                                        display_time(4,h);
                                }
                                if(k1num==4)
                                {
                                        w++;
                                        if(w==8)
                                        w=1;
                                        display_week(w);
                                }
                                if(k1num==5)
                                {
                                        day++;
                                        if(day==32)
                                        day=1;
                                        display_date(year,month,day);
                                }
                                if(k1num==6)
                                {
                                        month++;
                                        if(month==13)
                                        month=1;
                                        display_date(year,month,day);
                                }
                                if(k1num==7)
                                {
                                        year++;
                                        display_date(year,month,day);
                                }
                        }
                }
                if(k3==0)
                {
                        delay(10);
                        if(k3==0)
                        {
                                while(!k3);
                                if(k1num==1)
                                {
                                        s--;
                                        if(s==-1)
                                        s=59;
                                        display_time(10,s);
                                }
                                if(k1num==2)
                                {
                                        m--;
                                        if(m==-1)
                                        m=59;
                                        display_time(7,m);
                                }
                                if(k1num==3)
                                {
                                        h--;
                                        if(h==-1)
                                        h=23;
                                        display_time(4,h);
                                }
                                if(k1num==4)
                                {
                                        w--;
                                        if(w==0)
                                        w=7;
                                        display_week(w);
                                }
                                if(k1num==5)
                                {
                                        day--;
                                        if(day==0)
                                        day=31;
                                        display_date(year,month,day);
                                }
                                if(k1num==6)
                                {
                                        month--;
                                        if(month==0)
                                        month=12;
                                        display_date(year,month,day);
                                }
                                if(k1num==7)
                                {
                                        year--;
                                        display_date(year,month,day);
                                }
                        }
                }
        }
display_date(year,month,day);
display_week(w);
display_time(10,s);
display_time(7,m);
display_time(4,h);
}


void main(void)//主函数
{
        init();
        while(1)
        {
                keyscan();
        }
}

void timer0() interrupt 1//定时器T0中断函数
{
        t++;
        TH0=0x3c;TL0=0xb0;//50ms
        if(t==20)
        {s++;t=0;}
        if(s==60)
        {m++;s=0;}
        if(m==60)
        {h++;m=0;}
        if(h==24)
        {w++;day++;h=0;}
        if(w==8)
        {w=1;}
        if(day==32)
        {month++;day=1;}
        if(month==13)
        {year++;month=1;}
}
电路图在下面。。我可以再添加一个按键。。。
急求大神帮忙修改一下。。。[img][/img]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:68522 发表于 2014-11-11 21:42 | 只看该作者
回复

使用道具 举报

板凳
ID:68522 发表于 2014-11-11 21:43 | 只看该作者
电路图

psb (1).jpg (34.9 KB, 下载次数: 50)

psb (1).jpg
回复

使用道具 举报

地板
ID:68522 发表于 2014-11-12 00:48 | 只看该作者
求帮忙啊。。。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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