12864显示可调1302时钟Word文档格式.docx
- 文档编号:17347910
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:22
- 大小:19.04KB
12864显示可调1302时钟Word文档格式.docx
《12864显示可调1302时钟Word文档格式.docx》由会员分享,可在线阅读,更多相关《12864显示可调1302时钟Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
/*----------------------DS1302相关声明-------------------------*/
charTAB_1302[]={0x00,0x40,0x09,0x10,0x07,0x00,0x12};
//秒:
分:
时:
日:
月:
星期:
年.
ucharcodeTAB_XQ[]={"
一二三四五六日"
//把DS1302数字日期转换为中文字符.
sbitT_CLK=P1^4;
/*实时时钟的时钟线引脚*/
sbitT_IO=P1^5;
/*实时时钟的数据线*/
sbitT_RST=P1^6;
/*实时时钟的复位线引脚*/
ucharbdatadatbyte;
sbitdatbyte0=datbyte^0;
sbitdatbyte7=datbyte^7;
/*--------------18B20相关声明-------------------------------*/
uchardis1[16];
sbitDQ=P1^0;
/*DS18B20温度检测*/
/*----------键盘相关声明-------------------------------------*/
sbitkey=P3^5;
//功能键
sbitkey1=P3^3;
//自加“+”键
sbitkey2=P3^4;
//自减“-”键
ucharsum,keyflag=0;
//调用时,分,秒,标志,调用键盘处理标志.
/*--------------以下为LCD12864相关函数--------------------------*/
/**************************************************************
函数名称:
voiddelay1ms(uintx)
函数功能:
延时1MS
***************************************************************/
voiddelay1ms(uintx)
{
uinti,j;
for(i=0;
i<
x;
i++)
for(j=0;
j<
120;
j++);
}
/**************************************************************
voidw_12864byte(ucharbyte)
写字节
**************************************************************/
voidw_12864byte(ucharbyte)
uchari;
psb=0;
8;
sck=0;
byte<
<
=1;
sid=CY;
sck=1;
}
ucharr_12864byte(void)
读字节
ucharr_12864byte(void)
uchari,temp1,temp2;
temp1=0;
temp2=0;
temp1=temp1<
1;
sck=0;
sck=1;
if(sid)temp1++;
temp2=temp2<
if(sid)temp2++;
return((0xf0&
temp1)+(0x0f&
temp2));
voidc_12864busy(void)
检测忙函数
voidc_12864busy(void)
do
w_12864byte(0xfc);
//11111,RW
(1),RS(0),0
while(0x80&
r_12864byte());
voidw_12864(bitdat_com,ucharbyt)
写入函数
voidw_12864(bitdat_com,ucharbyt)
uchartemp;
if(dat_com==0)//为零,写入指令
temp=0xf8;
//11111,RS(0),RW(0),0
else//否则,写入数据
temp=0xfa;
//11111,RS
(1),RW(0),0
cs=1;
c_12864busy();
w_12864byte(temp);
w_12864byte(byt&
0xf0);
//写入高四位
w_12864byte(byt<
4);
//写入低四位
cs=0;
voidinit_12864(void)
初始化12864
voidinit_12864(void)
w_12864(com,0x30);
//基本指令功能.
w_12864(com,0x0c);
//显示打开,关光标,反白关.
w_12864(com,0x01);
//清屏指令.
w_12864(com,0x06);
//AC自动加一
/*----------------以下为DS1302相关函数-------------------------*/
voidw_1302byte(uchardate)
写一个字节(上升沿)
voidw_1302byte(uchardate)
{
datbyte=date;
T_IO=datbyte0;
//写最低位
T_CLK=0;
T_CLK=1;
datbyte>
>
ucharr_1302byte(void)
读一个字节(下降沿)
ucharr_1302byte(void)
datbyte=0;
datbyte7=T_IO;
//读最低位
return(datbyte);
voidwrite_1302(ucharaddr,uchardate)
指定位置写数据
****************************************************************/
voidwrite_1302(ucharaddr,uchardate)
T_RST=0;
T_RST=1;
w_1302byte(addr);
w_1302byte(date);
ucharread_1302(ucharaddr)
指定位置读数据
ucharread_1302(ucharaddr)
uchardat1,dat2,temp;
temp=r_1302byte();
dat1=temp/16;
dat2=temp%16;
temp=dat1*10+dat2;
return(temp);
voidinit_1302(void)
初始化
*****************************************************************/
ucharaddr=0x80;
write_1302(0x8e,0x00);
7;
write_1302(addr,TAB_1302[i]);
addr+=2;
write_1302(0x8e,0x80);
/****************************************************************
voidget_1302(void)
功能说明:
读取DS1302时钟信息.
*****************************************************************/
voidget_1302(void)
uchari,addr=0x81;
TAB_1302[i]=read_1302(addr);
/*---------------以下为18B20相关函数-----------------------------*/
/******************************************************************
voiddelay(uintx)
若机器周期为1us,则本延时程序为延时4*x(us)
******************************************************************/
voiddelay(uintx)//本板延时8us
while(--x);
/*****************************************************************
ucharbus_rest(void)
产生单总线系统信号的总线复位信号,并返回
总线上是否存在单总线器件信息
ucharbus_rest(void)
{
uchark;
DQ=0;
//将DQ信号线拉低
delay(29);
//持续48US
DQ=1;
//释放总线
delay(3);
//等待从设备将总线拉低
k=DQ;
//保存当前总线状态
delay(25);
//等待总线初始化过程结束
returnk;
//返回是否有从设备将总线拉低
}
ucharr_1820BYTE(void)
向单总线读取一个数据字节
ucharr_1820BYTE(void)
uchari=0;
uchardate=0;
for(i=8;
i>
0;
i--)
DQ=0;
//将DQ信号线拉低启动读时隙
//释放总线,等待从机动车辆返回数据位
delay
(1);
//越接近15us越好;
准备采样总线上的信号
date>
=1;
if(DQ)
date=date|0x80;
delay(6);
return(date);
voidw_1280Byte(ucharbytevalue)
向单总线写一个数据字节
voidw_1280Byte(ucharbytevalue)
//将DQ信号线拉低启动读时隙
DQ=bytevalue&
0x01;
//
delay(5);
//等待写时隙结束
//释放
bytevalue>
////等待写时隙结束
uintread_T(void)
读取1820温度
*******************************************************************/
uintread_T(void)
uchara=0;
ucharb=0;
uintt=0;
bus_rest();
w_1280Byte(0xCC);
//跳过读序号列号的操作;
w_1280Byte(0x44);
//启动温度转换,模数转化;
//跳过读序号列号的操作;
w_1280Byte(0xBE);
//读取温度寄存器等(共可读9个寄存器)前两个就是温度;
a=r_1820BYTE();
//低8位
b=r_1820BYTE();
//高8位
t=(b*256)+a;
return(t);
voidshow_T(uinttemp)
显示温度
voidshow_T(uinttemp)
inti;
floatftemp;
ftemp=temp*0.0625;
sprintf(dis1,"
%f"
ftemp);
//把温度值写入数组内存
w_12864(com,0x98+3);
5;
w_12864(dat,dis1[i]);
//写入温度
/*---------------以下为显示相关函数--------------------------*/
/******************************
voidfenli(ucharx,uchary,ucharval)
指定位置写入数据
********************************/
voidfenli(ucharx,uchary,ucharval)
{
ucharge,shi,addr,i=0;
if(val==5)//这里把星期数字显示的转换为中文
w_12864(com,0x88+2);
2;
{//一个汉字写两次
if(TAB_1302[5]==0)w_12864(dat,TAB_XQ[i]);
if(TAB_1302[5]==1)w_12864(dat,TAB_XQ[2+i]);
//
if(TAB_1302[5]==2)w_12864(dat,TAB_XQ[3+i]);
//?
星期三显示有问题
if(TAB_1302[5]==3)w_12864(dat,TAB_XQ[5+i]);
if(TAB_1302[5]==4)w_12864(dat,TAB_XQ[7+i]);
if(TAB_1302[5]==5)w_12864(dat,TAB_XQ[9+i]);
if(TAB_1302[5]==6)w_12864(dat,TAB_XQ[11+i]);
else
shi=TAB_1302[val]/10;
//分离十位
ge=TAB_1302[val]%10;
if(x==1)x=0x80;
if(x==2)x=0x90;
if(x==3)x=0x88;
if(x==4)x=0x98;
addr=x+y;
w_12864(com,addr);
//指定位置
w_12864(dat,0x30+shi);
//写入
w_12864(dat,0x30+ge);
/*************************************************************
voiddisplay(void)
显示函数
get_1302();
//读1302
fenli(3,7,0);
//读秒
fenli(3,5,1);
//读分
fenli(3,3,2);
//读时
fenli(2,5,3);
//读日
fenli(2,3,4);
//读月
fenli(3,2,5);
//读星期
fenli(2,1,6);
//读年
/*---------------按键处理相关函数--------------------------*/
/************************************************************
voidscanner()
按键函数
*************************************************************/
voidscanner()
uchari,j;
if(!
key)//功能键按下
delay1ms(500);
//延时500MS
key)//还按下,退出时间调整
keyflag=0;
//标志位为0
sum=0;
//清0
//清闪烁
for(i=0;
i++)//十进制转十六进制
{j=TAB_1302[i]/10;
TAB_1302[i]=TAB_1302[i]%10;
TAB_1302[i]=TAB_1302[i]+16*j;
}
init_1302();
//写入1302
while(!
key);
//等待释放
delay1ms(10);
//延时消抖
e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12864 显示 可调 1302 时钟