12864显示可调1302时钟Word文档格式.docx

上传人:b****6 文档编号:17347910 上传时间:2022-12-01 格式:DOCX 页数:22 大小:19.04KB
下载 相关 举报
12864显示可调1302时钟Word文档格式.docx_第1页
第1页 / 共22页
12864显示可调1302时钟Word文档格式.docx_第2页
第2页 / 共22页
12864显示可调1302时钟Word文档格式.docx_第3页
第3页 / 共22页
12864显示可调1302时钟Word文档格式.docx_第4页
第4页 / 共22页
12864显示可调1302时钟Word文档格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

12864显示可调1302时钟Word文档格式.docx

《12864显示可调1302时钟Word文档格式.docx》由会员分享,可在线阅读,更多相关《12864显示可调1302时钟Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。

12864显示可调1302时钟Word文档格式.docx

/*----------------------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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1