#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcde_1602=P2^7;
sbit rs_1602=P2^6;
sbit rw_1602=P2^5;
sbit sclk=P3^6;
sbit rst=P3^5;
sbit io=P3^4;
uchar code shu[]="Data:20 - - Time: : : ";
uchar code dat[6]={10,11,12,23,59,50};//年月日時分秒
uchar i,j;
///////////////////////////////
void delay(uint);
void write_com_1602(uchar);
void write_dat_1602(uchar);
void init_1602();
void write_byte_1302(uchar);
uchar read_byte_1302();
void write1302(uchar,uchar);
uchar read1302(uchar);
///////////////////////////////
void write_byte_1302(uchar dat) //dat 為BCD碼
{
uchar i;
// x=dat/10;
// y=dat%10;
// dat=((dat/10)<<4)|(dat%10);
for(i=0;i<8;i++)
{
io=dat&0x01;
dat>>=1;
sclk=0;
delay(5);
sclk=1;
}
// sclk=0;
}
uchar read_byte_1302()
{
uchar i,dat=0x00;
for(i=0;i<8;i++)
{
dat>>=1;
if(io)
{
dat=dat|0x80;
}
sclk=1;
delay(5);
sclk=0;
}
return ((dat/16)*10+dat%16); //讀出的BCD碼轉換成DEC輸出
}
void write1302(uchar add,uchar dat) //dat為10進制
{
rst=0;
delay(2);
sclk=0;
delay(2);
rst=1;
delay(2);
write_byte_1302(add);
dat=(((dat/10)<<4)|(dat%10)); //dat轉換成BCD
write_byte_1302(dat);
delay(2);
rst=0;
}
uchar read1302(uchar add)
{
uchar temp;
rst=0;
delay(2);
sclk=0;
delay(2);
rst=1;
delay(2);
write_byte_1302(add);
temp=read_byte_1302();
delay(2);
rst=0;
return temp;
}
//////////////////////////////////////////
void write_com_1602(uchar com)
{
rs_1602=0;
rw_1602=0;
P0=com;
delay(5);
lcde_1602=0;
delay(5);
lcde_1602=1;
}
void write_dat_1602(uchar dat)
{
rs_1602=1;
rw_1602=0;
P0=dat;
delay(5);
lcde_1602=0;
delay(5);
lcde_1602=1;
}
void init_1602()
{
write_com_1602(0x38);
write_com_1602(0x38);
write_com_1602(0x38);
// write_com_1602(0x01);
write_com_1602(0x0e);
write_com_1602(0x06);
}
///////////////////////////////////
///////////////////////////////////
void delay(uint t)
{
for(;t>0;t--);
}
void main(void)
{
init_1602();
write_com_1602(0x80);
for(i=0;i<15;i++)
{
write_dat_1602(shu);
}
write_com_1602(0xc0);
for(i=15;i<28;i++)
{
write_dat_1602(shu);
}
write1302(0x8e,0x00);
write1302(0x8c,dat[0]);
write1302(0x88,dat[1]);
write1302(0x86,dat[2]);
write1302(0x84,dat[3]);
write1302(0x82,dat[4]);
write1302(0x80,dat[5]);
write1302(0x8e,0x80);
while(1)
{
j=read1302(0x8d);
write_com_1602(0x87);
write_dat_1602(j/10+0x30);
write_dat_1602(j%10+0x30);
j=read1302(0x89);
write_com_1602(0x8a);
write_dat_1602(j/10+0x30);
write_dat_1602(j%10+0x30);
j=read1302(0x87);
write_com_1602(0x8d);
write_dat_1602(j/10+0x30);
write_dat_1602(j%10+0x30);
j=read1302(0x85);
write_com_1602(0xc5);
write_dat_1602(j/10+0x30);
write_dat_1602(j%10+0x30);
j=read1302(0x83);
write_com_1602(0xc8);
write_dat_1602(j/10+0x30);
write_dat_1602(j%10+0x30);
j=read1302(0x81);
write_com_1602(0xcb);
write_dat_1602(j/10+0x30);
write_dat_1602(j%10+0x30);
}
}
請問大蝦,輸出為什么會不對呢? 謝謝了
|