mega16驱动ds12c887

#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
#define DS_ PORTC&=~BIT(6)
#define DS PORTC|=BIT(6)
#define RW_ PORTC&=~BIT(5)
#define RW PORTC|=BIT(5)
#define AS_ PORTC&=~BIT(4)
#define AS PORTC|=BIT(4)
#define CS_ PORTC&=~BIT(3)
#define CS PORTC|=BIT(3)
uchar tab1[]={"DAT:"};
uchar tab2[]={"TIME:"};
const uchar tab[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x20};
extern uchar dat[]={0x32,0x30,0x31,0x31,0x2d,0x39,0x39,0x2d,0x30,0x36};
extern uchar time[8]={0x30,0x30,0x2d,0x30,0x30,0x2d,0x30,0x30};
uchar sec=0,min=0,hou=0,day=0,mon=0,yea=0,week=0;
void delay(uint z)
{
while(z--);
} mega16驱动ds12c887
void disan()
{
uchar hlb;
hlb=hou;
dat[0x00]=2+0x30;//Äêǧλ
dat[0x01]=0+0x30;//Äê°Ùλ
dat[0x02]=yea0/10+0x30;//Äêʮλ
dat[0x03]=yea+0x30;//Äê¸öλ
dat[0x05]=mon/16+0x30;//ÔÂʮλ
dat[0x06]=mon+0x30;//Ô¸öλ
dat[0x08]=day/16+0x30;//Ììʮλ
dat[0x09]=day+0x30;//Ìì¸öλ
time[0x00]=hou/16+0x30;//ʱʮλ
time[0x01]=hou+0x30;//ʱ¸öλ
time[0x03]=min/16+0x30;//·Öʮλ
time[0x04]=min+0x30;//·Ö¸öλ
time[0x06]=sec/16+0x30;//Ãëʮλ
time[0x07]=sec+0x30;//Ãë¸öλ

}
void write_com(uchar com)
{
PORTC&=~BIT(2);
PORTC&=~BIT(1);
PORTB=com;
PORTC|=BIT(0);
delay(1);
PORTC&=~BIT(0);
delay(3);
}

void write_dat(uchar dat)
{
PORTC|=BIT(2);
PORTC&=~BIT(1);
PORTB=dat;
PORTC|=BIT(0);
delay(1);
PORTC&=~BIT(0);
delay(3);

}
void init()
{
write_com(0X38);//ÉèÖÃ16*2ÏÔʾ£¬5*7µãÕó£¬8λÊý¾Ý¿Ú
delay(5);
write_com(0X0c);//0000 1£¨100)£¬¿ªÏÔʾ£¬²»ÏÔ¹â±ê£¬²»ÉÁ¹â±ê
delay(5);
write_com(0X06);//0000 01£¨10£©£¬Ö¸Õë¼Ó1£¬ÕûÆÁ²»ÒÆ
delay(5);
}

void write_ds(uchar add,uchar date)
{
CS_;
RW;
DS;
AS;
PORTA=add;
AS_;
RW_;
PORTA=date;
delay(1);
RW;
AS;
CS;
}
uchar read_ds(uchar add)
{
uchar ds_date;
CS_;
DS;
RW;
AS;
PORTA=add;
AS_;
DS_;
DDRA=0X00;
delay(1);
ds_date=PINA;
DDRA=0XFF;
DS;
AS;
CS;
return ds_date;
}

void ds12887()
{
sec=read_ds(0);
min=read_ds(2);
hou=read_ds(4);
day=read_ds(7);
mon=read_ds(8);
week=read_ds(6);
yea=read_ds(9);
}
void display()
{
uchar i;
init();
write_com(0X80);
delay(5);
for(i=0;i<4;i++)
{
write_dat(tab1[i]);
delay(5);
}
for(i=0;i<10;i++)
{
write_dat(dat[i]);
delay(5);
}
write_com(0X80+0X40);
delay(5);
for(i=0;i<5;i++)
{
write_dat(tab2[i]);
delay(5);
}
for(i=0;i<8;i++)
{
write_dat(time[i]);
delay(5);
}
write_dat(0x20);
delay(5);
write_dat(0x20);
delay(5);
write_dat(0x30+week);
delay(5);
}
void key_set()
{
write_ds(9,0x11);//Äê
write_ds(8,0x11);//ÔÂ
write_ds(7,0x03);//ÈÕ
write_ds(6,0x06);//ÐÇÆÚ
write_ds(4,0x18);//ʱ
write_ds(2,0x45);//·Ö
write_ds(0,0x50);//Ãë
}
void main()
{
MCUCSR |= 1<<JTD; //½ûÖ¹JTAG½Ó¿Ú
MCUCSR |= 1<<JTD; //ÐèÒªÁ¬ÐøÁ½´Î²Ù×÷²ÅÄܱ»ÓÐЧִÐÐ
DDRA=0XFF;
DDRB=0XFF;
DDRC=0XFF;
write_com(0X01);//È«²¿ÇåÁã
write_com(0X03);//±£Êý¾ÝÇå³ýÖ¸Õë
/
write_ds(0x0b,0x02);
//key_set();
while(1)
{
ds12887();
disan();
display();
delay(1000);
}
}

mega16驱动ds12c887





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值