找回密码
 立即注册

QQ登录

只需一步,快速开始

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

万年历源程序

[复制链接]
跳转到指定楼层
楼主
ID:210871 发表于 2017-6-13 17:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="2013-03-26  Mon";
uchar code table1[]="   00:00:00";
//uchar code table2[][7]={"Mon","Tue","Wes","Thi","Fri","Sat","Sun"};

sbit key1=P3^7;
sbit key2=P3^6;
sbit key3=P3^5;
sbit key4=P3^4;
sbit key5=P3^3;
sbit key6=P3^2;
sbit e=P1^2;
sbit rw=P1^1;
sbit rs=P1^0;
uchar i,sec=0,min=0,hour=0,t=0;
uint year=2013,month=3,day=26;
uchar a=0,m=0;

void writecom(uchar x);
void writedata(uchar date);
void init();
void delay(uchar z);
void write1(uchar dizhi,uint shuju);
void writeyear(uchar dizhi,uint shuju);

void write(uchar dizhi,uchar shuju);
void keyscan();
void xingqi(uchar k);

void main()
{
        init();
                for(i=0;i<15;i++)
     {        writedata(table[i]);
                delay(5);
          }
        writecom(0x80+0x40);
        for(i=0;i<11;i++)
     {
                writedata(table1[i]);
                delay(5);
          }
   while(1)
   {
           keyscan();
    if(key6==0)
        {         
         TR0=1;
                 writecom(0x0c);
        }   
   }
}

void init()
{
    rw=0;
        e=0;
    writecom(0x38);
    writecom(0x0c);
    writecom(0x06);
    writecom(0x01);
        writecom(0x80);       
        TMOD=0x01;
        TCON=0x12;
        EX1=1;
        EA=1;
        ET0=1;
        TR0=1;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;

}
void writecom(uchar x)
{
   rw=0;
   rs=0;
   P0=x;
   delay(5);
   e=1;
   delay(5);
   e=0;
}

void writedata(uchar date)
{
        rs=1;
        rw=0;
    P0=date;
        delay(5);
        e=1;
        delay(5);
        e=0;
}
void write(uchar dizhi,uchar shuju)
{
        uchar ge,shi;
        ge=shuju%10;
        shi=shuju/10;
        writecom(0x80+0x40+dizhi);
        writedata(0x30+shi);
        writedata(0x30+ge);
}

void write1(uchar dizhi,uint shuju)
{
        uchar ge1,shi1;
        ge1=shuju%10;
        shi1=shuju/10;
        writecom(0x80+dizhi);
        writedata(0x30+shi1);
        writedata(0x30+ge1);
}

void writeyear(uchar dizhi,uint shuju)
{
        uchar ge,shi,bai,qian;
        ge=shuju%10;
        shi=shuju%100/10;
        bai=shuju%1000/100;
        qian=shuju/1000;
        writecom(0x80+dizhi);
        writedata(0x30+qian);
        writedata(0x30+bai);
        writedata(0x30+shi);
        writedata(0x30+ge);
}
void timer0() interrupt 1
{
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   t++;
           if(t==7)
   {
                t=0;
                sec++;
                if(sec==60)
                {
                        sec=0;
                        min++;
                        if(min==60)
                        {
                                min=0;
                                hour++;
                                if(hour==24)
                                {
                                        hour=0;
                                       
                                        day++;
                                        if(day==30)
                                        {
                                                day=1;
                                                month++;
                                                if(month==12)
                                                {
                                                        month=1;
                                                        year++;
                                                        if(year==9999)
                                                        {
                                                                year=0;
                                                        }
                                                        writeyear(0,year);
                                                        writecom(0x80+0);
                                                }
                                                write1(5,month);
                                                writecom(0x80+6);
                                        }
                                        write1(8,day);
                                        writecom(0x80+9);
                                        writecom(0x80+12);
                                        m++;
                                        if(m==7)
                                                m=0;
                                        xingqi(m);
                                       
                                }
                                write(3,hour);
                                writecom(0x80+0x40+4);
                        }
                        write(6,min);
                        writecom(0x80+0x40+7);
                }
                write(9,sec);
                writecom(0x80+0x40+10);
   }
           if(key6==0)
    {
         EA=1;
         ET0=1;
         TR0=1;
         EX1=1;
        }
}
void keyscan()
{       
       
        if(key1==0)
        {       
                delay(10);
                writecom(0x0f);         
                if(key1==0)
                TR0=0;
                a++;
                while(!key1);
        }                                 
       
        if(a==1)
        {
               
               
                writecom(0x80+0x40+10);
                if(key2==0)
                        {       
                                sec++;
                                if(sec==60)
                                        sec=0;
                                write(9,sec);
                                writecom(0x80+0x40+10);
                                while(!key2);
                        }

        }
        if(a==2)
        {
               
                        writecom(0x80+0x40+7);
                        if(key2==0)
                        {
                                min++;
                                if(min==60)
                                        min=0;
                                write(6,min);
                                writecom(0x80+0x40+7);
                                while(!key2);
                        }
                        if(key3==0)
                        {
                                min--;
                                if(min==-1)
                                        min=59;
                                write(6,min);
                                writecom(0x80+0x40+7);       
                               
                                while(!key3);
                        }
                
         }
        if(a==3)
        {
       
                writecom(0x80+0x40+4);
                if(key2==0)
                {
                        hour++;
                        if(hour==24)
                                hour=0;
                        write(3,hour);
                        writecom(0x80+0x40+4);
                        while(!key2);
                }
                if(key3==0)
                {
                        hour--;
                        if(hour==-1)
                                hour=23;
                        write(3,hour);
                        writecom(0x80+0x40+4);
                       
                        while(!key3);
                }       
         }       
         if(a==4)
         {

                writecom(0x80+9);
                if(key2==0)
                {
                        day++;
                        if(day==31)
                                day=1;
                        write1(8,day);
                        writecom(0x80+9);
                        while(!key2);
                }                
         }
         if(a==5)
         {

                writecom(0x80+6);
                if(key2==0)
                {
                        month++;
                        if(month==13)
                                month=1;
                        write1(5,month);
                        writecom(0x80+6);
                        while(!key2);
                }
                                
         }         
         if(a==6)
         {
                 
                writecom(0x80+3);
                if(key2==0)
                {
                        year++;
                        if(year==9999)
                                year=1;
                        writeyear(0,year);
                        writecom(0x80+0);
                        while(!key2);
                }
                if(key3==0)
                {
                        year--;
                        if(year==0)
                                year=9999;
                        writeyear(0,year);
                        writecom(0x80+0);
                        while(!key3);
                }                
         }
         if(a==7)
         {          
                
                 writecom(0x80+12);
                 if(key2==0)
                {        m++;
                if(m==7)
                        m=0;
                               
                        xingqi(m);
                        while(!key2);
                }
               
         }
         if(a==8)
                a=0;

               
}               

void xingqi(uchar k)
{
        if(k==0)
        {       
                writedata('M');
                writedata('o');               
                writedata('n');
         }
         if(k==1)
          {
                writedata('T');
                writedata('u');
                writedata('e');
          }
         if(k==2)
        {        writedata('W');
                writedata('e');       
                writedata('s');
         }
         if(k==3)
        {
                writedata('T');
                writedata('h');
                writedata('i');
         }
         if(k==4)
        {       
                writedata('F');
                writedata('r');
                writedata('i');
         }
         if(k==5)
        {
                writedata('S');
                writedata('a');
                writedata('t');
        }
         if(k==6)
        {
                writedata('S');
                writedata('u');
                writedata('n');
         }
}
void delay(uchar z)
{
   uchar i;
   while(z--)
    for(i=110;i>0;i--);
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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