#include<reg52.h>
#include<intrins.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_date PO
sbit LCD_RS =P2^5;
sbit LCD_RW =P2^6;
sbit LCD_EN =P2^7;
sbit dsas=P3^2;
sbit dsds=P3^0;
sbit dsrw=P3^1;
sbit dscs=P3^4;
sbit dsirq=P3^3;
uchar dis11[] = {"羊 20 / / 周"};
uchar dis12[] = {"年 : : "};
uchar dis13[] = {"温度: ℃ "};
uchar dis14[] = {"湿度: %RH "};
uchar code num_to_char[] = {"0123456789"};
uchar data time_data_buff[7]={0x00,0x00,0x12,0x20,0x12,0x06,0x08};
uchar code Week1_to_char[] = {"一"};
uchar code Week2_to_char[] = {"二"};
uchar code Week3_to_char[] = {"三"};
uchar code Week4_to_char[] = {"四"};
uchar code Week5_to_char[] = {"五"};
uchar code Week6_to_char[] = {"六"}; /*星期数字转换为汉字的ASCII 码*/
uchar code Week7_to_char[] = {"日"};
//uchar year[2];
void delay_1ms(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<110;i++);
}
//DS
void write_ds(uchar add,uchar date)
{
dscs=0;
dsas=1;
dsds=1;
dsrw=1;
P1=add;
dsas=0;
dsrw=0;
P1=date;
dsrw=1;
dsas=1;
dscs=1;
}
uchar read_ds(uchar add)
{
uchar ds_date;
dsas=1;
dsds=1;
dsrw=1;
dscs=0;
P1=add;
dsas=0;
dsds=0;
P0=0xff;
ds_date=P1;
dsds=1;
dsas=1;
dscs=1;
return ds_date;
}
void set_time()
{
write_ds(0,0);
write_ds(1,0);
write_ds(2,0);
write_ds(3,0);
write_ds(4,0);
write_ds(5,0);
write_ds(6,1);
write_ds(7,0);
write_ds(8,0);
write_ds(9,0);
}
void DS_init()
{
write_ds(0x0A,0x20);
write_ds(0x0B,0x26);
set_time();
}
//LCD
void write_cmd(uchar cmd)
{
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
P0=cmd;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
void write_dat(uchar dat)
{
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
/*
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if(Y==0)
{Y=0x80;}
else if(Y==1)
{Y=0x90;}
else if(Y==2)
{Y=0x88;}
else if(Y==3)
{Y=0x98;}
pos=X+Y;
write_cmd(pos);
}
*/
void lcd_pos(uchar X,uchar Y,uchar zifuH,uchar zifuL)
{
uchar pos;
if(Y==0)
{Y=0x80;}
else if(Y==1)
{Y=0x90;}
else if(Y==2)
{Y=0x88;}
else if(Y==3)
{Y=0x98;}
pos=X+Y;
write_cmd(pos);
//delay_1ms(5);
write_dat(zifuH);
//delay_1ms(5);
write_dat(zifuL);
//delay_1ms(5);
}
void lcd_init()
{
// LCD_PSB=1;
write_cmd(0x30);
delay_1ms(5);
write_cmd(0x0C);
delay_1ms(5);
write_cmd(0x01);
delay_1ms(5);
}
/*
void write_jiemian()
{
uchar i;
lcd_pos(0,0);
for(i=0;i<16;i++)
{
write_dat(dis11[i]);
}
lcd_pos(0,1);
for(i=0;i<16;i++)
{
write_dat(dis12[i]);
}
lcd_pos(0,2);
for(i=0;i<16;i++)
{
write_dat(dis13[i]);
}
lcd_pos(0,3);
for(i=0;i<16;i++)
{
write_dat(dis14[i]);
}
}
*/
void write_jiemian()
{
uchar i;
for(i=0;i<8;i++)
{
//write_dat(dis11[i]);
lcd_pos(i,0,dis11[i*2],dis11[i*2+1]);
}
// lcd_pos(0,1);
for(i=0;i<8;i++)
{
//write_dat(dis12[i]);
lcd_pos(i,1,dis12[i*2],dis12[i*2+1]);
}
// lcd_pos(0,2);
for(i=0;i<8;i++)
{
//write_dat(dis13[i]);
lcd_pos(i,2,dis13[i*2],dis13[i*2+1]);
}
// lcd_pos(0,3);
for(i=0;i<8;i++)
{
//write_dat(dis14[i]);
lcd_pos(i,3,dis14[i*2],dis14[i*2+1]);
}
}
void get12887time( uchar time_buff[])
{
time_buff[6]=read_ds(9);
time_buff[5]=read_ds(8);
time_buff[4]=read_ds(7);
time_buff[3]=read_ds(6);
time_buff[2]=read_ds(4);
time_buff[1]=read_ds(2);
time_buff[0]=read_ds(0);
}
main()
{
delay_1ms(10);
lcd_init();
while(1)
{
write_jiemian();
get12887time(time_data_buff);
dis11[5] = time_data_buff[6]/10+0x30;
dis11[6] = time_data_buff[6]%10+0x30; /*年*/
dis11[8] = time_data_buff[5]/10+0x30;
dis11[9] = time_data_buff[5]%10+0x30; /*月*/
dis11[11] = time_data_buff[4]/0x10+0x30;
dis11[12] = time_data_buff[4]%0x10+0x30;/*日*/
//dis12[10] = time_data_buff[3]/10+0x30;
dis12[14] = time_data_buff[3]%10+0x30;//周
dis12[4] = time_data_buff[2]/0x10+0x30;
dis12[5] = time_data_buff[2]%0x10+0x30;/*时*/
dis12[7] = time_data_buff[1]/10+0x30;
dis12[8] = time_data_buff[1]%10+0x30; /*分*/
dis12[10] = time_data_buff[0]/10+0x30;
dis12[11] = time_data_buff[0]%10+0x30;/*秒*/
}
}
|