lcd带温度显示万年历_第1页
lcd带温度显示万年历_第2页
lcd带温度显示万年历_第3页
lcd带温度显示万年历_第4页
lcd带温度显示万年历_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LCD 带温度显示万年历.txt 都是一个山的狐狸,你跟我讲什么聊斋,站在离你最近的地方, 眺望你对别人的微笑,即使心是百般的疼痛 只为把你的一举一动尽收眼底刺眼的白色, 让我明白什么是纯粹的伤害。LCD 带温度显示万年历(2009-4-5 15:02:00)【收藏】 【评论】 【打印】 【关闭】 标签:1 #include #include #define uchar unsigned char #define uint unsigned int #define LCD_Data P2 #define Busy 0x80 /用于检测 LCD 状态字中的 Busy 标识 sbit DQ = P13; sbit lcdrs = P35; /数据命令选择端 (H/L) sbit lcdrw = P36; /读写选择端 (H/L) sbit lcde = P37; /使能信号 sbit SCL2=P10; /SCL2 定义为 P1 口的第 3 位脚,连接 DS1302SCL 和 ADC0831SCL 脚 sbit SDA2=P11; /SDA2 定义为 P1 口的第 4 位脚,连接 DS1302SCL 和 ADC0831SDA 脚 sbit RST = P12; / DS1302 片选脚 sbit key0 = P00; /定义三个按键 sbit key1 = P01; /加按键 sbit key2 = P02; /减按键 sbit H1 = P03; sbit L=P04; bit presence ; uchar code cdis2 = “ . C “ ; uchar buzyc,funtion_flag=0,temp_num; char shi,fen,miao,nian,yue,ri,xin; uchar beep; unsigned char data temp_data2 = 0x00,0x00 ; unsigned char data display5 = 0x00,0x00,0x00,0x00,0x00 ; unsigned char code ditab16 = 0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09 ; unsigned char code mytab8 = 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00 ; unsigned char l_tmpdate8=0x00,59,12,19,2,8,2;/显示初值 unsigned char l_tmpdisplay8=0x40,0x40,0x40,0x40,0x40,0x40,0x40,0;/待显示的 数 code unsigned char write_rtc_address7=0x80,0x82,0x84,0x86,0x88,0x8c,0x8a; /1302 写入地址 code unsigned char read_rtc_address7=0x81,0x83,0x85,0x87,0x89,0x8d,0x8b;/1302 读出地址 code unsigned char table= 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00;/共阴数码管 0-9 - 熄灭表 uchar date1=“MON“; uchar date2=“TUE“; uchar date3=“WED“; uchar date4=“THU“; uchar date5=“FRI“; uchar date6=“SAT“; uchar date7=“SUN“; #define delayNOP() ; _nop_() ;_nop_() ;_nop_() ;_nop_() ; ; /* * 字节写入子函数: 将要写入的数字先右移一位,是最低位溢出,然后在 scl2 的一个上升沿数据被写入 DS1302,注意 数据的写入时从低位到高位 * */ void Write_Ds1302_Byte(unsigned char date) uchar j,temp; temp=date; for(j=0;j1; /将数据右移一位使最低位溢出 SDA2=CY; /将待写入数据最低位写入数据缓冲 SCL2=0; SCL2=1; /在 scl 的上升延写入数据 /* * 字节读出子函数: 分 8 次读出数据,将读出的数据存入 temp:在时钟信号的下降沿读出一个字节的数据 数据读出也是从低位到高位的 * */ uchar Read_Ds1302_Byte() uchar j,temp; for(j=0;j1; /将 temp 右移一位使最高位变为次高位,最高为为 0 SDA2=1; SCL2=1; SCL2=0; /在 scl2 的一个下降沿数据读出 if(SDA2=1)/如果读出的数据为 1,即在 temp 的最高位写入 1,为 0 的时候则写入 0 temp=temp|0x80; temp=temp|0x00; return temp; /* * 数据写入 DS1302 函数: 在指定地址写入指定数据,在 rst 为低 scl2 为低的情况下将 rst 置高,即允许数据写入 先写入地址 然后写入数据 最后将 rst 拉低结束数据写入 * */ void Write_Ds1302( unsigned char address,unsigned char dat ) RST=0; _nop_();_nop_();_nop_();_nop_();_nop_(); SCL2=0; _nop_();_nop_();_nop_();_nop_();_nop_(); RST=1; _nop_();_nop_();_nop_();_nop_();_nop_(); /开启,写入数据地址,这是本串口 协议的开始,加入延时防止干扰 Write_Ds1302_Byte(address); /发送地址 Write_Ds1302_Byte(dat); /发送数据 RST=0; /恢复 /* * 从指定地址读取数据子函数: 在 rst 为低 scl2 为低的情况下将 rst 置高,即允许数据被读出(注意 加入延时可以防止干扰) 先写入地址 在分八次吧数据一位位读出,在 scl2 的一个下降沿数据被读出,数据位从 0 开始 * */ unsigned char Read_Ds1302 ( unsigned char address ) unsigned char temp1,temp2; RST=0; _nop_();_nop_();_nop_();_nop_();_nop_(); SCL2=0; _nop_();_nop_();_nop_();_nop_();_nop_(); RST=1; _nop_();_nop_();_nop_();_nop_();_nop_(); /开启,写入数据地址,这是本串口协 议的开始,加入延时防止干扰 Write_Ds1302_Byte(address); temp1=Read_Ds1302_Byte(); temp2=temp14; temp2=temp2*10; temp1=temp1 temp1=temp1+temp2;/读出数据的时候要将 BCD 码转换成十进制 RST=0; return (temp1); /返回 /* * 设定时间初值: 在写入之前应当把要写入的数据转换成 BCD 码的形式 每写入一次数据记得都要打开 1302 的写入允许 * */ void Set_RTC(void) /设定 日历 unsigned char i,*p,tmp; for(i=0;i 0 ; i-) DQ = 0 ; / 给脉冲信号 dat = 1 ; DQ = 1 ; / 给脉冲信号 if(DQ) dat |= 0x80 ; Delay1(4) ; return (dat) ; /* 写一个字节 */ /*/ WriteOneChar(uchar dat) unsigned char i = 0 ; for (i = 8 ; i 0 ; i-) DQ = 0 ; DQ = dat Delay1(5) ; DQ = 1 ; dat=1 ; /* 读取温度 */ /*/ Read_Temperature(void) Init_DS18B20() ; WriteOneChar(0xCC) ; / 跳过读序号列号的操作 WriteOneChar(0x44) ; / 启动温度转换 Init_DS18B20() ; WriteOneChar(0xCC) ; /跳过读序号列号的操作 WriteOneChar(0xBE) ; /读取温度寄存器 temp_data0 = ReadOneChar() ; /温度低 8 位 temp_data1 = ReadOneChar() ; /温度高 8 位 /* 设定显示位置 */ /*/ void lcd_pos(uchar pos) write_com (pos | 0x80) ; /数据指针=80+地址变量 /*自定义字符写入 CGRAM */ /* 数据转换与温度显示 */ /*/ Disp_Temperature() display4=temp_data0 display0=ditabdisplay4+0x30 ; /查表得小数位的值 display4=(temp_data0 display3=display4/100+0x30 ; display1=display4%100 ; display2=display1/10+0x30 ; display1=display1%10+0x30 ; if(display3=0x30) /高位为 0,不显示 display3=0x20 ; if(display2=0x30) /次高位为 0,不显示 display2=0x20 ; lcd_pos(0x00) ; write_date(display3) ; /百位数显示 lcd_pos(0x01) ; write_date(display2) ; /十位数显示 lcd_pos(0x02) ; write_date(display1) ; /个位数显示 lcd_pos(0x04) ; write_date(display0) ; /小数位数显示 /* * 主函数部分 * */ void main() uchar m ; uchar j=0; init(); /* Set_RTC();*/ while(1) time_set(); Read_RTC(); if(funtion_flag=0) write_com(0x80+0x0a,1); write_date(0x3a); /加入:号显示 write_com(0x80+0x0d,1); write_date(0x3a); write_com(0x80+0x47,1); write_date(0x2d);/加入-显示 write_com(0x80+0x44,1); write_date(0x2d); shi = l_tmpdisplay2; fen = l_tmpdisplay1; miao = l_tmpdisplay0; nian = l_tmpdisplay5; yue = l_tmpdisplay4; ri = l_tmpdisplay3; xin = l_tmpdisplay6; week_display(); display_scan(8,shi); display_scan(11,fen); display_scan(14,miao); display_scan(0x40+2,nian); display_scan(0x40+5,yue); display_scan(0x40+8,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论