基于PIC16F887单片机的温度、时钟显示以及闹钟功能(2)
PORTD|=R1;NOP();NOP();//送4位 NOP();NOP(); //数据送入有效 LCD_E=0;
LCD_RS=0;NOP();
PORTD&=0XF0; //RD低4位清0 }
//======写1B数R1,FLAG为写命令或数据选择,0为写命令,1为写数据 void LCD_WRITE(char R1,char FLAG) { char R2;
LCD_BUSY(); //检测忙否 R2=R1&0XF0; //低4位清0 R2=R2>>4; //取高4位
LCD_WRITE_4(R2,FLAG);//先写高4位
R2=R1&0X0F; //高4位清0,取低4位 LCD_WRITE_4(R2,FLAG);//再送低4位 DELAY_US(10); //延时100us }
//检测LCD是否忙 void LCD_BUSY() {
unsigned char R1; do{
R1=LCD_READ(); }while(R1&0X80);
}
//发送数R并等待发送完成,收到从机的应答信号208 void IIC_SEND(char R) { SSPBUF=R; //发送
while (RW==1); //在主动模式下,判断发送是否完成 while (SSPIF==0); //等待发送完成
while (ACKSTAT==1); //等待从机发送应答信号 }
//IIC初始化208 void IIC_CSH()
{ TRISC&=0b00011000; //SDA,SCL设置为输入!
SSPCON=0b00101000; //同步串口使能(SSPEN),主控方式 SMP=0; //使能高速模式(400 kHz) 的压摆率控制 SSPADD=4; //主控模式为波特率值,每位时间T=(SSPADD+1)/Tcy=5us
}
//IIC_READ读
char IIC_READ(char addr) {
char iicr; SEN=1;
while(SEN==1); //发送起始位
IIC_SEND(0b11010000); //DS1307在总线上的地址:0b11010000 IIC_SEND(addr); //读取的首地址 RSEN=1;
while(RSEN==1); //发送重新起始位 IIC_SEND(0b11010001); //读数据 SSPIF=0; RCEN=1;
while(SSPIF==0); //等待读完成 iicr=SSPBUF; ACKDT=1; ACKEN=1;
while(ACKEN==1);
PEN=1; //发送停止位 while(PEN==0); return(iicr); }
//IIC_WRITE写
void IIC_WRITE(char addr,char data) {
SEN=1;
while(SEN==1);
IIC_SEND(0b11010000); IIC_SEND(addr); IIC_SEND(data); PEN=1;
while(PEN==1); }
//DS1307初始化时间并显示时间 void DS1307_CSH() {
IIC_WRITE(0,0x45); //00 IIC_WRITE(1,0x00); //00 IIC_WRITE(2,0x10); //00 IIC_WRITE(3,0x06); // IIC_WRITE(4,0x05); //1 IIC_WRITE(5,0x05); //1 IIC_WRITE(6,0x12); //12}
void READ() {
LCD_WRITE(SECOND,COM); shi=IIC_READ(0)>>4; ge=IIC_READ(0)&0x0f;
LCD_WRITE(0x30+shi,DAT); LCD_WRITE(0x30+ge,DAT); LCD_WRITE(MINUTE,COM); shi=IIC_READ(1)>>4; ge=IIC_READ(1)&0x0f;
LCD_WRITE(0x30+shi,DAT); LCD_WRITE(0x30+ge,DAT); LCD_WRITE(HOUR,COM); shi=IIC_READ(2)>>4; ge=IIC_READ(2)&0x0f;
LCD_WRITE(0x30+shi,DAT); LCD_WRITE(0x30+ge,DAT); LCD_WRITE(DAY,COM); shi=IIC_READ(4)>>4; ge=IIC_READ(4)&0x0f;
LCD_WRITE(0x30+shi,DAT); LCD_WRITE(0x30+ge,DAT); DSweek(IIC_READ(3)); LCD_WRITE(MONTH,COM); shi=IIC_READ(5)>>4; ge=IIC_READ(5)&0x0f;
秒 分 时 星期日日 月 年
LCD_WRITE(0x30+shi,DAT); LCD_WRITE(0x30+ge,DAT); LCD_WRITE(YEAR,COM); shi=IIC_READ(6)>>4; ge=IIC_READ(6)&0x0f;
LCD_WRITE(0x30+shi,DAT); LCD_WRITE(0x30+ge,DAT); DELAY(100);
DISP_T(T_READ()); if(A==1) {
LCD_WRITE(WEEK+4,COM); LCD_WRITE('A',DAT); }
if(A!=1) {
LCD_WRITE(WEEK+4,COM); LCD_WRITE(' ',DAT); } }
void DSweek(char num) {
LCD_WRITE(WEEK,COM); switch(num) {
case 1: LCD_WRITE('M',DAT); LCD_WRITE('0',DAT); LCD_WRITE('N',DAT); break;
case 2: LCD_WRITE('T',DAT); LCD_WRITE('U',DAT); LCD_WRITE('E',DAT); break;
case 3: LCD_WRITE('W',DAT); LCD_WRITE('E',DAT); LCD_WRITE('D',DAT); break;
case 4: LCD_WRITE('T',DAT); LCD_WRITE('H',DAT); LCD_WRITE('U',DAT); break;
case 5: LCD_WRITE('F',DAT); LCD_WRITE('R',DAT); LCD_WRITE('T',DAT);
break;
case 6: LCD_WRITE('S',DAT); LCD_WRITE('A',DAT); LCD_WRITE('T',DAT); break;
case 7: LCD_WRITE('S',DAT); LCD_WRITE('U',DAT); LCD_WRITE('N',DAT); break; } }
//**********温度模块************* //读温度值
signed char T_READ() {
signed char R1; SEN=1;
while(SEN==1); //发送起始位
IIC_SEND(0b10010000); //TC74在总线上的地址:0b10010000 IIC_SEND(RTR); RSEN=1;
while(RSEN==1); //发送重新起始位 IIC_SEND(0b10010001); //读数据 RCEN=1;
while(RCEN==1); //等待读完成 R1=SSPBUF;
PEN=1; //发送停止位 while(PEN==0); return(R1); }
//显示温度
void DISP_T(signed char R1) { char R2;
LCD_WRITE(0b00001100,COM); if(R1>=0) BCD(R1); else
{ R2=~R1+1; BCD(R2); }
LCD_WRITE(WENDU,COM); if(R1<0)
LCD_WRITE('-',DAT); if(R1>0)
LCD_WRITE(0x30+SW,DAT); LCD_WRITE(0x30+GW,DAT); LCD_WRITE(0xDF,DAT); LCD_WRITE('C',DAT); }
//闹钟
void ALARM_CLOCK() {
PR2=249;
CCPR2L=0x25;
CCP2CON=0B00001100; T2CON=0b00000101; }
//********按键******* //按键扫描
void KEYSCAN() {
if(S1==0) {
DELAY(20); if(S1==0)
while(!S1); {
num1++;
switch(num1) {
case 1: num2=0; //调闹钟,先读最初值为0
m=A_m; f=A_f; s=A_s; x=A_x;
LCD_CLR(); DISL5();
LCD_WRITE(SECOND,COM); LCD_WRITE(0x30+m/16,DAT); LCD_WRITE(0x30+m%16,DAT); LCD_WRITE(MINUTE,COM); LCD_WRITE(0x30+f/16,DAT); LCD_WRITE(0x30+f%16,DAT); LCD_WRITE(':',DAT); LCD_WRITE(HOUR,COM);
LCD_WRITE(0x30+s/16,DAT);
LCD_WRITE(0x30+s%16,DAT); …… 此处隐藏:3125字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [教学研究]2012西拉科学校团少队工作总结
- [教学研究]建筑工程公司档案管理制度
- [教学研究]小学数学人教版六年级上册圆的周长和面
- [教学研究]ERP电子行业解决方案
- [教学研究]钢支撑租赁合同范本
- [教学研究]预应力自动张拉系统用户手册Rev1.0
- [教学研究]MOOC课程:金瓶梅人物写真(每章节课后
- [教学研究]追加被执行人申请书(适用追加夫妻关系)
- [教学研究]2014年驾考科目一考试最新题库766
- [教学研究]2013-2014学年度九年级物理第15章《电
- [教学研究]新版中日交流标准日本语初级下26课-客
- [教学研究]小导管注浆施工作业指导书
- [教学研究]一般财务人员能力及人岗匹配评估表
- [教学研究]打1.2.页 小学一年级暑假口算100以内加
- [教学研究]学习贯彻《中国共产党党和国家机关基层
- [教学研究]2012年呼和浩特市中考试卷_35412
- [教学研究]最简易的电线电缆购销合同范本
- [教学研究]如何开展安全标准化建设
- [教学研究]工作分析与人岗匹配
- [教学研究]2016-2017学年高中历史第七单元现代中
- 山东省义务教育必修地方课程小学三年级
- 台湾宜兰大学互联网交换技术课程 01_In
- 思想品德:第一课《我知我家》课件(人
- SAR合成孔径雷达图像点目标仿真报告(附
- 利辛县“十三五”规划研究报告
- 2015-2020年中国手机APP行业市场发展趋
- 广告策略、创意表现、媒体方案
- 企业如何申请专利的的几点思考
- 《中国教育简史》网上作业
- 高中历史第二单元西方人文精神的起源及
- 年终晚会必备_精彩的主持稿_精心整理_
- 信息工程专业自荐书
- 2019高考历史人教版一轮练习:第十二单
- JAVA俱乐部管理系统软件需求规格说明书
- 2016-2021年中国小型板料折弯机行业市
- (人教新课标)六上_比的基本性质课件PPT
- 辽宁省公务员考试网申论备考技巧:名言
- 神经阻滞麻醉知情同意书
- 施工企业信息填报、审核和发布的相关事
- 初一(七年级)英语完形填空100篇




