微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 万年历程序

万年历程序

时间:10-02 整理:3721RD 点击:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

sbit lcdrs=P0^7;
sbit lcdrw=P0^6;
sbit lcde=P0^5;
sbit lcdpsb=P0^4;

sbit rst=P1^0;
sbit sclk=P1^2;
sbit io=P1^1;
uchar writedat[]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};
uchar read_dat[]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
uchar time_dat[7]={14,1,4,21,11,58,30}; //年周月日时分秒
uchar code table[]="0123456789";
uchar code table1[]="一二三四五六日";
uchar str0[16]="2014/04/21";
uchar str1[16]="09:46:30 星期一";
uchar str2[16]="fffff";
uchar str3[16]="dddd";

void write1302_byte(uchar dat);//写数据
void write1302(uchar add,uchar dat);//写地址和写数据
read1302(uchar add);//读数据
void set_rtc(void);//初始化
void delayms(uint x)
{
        uchar i,j;
        for(j=0;j<x;j++)
                for(i=0;i<110;i++);        //延时x秒
}
void write_com(uchar com)        //写指令
{
        lcdrs=0;
        lcdrw=0;
        lcde=0;
        P2=com;
        delayms(5);
        lcde=1;
        delayms(5);
        lcde=0;
}
void write_dat(uchar dat)        //写数据
{
        lcdrs=1;
        lcdrw=0;
        lcde=0;
        P2=dat;
        delayms(5);
        lcde=1;
        delayms(5);
        lcde=0;
}
void lcd_init()           //初始化
{
        lcdpsb=1;
        write_com(0x30);
        delayms(5);
        write_com(0x0c);
        delayms(5);
        write_com(0x01);
        delayms(5);
}
void write1302_byte(uchar dat)//写数据
{
        uchar i;
        rst=0;
        _nop_();
        rst=1;
        _nop_();
        for(i=0;i<8;i++)
        {
                sclk=0;
                io=dat;
                dat=dat&&0x01;
                dat=dat>>1;
                sclk=1;
        }
           rst=0;
        _nop_();       
}
void write1302(uchar add,uchar dat)
{
        rst=0;
        _nop_();
        rst=1;
        _nop_();
        write1302_byte(add);//写地址
        write1302_byte(dat);//写数据
        rst=0;
        _nop_();
        sclk=1;
        _nop_();
        io=1;
        _nop_();               
}

read1302(uchar add)
{
        uchar i,value;
        rst=0;
        _nop_();
        sclk=0;
        _nop_();
        rst=1;
        _nop_();
        write1302_byte(add);
        for(i=0;i<8;i++)
        {
                value=value>>1;
                sclk=0;
                if(io)
                value=value|0x80;
                sclk=1;
                _nop_();       
        }
        rst=0;
        _nop_();
        sclk=0;
        _nop_();
        sclk=1;
        _nop_();
        io=1;
        _nop_();
        return value;//返回
}
void set_rtc()        //初始化
{
        uchar i,j;
        for(i=0;i<7;i++)
        {
                j=time_dat[i]/10;
                time_dat[i]=time_dat[i]%10;
                time_dat[i]=time_dat[i]+j*16;       
        }
        write1302(0x8e,0x00); //去除写保护
        for(i=0;i<7;i++)
        {
                write1302(writedat[i],time_dat[i]);               
        }
        write1302(0x8e,0x80);//写保护
}
void read_str(void)
{
        uchar i;
        for(i=0;i<7;i++)
        {
                time_dat[i]=read1302(read_dat[i]);
        }
}
struct Time
{
        uchar second;
        uchar minute;
        uchar hour;
        uchar day;
        uchar week;
        uchar month;
        uchar year;
}time;
//extern struct Time time;
void mian()
{
        time.second=59;
        time.minute=30;
        time.hour=11;
        time.day =21;
        time.week=1;
        time.month=4;
        time.year=14;
        set_rtc();
        delayms(50);
        lcd_init();
        delayms(50);
        while(1)
        {
        read_str();
        str0[2]=table[time.year/10];
        str0[3]=table[time.year%10];
        str0[6]=table[time.month/10];
        str0[7]=table[time.month%10];
//        str0[]


        }
               
}
写到这不知道怎么写了,求大虾指点

求指导啊啊啊啊啊啊啊

没人吗?

呵呵额呵呵   可以  借鉴

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top