12864液晶电子钟 具有按键可调、闹钟、温度显示
更新时间:2023-09-07 04:55:01 阅读量: 教育文库 文档下载
- 1286代表什么意思推荐度:
- 相关推荐
理解才是最主要
程序已全部通过硬件测试,请放心使用。(没有使用到DS1302)
/************12864时钟显示函数*************/
/******实现时间走动、按键控制、蜂鸣器闹铃、温度显示******/
#include<reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
/******************** 功能:定义液晶12864控制端接口
*********************/
sbit rs=P2^6;
// 注意: rw 控制端始终为低电平,直接在硬件上接低电平
sbit en=P2^7;
sbit wd=P2^0; //温度传感器信号线
/******************** 功能:定义蜂鸣器、按键 接口
*********************/
sbit beet=P2^2; //蜂鸣器定义
sbit key1=P1^0; //功能选择
sbit key2=P1^1; //至加
sbit key3=P1^2; //至减
sbit key4=P1^3; //北京时间与闹钟时间画面切换
/******************** 功能:定义数据初始值
******************************/
char hour=23,minute=59,second=58,count=0;
char shi=0,fen=0,miao=0,hm;
int years=2012;
char month=12,day=30,mm=0,cc=7;
uint temp;
float f_temp;
/******************** 功能:定义数组字符串 *********************/
uchar code table1[]={" 幸福牌电子钟 "};
uchar code table2[]={"温馨提示:00.0℃"};
/******************** 功能:延时函数 ***************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/******************* 功能:蜂鸣器响应 ***********************/
void fengmingqi()
{
beet=0;delay(1);beet=1;delay(1);
}
理解才是最主要
/******************** 功能:液晶12864读写数据 ******************/
void xieling_shu(uchar aa,uchar bb)
{
if(aa==1){rs=0;}
if(aa==0){rs=1;}
P0=bb;delay(1);
en=1; delay(1);
en=0; delay(1);
}
/******************** 功能:液晶12864写入地址 ******************/
void xieludizhi(uchar x, uchar y)
{
switch(x)
{
case 1: xieling_shu(1,0x80 + y ); return;//return 返回的意思
case 2: xieling_shu(1,0x90 + y ); return;
case 3: xieling_shu(1,0x88 + y ); return;
case 4: xieling_shu(1,0x98 + y ); return;
}
}
/******************** 功能:液晶12864写入字符串 *****************/
void xiezifuchuan(uchar *dd)
{
while(*dd != '\0')
{
xieling_shu(0,*dd++ );
}
}
/******************** 功能:液晶12864清屏函数 *********************/
void qingping()
{
xieling_shu(1,0x01); //清屏
xieling_shu(1,0x01); //清屏
xieling_shu(1,0x01); //清屏
delay(20);
}
/******************** 功能:液晶12864初始化指令操作
******************/
void init_12864()
{
xieling_shu(1,0x30); //基本指令操作
xieling_shu(1,0x30); //基本指令操作
xieling_shu(1,0x0C); //0x0c: 无光标, OXOF: 光标反白显示
xieling_shu(1,0x01); //清屏
理解才是最主要
xieling_shu(1,0x06);
}
/******************** 功能:液晶12864初始化字串显示
******************/
void init_zifu()
{
xieludizhi(1,0);xiezifuchuan(" 欢迎使用 "); delay(1); xieludizhi(2,0);xiezifuchuan(" 幸福牌电子钟 "); delay(1); xieludizhi(3,0);xiezifuchuan(" 订购热线 "); delay(1); xieludizhi(4,0);xiezifuchuan("Phone:0777-66914"); delay(9534);
qingping();
xieludizhi(1,0);xiezifuchuan(table1); delay(1);
xieludizhi(4,0);xiezifuchuan(table2); delay(1);
xieludizhi(3,5);xiezifuchuan("星期");
xieludizhi(2,2);xiezifuchuan("年 月 日");
}
/******************* 功能:时间、年月日 显示函数 ********************/
void display()
{
xieludizhi(3,0); // 显示 时 分 秒
xieling_shu(0,0x30+hour/10);
xieling_shu(0,0x30+hour%10);
xieling_shu(0,':');
xieling_shu(0,0x30+minute/10);
xieling_shu(0,0x30+minute%10);
xieling_shu(0,':');
xieling_shu(0,0x30+second/10);
xieling_shu(0,0x30+second%10);
xieludizhi(2,0); // 显示 年
xieling_shu(0,0x30+years/1000);
xieling_shu(0,0x30+years%1000/100);
xieling_shu(0,0x30+years%100/10);
xieling_shu(0,0x30+years%10);
xieludizhi(2,3); // 显示 月
xieling_shu(0,0x30+month/10);
xieling_shu(0,0x30+month%10);
xieludizhi(2,5); // 显示 日
xieling_shu(0,0x30+day/10);
xieling_shu(0,0x30+day%10);
}
/******************* 功能:闹钟(时间、年月日) 显示函数
********************/
void display1()
{
理解才是最主要
xieludizhi(3,0); // 显示 时 分 秒
xieling_shu(0,0x30+shi/10);
xieling_shu(0,0x30+shi%10);
xieling_shu(0,':');
xieling_shu(0,0x30+fen/10);
xieling_shu(0,0x30+fen%10);
xieling_shu(0,':');
xieling_shu(0,0x30+miao/10);
xieling_shu(0,0x30+miao%10);
xieludizhi(2,0); // 显示 年
xieling_shu(0,0x30+years/1000);
xieling_shu(0,0x30+years%1000/100);
xieling_shu(0,0x30+years%100/10);
xieling_shu(0,0x30+years%10);
xieludizhi(2,3); // 显示 月
xieling_shu(0,0x30+month/10);
xieling_shu(0,0x30+month%10);
xieludizhi(2,5); // 显示 日
xieling_shu(0,0x30+day/10);
xieling_shu(0,0x30+day%10);
}
/******************* 功能:星期函数 *********************************/
void xingqi()
{
switch(cc)
{
case 1: xieludizhi(3,7); xiezifuchuan("一"); return;
case 2: xieludizhi(3,7); xiezifuchuan("二"); return;
case 3: xieludizhi(3,7); xiezifuchuan("叁"); return;
case 4: xieludizhi(3,7); xiezifuchuan("四"); return;
case 5: xieludizhi(3,7); xiezifuchuan("五"); return;
case 6: xieludizhi(3,7); xiezifuchuan("六"); return;
case 7: xieludizhi(3,7); xiezifuchuan("日"); return;
}
}
/******************* 功能:按键程序 *******************/
void anjian()
{
if(key4==0){delay(1);hm=~hm;while(key4==0);}
/******************* 功能:key1按键选择功能 *******************/
if(key1==0)
{
delay(1);
mm++;if(hm!=0){if(mm>=4)mm=0;}
理解才是最主要
if(mm==1){xieludizhi(3,3);xieling_shu(0,0x5f);}
if(mm==2){TR0=1;xieludizhi(3,2);xieling_shu(0,0x5f);}
if(mm==3){xieludizhi(3,0);xieling_shu(0,0x5f);}
if(mm==4){xieludizhi(2,5);xieling_shu(0,0x5f);}
if(mm==5){xieludizhi(2,3);xieling_shu(0,0x5f);}
if(mm==6){xieludizhi(2,1);xieling_shu(0,0x5f);}
if(mm==7){xieludizhi(3,7);xieling_shu(0,0x5f);}
if(mm==8){xieludizhi(2,7);xieling_shu(0,0x02);}
if(mm>=9){xieludizhi(2,7);xieling_shu(0,0x20);mm=0;} // mm=0;跳出调整
时间
while(key1==0);
}
/******************* 功能:key2按键 加减 功能 *******************/
if(mm==1&&key2==0) //秒加1
{
if(hm==0){TR0=0;delay(1);if(key2==0){second++;if(second>=60){second=0;}}}
if(hm!=0){delay(1);if(key2==0){miao++;if(miao>=60){miao=0;}}}
while(key2==0);
}
if(mm==1&&key3==0) //秒减1
{
if(hm==0){TR0=0;delay(1);if(key3==0){second--;if(second<=-1){second=59;}}}
if(hm!=0){delay(1);if(key3==0){miao--;if(miao<=-1){miao=59;}}}
while(key3==0);
}
if(mm==2&&key2==0) //分加1
{
if(hm==0){delay(1);if(key2==0){minute++;if(minute>=60){minute=0;}}}
if(hm!=0){delay(1);if(key2==0){fen++;if(fen>=60){fen=0;}}}
while(key2==0);
}
if(mm==2&&key3==0) //分减1
{
if(hm==0){delay(1);if(key3==0){minute--;if(minute<=-1){minute=59;}}}
if(hm!=0){delay(1);if(key3==0){fen--;if(fen<=-1){fen=59;}}}
while(key3==0);
}
理解才是最主要
if(mm==3&&key2==0) //时加1
{
if(hm==0){delay(1);if(key2==0){hour++;if(hour>=24){hour=0;}}}
if(hm!=0){delay(1);if(key2==0){shi++;if(shi>=24){shi=0;}}}
while(key2==0);
}
if(mm==3&&key3==0) //时减1
{
if(hm==0){delay(1);if(key3==0){hour--;if(hour<=-1){hour=23;}}}
if(hm!=0){delay(1);if(key3==0){shi--;if(shi<=-1){shi=23;}}}
while(key3==0);
}
if(mm==4&&key2==0) //日加1
{
delay(1);
if(key2==0)
{
day++;
if(day>=31){day=1;}
}
while(key2==0);
}
if(mm==4&&key3==0) //日减1
{
delay(1);
if(key3==0)
{
day--;
if(day<=0){day=31;}
}
while(key3==0);
}
if(mm==5&&key2==0) //月加1
{
delay(1);
if(key2==0)
{
month++;
if(month>=13){month=1;}
}
理解才是最主要
while(key2==0);
}
if(mm==5&&key3==0) //月减1
{
delay(1);
if(key3==0)
{
month--;
if(month<=0){month=12;}
}
while(key3==0);
}
if(mm==6&&key2==0) //年加1
{
delay(1);
if(key2==0){years++;}// 不设置 年限
while(key2==0);
}
if(mm==6&&key3==0) //年减1
{
delay(1);
if(key3==0){years--;}
while(key3==0);
}
if(mm==7&&key2==0) //星期加1
{
delay(1);
if(key2==0)
{
cc++;
if(cc>=8){cc=1;}
}
while(key2==0);
}
if(mm==7&&key3==0) //星期减1
{
delay(1);
if(key3==0)
{
cc--;
if(cc==0){cc=7;}
理解才是最主要
}
while(key3==0);
}
}
/********************************************************************
*******************
******************************* 功能:18B20 所有函数
************************************/
/******************* 18B20复位,初始化函数
**************************/
void dsreset(void)
{
uint i;
wd=0;
i=103;
while(i>0)i--;
wd=1;
i=4;
while(i>0)i--;
}
/******************* 18B20 读1位 函数 **************************/
bit tempreadbit(void)
{
uint i;
bit dat;
wd=0;i++; //i++ 起延时作用
wd=1;i++;i++;
dat=wd;
i=8;while(i>0)i--;
return (dat);
}
/******************* 18B20 读1个字节 函数
**************************/
uchar tempread(void)
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tempreadbit();
dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在
DAT里
}
return(dat);
理解才是最主要
}
/******************* 18B20 写一个字节数据 函数
**************************/
void tempwritebyte(uchar dat)
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //写 1
{
wd=0;
i++;i++;
wd=1;
i=8;while(i>0)i--;
}
else
{
wd=0; //写 0
i=8;while(i>0)i--;
wd=1;
i++;i++;
}
}
}
/******************* 18B20 开始获取温度并转换 函数
**************************/
void tempchange(void)
{
dsreset();
delay(1);
tempwritebyte(0xcc); // 写跳过读ROM指令
tempwritebyte(0x44); // 写温度转换指令
}
/******************* 18B20 读取寄存器中存储的温度数据 函数
**************************/
uint get_temp()
{
uchar a,b;
dsreset();
delay(1);
理解才是最主要
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a=tempread(); //读低8位
b=tempread(); //读高8位
temp=b;
temp<<=8; //两个字节组合为1个字
temp=temp|a;
f_temp=temp*0.0625; //温度在寄存器中为12位 分辨率位0.0625° temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍
五入
f_temp=f_temp+0.05;
return temp; //temp是整型
}
/******************* 18B20 发送数据 函数 **************************/
void comm(char *parr)
{
do
{
SBUF = *parr++; //发送数据
while(!TI); //等待发送完成标志为1
TI =0; //标志清零
}while(*parr); //保持循环直到字符为'\0'
}
/************************ 功能:主函数 ****************************/
void main()
{ uchar buff[4];
TMOD=0x01; // 设置T0为工作方式 1
EA=1;
ET0=1;
TR0=1; //开启T0中断
TH0=-50000/256;
TL0=-50000%256;
init_12864();
init_zifu();
hm=0;
while(1)
{ if(count>5&&count<18)
{
tempchange(); //开始获取温度
get_temp(); //读取寄存温度
sprintf(buff,"%f",f_temp);
comm(buff);
xieludizhi(4,5);xieling_shu(0,0x30+ temp/100);xieling_shu(0,0x30+
temp%100/10);
理解才是最主要
xieling_shu(0,0x2e);xieling_shu(0,0x30+temp%100%10);
}
if(hm==0)display(); // 如果 hm=0 显示北京时间,否则显示闹钟时间
else display1();
anjian(); // 按键判断
xingqi(); // 显示星期
if(minute==59&&second==59){fengmingqi();} // 整点 报时
if(shi==hour&&fen==minute&&miao>=second&&miao<=second+3){fengmingq
i();}// 闹钟
}
}
/************************ 功能:中断函数 **************************/
void time() interrupt 1
{
TH0=-50000/256;
TL0=-50000%256;
count++;
if(count==20)
{
count=0;
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
{
hour=0;
day++;
cc++;
if(cc==8) cc=1;
if(day==31)
{
day=1;
month++;
if(month==13)
理解才是最主要
{ month=1; years++;
} }
}
}
}
}
}
正在阅读:
12864液晶电子钟 具有按键可调、闹钟、温度显示09-07
保险学测试题(1)10-10
电调天线讲义_(卜安涛)06-07
《换了人间》观后感12-11
窗外有光作文600字06-21
市场营销文献综述11-03
博斯腾湖湿地保护项目(生物治碱项目)可行性研究报告05-07
吉林省湿地资源调查实施细则 - 图文09-17
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 可调
- 电子钟
- 闹钟
- 按键
- 液晶
- 温度
- 具有
- 显示
- 12864
- 中国邮政储蓄2014校园招聘大礼包_中国邮政储蓄2014校园招聘
- 供应商审核报告模板- 内容
- 客房服务员初级理论知识试卷(附答案)
- 国家行政机关公文格式
- 基于PLC的物料分拣系统设计文献综述
- 商铺交接确认书
- UML实验报告-网上书店
- MFC5103A工业企业电源快速切换装置说明书V2.00
- 【最新】民事判决书(一审判决用)-范文模板 (2页)
- 招标文件用招标文件制作工具的不提供注招标文件中的合同部
- 第2章(EIQ分析)
- Unit 7 The Monster习题答案综合教程四
- 政治经济学批判 导言研读中的思考
- 用心做事 用爱做人
- ANSYS地震分析实例
- 车间粉尘清扫记录表
- final cut pro 7快捷键大全
- 可用:租赁房屋合同,交接清单,收据
- 邢汾高速公路L12标T梁预制场冬季施工方案
- 黄岩中学高三数学综合练习(2)