ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:19.04KB ,
资源ID:17347910      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17347910.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(12864显示可调1302时钟Word文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、/*-DS1302相关声明-*/char TAB_1302= 0x00,0x40,0x09,0x10,0x07,0x00,0x12; /秒:分:时:日:月:星期:年.uchar code TAB_XQ=一二三四五六日/把DS1302数字日期转换为中文字符.sbit T_CLK=P14; /* 实时时钟的时钟线引脚*/sbit T_IO=P15; /* 实时时钟的数据线*/sbit T_RST=P16; /* 实时时钟的复位线引脚*/uchar bdata datbyte;sbit datbyte0=datbyte0;sbit datbyte7=datbyte7; /*-18B20相关声明-*/

2、uchar dis116;sbit DQ=P10; /*DS18B20温度检测*/ /*-键盘相关声明-*/sbit key=P35; /功能键sbit key1=P33; /自加“+”键sbit key2=P34; /自减“-”键uchar sum,keyflag=0; /调用时,分,秒,标志,调用键盘处理标志./*-以下为LCD12864相关函数-*/* 函数名称:void delay1ms(uint x)函数功能: 延时1MS*/ void delay1ms(uint x) uint i,j; for(i=0;ix;i+) for(j=0;j120;j+); /*void w_12864

3、byte(uchar byte) 写字节*/ void w_12864byte(uchar byte) uchar i; psb=0;8; sck=0; byte=1; sid=CY; sck=1; uchar r_12864byte(void) 读字节 uchar r_12864byte(void) uchar i,temp1,temp2; temp1 = 0; temp2 = 0; temp1=temp11; sck = 0; sck = 1; if(sid) temp1+; temp2=temp2 if(sid) temp2+; return (0xf0&temp1)+(0x0f&tem

4、p2);void c_12864busy( void ) 检测忙函数 void c_12864busy( void ) do w_12864byte(0xfc); /11111,RW(1),RS(0),0 while(0x80&r_12864byte();void w_12864(bit dat_com,uchar byt) 写入函数 void w_12864(bit dat_com,uchar byt) uchar temp; if(dat_com=0) /为零,写入指令 temp=0xf8; /11111,RS(0),RW(0),0 else /否则,写入数据 temp=0xfa; /11

5、111,RS(1),RW(0),0 cs=1; c_12864busy(); w_12864byte(temp); w_12864byte(byt&0xf0); /写入高四位 w_12864byte(bytuchar r_1302byte(void)读一个字节(下降沿) uchar r_1302byte(void) datbyte=0; datbyte7=T_IO; /读最低位 return(datbyte);void write_1302(uchar addr,uchar date) 指定位置写数据*/ void write_1302(uchar addr,uchar date) T_RST

6、=0; T_RST=1; w_1302byte(addr); w_1302byte(date);uchar read_1302(uchar addr) 指定位置读数据 uchar read_1302(uchar addr) uchar dat1,dat2,temp; temp=r_1302byte(); dat1=temp/16; dat2=temp%16; temp=dat1*10+dat2; return(temp);void init_1302(void) 初始化*/ uchar addr=0x80; write_1302(0x8e,0x00);7; write_1302(addr,TA

7、B_1302i); addr+=2; write_1302(0x8e,0x80);/*void get_1302(void) 功能说明:读取DS1302时钟信息.*/ void get_1302(void) uchar i,addr=0x81; TAB_1302i=read_1302(addr);/*-以下为18B20相关函数-*/*void delay (uint x) 若机器周期为1us,则本延时程序为延时 4*x(us) */ void delay (uint x) /本板延时8us while (-x);/*uchar bus_rest(void) 产生单总线系统信号的总线复位信号,并

8、返回总线上是否存在单总线器件信息 uchar bus_rest(void) uchar k; DQ=0; /将DQ信号线拉低 delay(29); /持续48US DQ=1; /释放总线 delay(3); /等待从设备将总线拉低 k=DQ; /保存当前总线状态 delay(25); /等待总线初始化过程结束 return k;/返回是否有从设备将总线拉低 uchar r_1820BYTE(void) 向单总线读取一个数据字节 uchar r_1820BYTE(void) uchar i=0; uchar date = 0; for (i=8;i0;i-) DQ = 0; / 将DQ信号线拉低

9、启动读时隙 / 释放总线,等待从机动车辆返回数据位 delay(1); /越接近15us越好; 准备采样总线上的信号 date=1 ; if (DQ) date=date|0x80; delay(6); return(date);void w_1280Byte(uchar bytevalue) 向单总线写一个数据字节 void w_1280Byte(uchar bytevalue) / 将DQ信号线拉低启动读时隙 DQ=bytevalue&0x01; / delay(5);/等待写时隙结束 /释放 bytevalue /等待写时隙结束uint read_T(void) 读取1820温度 */

10、uint read_T(void) uchar a=0; uchar b=0; uint t=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);void show_T(uint temp)显示温度 void show_T(uint t

11、emp) int i; float ftemp; ftemp = temp* 0.0625; sprintf(dis1,%f,ftemp);/把温度值写入数组内存 w_12864(com,0x98+3);5; w_12864(dat,dis1i); /写入温度/*-以下为显示相关函数-*/ /* void fenli(uchar x,uchar y,uchar val) 指定位置写入数据*/void fenli(uchar x,uchar y,uchar val) uchar ge,shi,addr,i=0; if(val=5)/这里把星期数字显示的转换为中文 w_12864(com,0x88

12、+2);2; /一个汉字写两次 if(TAB_13025=0)w_12864(dat,TAB_XQi); if(TAB_13025=1)w_12864(dat,TAB_XQ2+i); / if(TAB_13025=2)w_12864(dat,TAB_XQ3+i); /?星期三显示有问题 if(TAB_13025=3)w_12864(dat,TAB_XQ5+i); if(TAB_13025=4)w_12864(dat,TAB_XQ7+i); if(TAB_13025=5)w_12864(dat,TAB_XQ9+i); if(TAB_13025=6)w_12864(dat,TAB_XQ11+i);

13、 else shi=TAB_1302val/10;/分离十位 ge=TAB_1302val%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);/*void display(void) 显示函数 get_1302(); /读1302 fenli(3,7,0); /读秒 fenli(3,5,1); /读分 fenli(3,3,2); /读时 fenli(2,5,

14、3); /读日 fenli(2,3,4); /读月 fenli(3,2,5); /读星期 fenli(2,1,6); /读年/*-按键处理相关函数-*/ /*void scanner() 按键函数*/ void scanner() uchar i,j; if(!key) /功能键按下 delay1ms(500); /延时500MSkey) /还按下,退出时间调整 keyflag=0; /标志位为0 sum=0; /清0/清闪烁 for(i=0;i+)/十进制转十六进制 j=TAB_1302i/10; TAB_1302i=TAB_1302i%10; TAB_1302i=TAB_1302i+16*j; init_1302(); /写入1302 while(!key); /等待释放 delay1ms(10); /延时消抖 e

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

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