1602、18b20、ds1302电子时钟(2)
//LCD写数据
delay(1); e=0; }
void delay(uchar z)
//延时函数
介绍了1602/1602/18b20以c语言为基础的编程方法。
{
uchar x,y; for(x=0;x<z;x++) for(y=0;y<110;y++); }
/***************END***********END******************************/
3.2.3 DS1302.h程序文件:
/***************时钟芯片相关程序*************************/ sbit rst=P2^5; //时钟芯片复位端 sbit sck=P2^6; // 时钟信号
sbit io=P2^7; // 时钟输入/输出端
void Write_Ds1302_Byte(uchar temp);//写入一个字节 void Write_Ds1302(uchar address,uchar dat);//写入 uchar Read_Ds1302 ( uchar address ); //读取时间 void Read_RTC(void);
//读取日历
void Set_RTC(uchar *p); //设定日历 void time_date(); //时间数据处理 void display(uchar *lp,uchar lc); //显示时间 uchar code table0[]="0123456789-";
uchar code table1[]="MONTUEWEDTHUFRISATSUN";
uchar code table2[]="0123456789:";
code uchar write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //写入时钟芯片的地址,顺序同上
code uchar read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; //以上是读出数据的地址
uchar code l_tmpdate1[7]={0x50,0x30,0x15,0x12,0x06,0x04,0x09};
/*初始化时钟芯片,依次是秒分时日月星期年,用16进制的BCD码表示 */ uchar l_tmpdate[7],l_tmpdisplay[18],SetTime[18],ring_time[7]; void Write_Ds1302_Byte(uchar temp) //写入一字节数据 {
uchar i;
for (i=0;i<8;i++) //循环8次写入数据 ,上升沿写入 {
sck=0;
io=temp&0x01; //每次传输低字节 temp>>=1; //右移一位 sck=1; }
}
void Write_Ds1302(uchar address,uchar dat)//写入 {
rst=0; delay(1);
介绍了1602/1602/18b20以c语言为基础的编程方法。
sck=0;
delay(1); rst=1;
delay(1); //启动
Write_Ds1302_Byte(address);
Write_Ds1302_Byte(dat); rst=0; //恢复
//发送地址 //发送数据
}
uchar Read_Ds1302 (uchar address) {
uchar i,time=0x00; rst=0; delay(1); sck=0; delay(1); rst=1;
//读取时间
delay(1);
Write_Ds1302_Byte(address); for (i=0;i<8;i++) //循环8次 读取数据 {
//每次传输低字节 //时钟下降沿读入数据 //右移一位
if(io)
time|=0x80; sck=1; time>>=1; sck=0;
} rst=0; delay(1); rst=0; sck=0; delay(1); sck=1; delay(1); io=0; delay(1); io=1; delay(1);
//以下为DS1302复位的稳定时间
return (time); }
void Read_RTC() {
//读取 日历
uchar i,*p;
p=read_rtc_address; //地址传递 for(i=0;i<7;i++) //分7次读取 年月日时分秒星期
介绍了1602/1602/18b20以c语言为基础的编程方法。
l_tmpdate[i]=Read_Ds1302(*p); p++; } }
void Set_RTC(uchar *P1302) //设定 日历 {
uchar i,*p;
Write_Ds1302(0x8E,0X00); //允许写入
p=write_rtc_address; for(i=0;i<7;i++) {
//传地址
//7次写入 年月日时分秒星期
Write_Ds1302(*p,P1302[i]);
p++; }
Write_Ds1302(0x8E,0x80); //禁止写入
//时间数据处理
}
void time_date() {
Read_RTC(); l_tmpdisplay[0]=l_tmpdate[2]/16;//时
l_tmpdisplay[1]=l_tmpdate[2]&0x0f; l_tmpdisplay[2]=10; //加入":" l_tmpdisplay[3]=l_tmpdate[1]/16;//分 l_tmpdisplay[4]=l_tmpdate[1]&0x0f; l_tmpdisplay[5]=10;
l_tmpdisplay[6]=l_tmpdate[0]/16;//秒 l_tmpdisplay[7]=l_tmpdate[0]&0x0f;
l_tmpdisplay[8]=2; //显示2008的2 l_tmpdisplay[9]=0; //显示2008的第一个0 l_tmpdisplay[10]=l_tmpdate[6]/16; //年 l_tmpdisplay[11]=l_tmpdate[6]&0x0f; l_tmpdisplay[12]=10; //加入“-” l_tmpdisplay[13]=l_tmpdate[4]/16;//月 l_tmpdisplay[14]=l_tmpdate[4]&0x0f; l_tmpdisplay[15]=10;
l_tmpdisplay[16]=l_tmpdate[3]/16;//日 l_tmpdisplay[17]=l_tmpdate[3]&0x0f;
}
void display(uchar *lp,uchar lc) //显示时间 {
unsigned char i; //定义变量
介绍了1602/1602/18b20以c语言为基础的编程方法。
write_com(0x82); //液晶第一行显示时间和星期 for(i=0;i<lc;i++) {
write_date(table2[lp[i]]); delay(1); }
write_com(0x80+0x0b);
switch(l_tmpdate[5]) //用英文缩写显示星期 {
case 0: write_date(table1[0]); write_date(table1[1]);
write_date(table1[2]); break;
case 1: write_date(table1[3]); write_date(table1[4]); write_date(table1[5]); break;
case 2: write_date(table1[6]);
write_date(table1[7]); write_date(table1[8]);
break;
case 3: write_date(table1[9]); write_date(table1[10]); write_date(table1[11]);
break;
case 4: write_date(table1[12]); write_date(table1[13]); write_date(table1[14]); break;
case 5: write_date(table1[15]);
write_date(table1[16]); write_date(table1[17]);
break;
case 6: write_date(table1[18]);
write_date(table1[19]); write_date(table1[20]); break;
}
write_com(0x80+0x40); //第二行显示年 for(i=8;i<lc+10;i++) {
write_date(table0[lp[i]]);
介绍了1602/1602/18b20以c语言为基础的编程方法。
delay(1);
} }
/***************END***********END******************************/
3.2.4 DS18B20.h程序文件:
/***************温度传感器相关程序******************/ sbit ds=P2^3; //温度传感器信号线 sbit led=P2^4;
//小灯位定义
// 整型温度值
uchar temperature; uint temp,limit=800;
float f_temp; //浮点型温度值 uint get_temp(); //获得温度 void tempchange(void); void dsreset(void); bit tempreadbit(void);
//转换温度
//DS18B20复位 //读DS118B20一位
uchar tempreadbyte(void); //读DS18B20一个字节
void tempwritebyte(uchar dat); //写入DS18B20一个字节 void deal(); //温度处理函数 void Temp_Display();
//温度显示
uchar code table[]="0123456789.C "; void dsreset(void) //DS18B20复位,初始化函数 {
uint i; ds=0; i=103; …… 此处隐藏:4023字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [外语考试]管理学 第13章 沟通
- [外语考试]07、中高端客户销售流程--分类、筛选讲
- [外语考试]2015-2020年中国高筋饺子粉市场发展现
- [外语考试]“十三五”重点项目-汽车燃油表生产建
- [外语考试]雅培奶粉培乐系列适用年龄及特点
- [外语考试]九三学社入社申请人调查问卷
- [外语考试]等级薪酬体系职等职级表
- [外语考试]货物买卖合同纠纷起诉状(范本一)
- [外语考试]青海省实施消防法办法
- [外语考试]公交车语音自动报站系统的设计第3稿11
- [外语考试]logistic回归模型在ROC分析中的应用
- [外语考试]2017-2021年中国隔膜泵行业发展研究与
- [外语考试]神经内科下半年专科考试及答案
- [外语考试]园林景观设计规范标准
- [外语考试]2018八年级语文下册第一单元4合欢树习
- [外语考试]分布式发电及微网运行控制技术应用
- [外语考试]三人行历史学笔记:中世纪人文主义思想
- [外语考试]2010届高考复习5年高考3年联考精品历史
- [外语考试]挖掘机驾驶员安全生产责任书
- [外语考试]某211高校MBA硕士毕业论文开题报告(范
- 用三层交换机实现大中型企业VLAN方案
- 斯格配套系种猪饲养管理
- 涂层测厚仪厂家直销
- 研究生学校排行榜
- 鄱阳湖湿地景观格局变化及其驱动力分析
- 医学基础知识试题库
- 2010山西省高考历年语文试卷精选考试技
- 脉冲宽度法测量电容
- 谈高职院校ESP教师的角色调整问题
- 低压配电网电力线载波通信相关技术研究
- 余额宝和城市商业银行的转型研究
- 篮球行进间运球教案
- 气候突变的定义和检测方法
- 财经大学基坑开挖应急预案
- 高大支模架培训演示
- 一种改进的稳健自适应波束形成算法
- 2-3-鼎视通核心人员薪酬股权激励管理手
- 我国电阻焊设备和工艺的应用现状与发展
- MTK手机基本功能覆盖测试案例
- 七年级地理教学课件上册第四章第一节




