📄 723_1lcd.c
字号:
//lcd显示用的
#include<reg51.h>
#define uchar unsigned char
sbit t_clk=P1^2;
sbit t_io=P1^3;
sbit t_rst=P1^4;
sbit BIT0=ACC^0;
sbit BIT7=ACC^7;
uchar time1[7];
unsigned char code tab[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x00,0x00,0x00,0x00,0x00,0x00
};
void delay(unsigned int cc)
{ uchar j;
for(;cc>0;cc--)
for(j=0;j<110;j++);
}
void inputbyte(uchar shuju)//对ds1302输入操作
{
uchar i;
ACC=shuju;
t_rst=1;//启动对1302允许传送
for(i=8;i>0;i--)
{
t_io=BIT0;//准备送最低位数据
t_clk=0;
t_clk=1;//产生一个上升沿,写人数据
ACC=ACC>>1;
}
}
uchar outputbyte()//对ds1302进行输出操作
{
uchar i;
t_rst=1;//启动对1302允许传送
for(i=8;i>0;i--)
{
ACC=ACC>>1;//将接受到的数据移到最低位
t_io=1;//准备
t_clk=1;
t_clk=0;//产生一个下降沿,读出数据
BIT7=t_io;//把数据给最高位
}
return ACC;
}
void wr_1302(uchar addr,uchar shuju)
{//将指令或数据(shuju)写入对应寄存器(addr)
t_rst=0;
t_clk=0;
t_rst=1;
inputbyte(addr);//输入地址
inputbyte(shuju);//输入数据
t_rst=0;
t_io=1;
}
uchar re_1302(uchar addr)
{// 读出对应寄存器的内容
uchar dat1;
t_rst=0;
t_clk=0;
t_rst=1;
inputbyte(addr);
dat1=outputbyte();
t_rst=0;
return (dat1);
}
void get_1302(uchar time[])
{
uchar i,j,j1;
uchar addr=0x81;
for(i=0;i<3;i++)
{
time[i]=re_1302(addr);
/* j=time[i];//lcd显示用的
j1=j/16;//
j=j%16;//
j=j1*10+j;//
time[i]=j;//*/
addr+=2;
}
}
void main()
{
uchar aa=0,aa1,aa2,bb=0,bb1,bb2,dd=0,dd1,dd2;
wr_1302(0x8e,0x00);//取消写保护
wr_1302(0x80,0x50);//初始化秒
wr_1302(0x82,0x59);//分
wr_1302(0x84,0x01);//小时
wr_1302(0x8e,0x80);//写保护
while(1)
{
get_1302(time1);
aa=time1[2];//测试小时
aa1=aa/16;//数据进制转换
aa2=aa%16;
P2=0xfe;
P0=tab[aa2];//
delay(1);
P2=0xfd;
P0=tab[aa1];//
delay(1);
bb=time1[1];//分钟
bb1=bb/16;
bb2=bb%16;
P2=0xfb;
P0=tab[bb2];//
delay(1);
P2=0xf7;
P0=tab[bb1];//
delay(1);
dd=time1[0];//秒
dd1=dd/16;
dd2=dd%16;
P2=0xbf;
P0=tab[dd2];
delay(1);
P2=0x7f;
P0=tab[dd1];
delay(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -