问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在网上看到您的设计成果-单片机+LCD1602+DS18B20+DS1302电子钟,同志我想看看您的原理图和程序,谢谢

发布网友 发布时间:2022-04-26 09:20

我来回答

2个回答

热心网友 时间:2023-10-09 05:11

/*============================================================
1602液晶显示DS1302时钟
=============================================================*/

#include <AT89x51.h>
#include <string.h>
#include < intrins.h >
#define delayNOP() ; {_nop_() ;_nop_() ;_nop_() ;_nop_() ;} ;
#define LCM_RW P2_1 //定义引脚
#define LCM_RS P2_0
#define LCM_E P2_2
#define LCM_Data P0
#define Busy 0x80 //用于检测LCM状态字中的Busy标识
#define uchar unsigned char
sbit T_CLK=P1^0;
sbit T_IO =P1^1;
sbit T_RST=P1^2;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
sbit LED=P1^4; //背光灯输出 (因本实验板无此功能 所以此项功能用P1.4LED灯作为指示)
sbit system=P3^2; //模式 对应实验板K1按键
sbit TimerUp=P3^3; //时间减 对应实验板K2按键
sbit TimerDown=P3^4; //时间加 对应实验板K3按键
sbit BEEP=P3^6; //蜂鸣器
void Set(uchar,uchar); //根据选择调整相应项目
void RTInputByte(uchar); //输入 1Byte */
uchar RTOutputByte(void); //输出 1Byte */
void W1302(uchar, uchar); //向DS1302写入一个字节
uchar R1302(uchar); //从DS1302读出一个字节
void Set1302(uchar * ); //设置时间
void KeySound(); //按键音
void ClockSound(); //闹铃蜂鸣声
uchar id,msec,model,LedTime,d;
bit a,b; //闪烁标志位
uchar inittime[7]={0x50,0x59,0x23,0x24,0x07,0x05,0x09};//初始化后设置为:09年7月24日星期5 23点59分50秒
void Out_LCM(void); //显示屏幕
void model0(void); //显示输出
void model1(void);
void model2(void);
void model3(void);
void model4(void);
void model5(void);
void model6(void);
void id_case1_key();//项目调整
void Modset(); //模式键处理
void WriteDataLCM(uchar WDLCM);
void WriteCommandLCM(uchar WCLCM,BuysC);
uchar ReadStatusLCM(void);
void LCMInit(void);
void OutputInformation(uchar X, uchar Y, uchar DData);
void DisplayListChar(uchar X, uchar Y, uchar code *DData);

void Delay5Ms(void);
void Delay400Ms(void);
void systemsetup(void); //进入系统设置
uchar code systemp[]={"System.setup"}; //字符串输出(系统设定)
uchar code TIMER[]={"Time"}; //字符串输出(时间)
uchar code DATE[]={"Date"}; //字符串输出(日期)
uchar code alarmclock[]={"Clock"}; //字符串输出(闹铃)
uchar code lamp[]={"Lamp"}; //字符串输出(背光灯)
uchar code reset[]={"Reset"}; //字符串输出(时间归零)
uchar code exit[]={"Exit"}; //字符串输出(退出)
uchar code set[]={"Set"};//字符串输出(设置)
uchar code sec[]={"sec"}; //字符串输出(秒)
uchar code ClockSet[]={"ClockSet"};//字符串输出(闹铃设置)
uchar code ClockOn[]={"ON"}; //字符串输出(ON)
uchar code ClockOff[]={"OFF"}; //字符串输出(OFF)

void timesetup(void); //时间设置
void datesetup(void); //日期设置
void alarmclockset(void); //闹铃设置
void lampsetup(void); //背光灯设置
void timereset(void); //时间清零

/*******************************************************************/
void delay1(int ms)
{
unsigned char y ;
while(ms--)
{
for(y = 0 ; y<250 ; y++)
{
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
}
}
}
/* 延时子程序*/

void delay11(uchar x)
{ uchar j;
while((x--)!=0)
{ for(j=0;j<125;j++)
{;}
}
}
//--------------------------------------------------
//--------------------------------------------------
void delay0(uchar x) //x*0.14MS
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++) {}
}
}

/*********************************************************/
void beep()//蜂鸣器响一声函数
{
unsigned char i;
for (i=0;i<100;i++)
{
delay0(4);
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //关闭蜂鸣器
delay11(250); //延时
}
void main(void)
{
LED=0; //打开LED ,低电平有效,外接9012驱动
Delay400Ms(); //启动等待,等LCM讲入工作状态
Delay400Ms();
LCMInit(); //LCM初始化
TMOD=0x01;//16位定时
TH0=0x3c;//50ms
TL0=0xb0;
EA=1;
TR0=1;
ET0=1;

while(1)
{
if(TimerDown==0) //左移键按下后把背光灯打开
{Delay5Ms();
if(TimerDown==0)
{KeySound(); //蜂鸣声
LED=0; //打开背光灯
LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16;} //取出背光灯时间并转换为十进制数
}
b=1; //模式键是否动作标志。为1时不动作,为0时动作。
Modset(); //调用模式键处理程序判断按键是否按下。
if(b==0)
{
KeySound(); //蜂鸣声
LED=0; //打开背光灯
systemsetup(); //进入系统设置模式
LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16; //取出背光灯时间并转换为十进制数
}
if((LED==0)&&LedTime==0) //延时间是否到
LED=1; //关闭背光灯
if(R1302(0xc3)==1) //闹铃是否打开,0xc3为读闹铃寄存器地址。
{if((R1302(0x85)==R1302(0xc5))&&(R1302(0x83)==R1302(0xc7))) //判断闹铃时间是否到,
ClockSound(); //发出闹铃蜂鸣声,无按键动作蜂鸣一分钟。
}
model0(); //输出显示屏幕
}
}

void KeySound() //按键音
{
beep(); //开蜂鸣声
}
void ClockSound() //闹铃蜂鸣声
{
if(a==0)
{
beep();
}
}

void Modset() //模式键处理
{ if(system==0)
{
Delay5Ms();
if(system==0)
{while(system==0);
KeySound(); //蜂鸣声
a=0;msec=0;b=0; //a、msec为闪烁标志,按键有动作时清零,不闪烁。
} //b为模式键确认动作。其它程判断b是否为零时来确定模式键是否动作。
}
}

void systemsetup(void) //系统设置
{
model=1;
while(model!=0)
{
Out_LCM();
if (TimerUp==0) //设置项目左移
{Delay5Ms();
if(TimerUp==0)
{a=0;msec=0;KeySound();//蜂鸣声
if(model--==1) //6种系统设置项目
model=6;
}
while(TimerUp==0);
}
if (TimerDown==0) //设置项目右移
{
Delay5Ms();
if(TimerDown==0)
{a=0;msec=0;KeySound();//蜂鸣声
if(model++==6)
model=1;
}
while(TimerDown==0);
}
b=1;//模式键是否动作标志。为1时不动作,为0时动作。
Modset();//调用模式键处理程序判断按键是否按下。
if(b==0)
{KeySound(); //蜂鸣声
switch(model) //进入进个项目设置
{
case 1:
timesetup(); break; //时间设置
case 2:
datesetup();break; //日期设置
case 3:
alarmclockset();break;//闹铃设置
case 4:
lampsetup();break; //背光灯设置
case 5:
timereset();break; //时间清零
case 6:
model=0;break; //退出系统设置
}
}
}
}

void timesetup() //时间调整
{
id=6;
while(model==1)//model为1时进入时间调整
{
b=1;
Modset();
if(b==0)
{KeySound(); //蜂鸣声
if(id++==9) //6..9为时分秒调。 .
id=6;
}
id_case1_key();//调用按键处理
Out_LCM(); //显示输出
}
}
void datesetup() //对日期进行调整
{
id=1;
while(model==2)//model为2时进入日期调整
{b=1;
Modset();//模式键是否动作
if(b==0)
{KeySound(); //蜂鸣声
if(id++==5) //1..5为年月日星期 exit
id=1;
}
id_case1_key(); //日期调整
Out_LCM(); //显示输出
}
}
void alarmclockset(void) //闹铃调整
{id=12;
while(model==3) //进入闹铃设置
{b=1;
Modset(); //模式键是否动作
if(b==0)
{KeySound(); //蜂鸣声
if(R1302(0xc3)%16==0)
{id=0;model++;} //0xc2为闹铃开关寄存器。当为关时按下模式键时将退出闹铃设置,当开时进入闹铃时间设置

else if(id++==15) //12..15为闹铃开关和时间设置 exit
id=12;
}
id_case1_key(); //调整
Out_LCM(); //显示输出
}
}

void lampsetup(void) //背光灯时间设置
{id=10;//背光灯存储空间DS1302(0xc0)
while(model==4)//model为3时进入背光灯调整
{b=1;
Modset();//模式键是否动作
if(b==0)
{KeySound(); //蜂鸣声
if(id++==11) //10为背光灯 exit
id=10;
}
id_case1_key();
Out_LCM(); //显示输出
}

}
void timereset() //时间清零
{
Set1302(inittime); //清时间
W1302(0x90,0xa5); //打开充电二级管 一个二级管串联一个2K电阻
model++;
}
//对相应的项目进行加、减调整。
void id_case1_key()//按键处理
{
if (TimerUp==0) //增加
{
Delay5Ms();
if(TimerUp==0)
{a=0;msec=0;KeySound();//蜂鸣声
if((id==9)||(id==5)||(id==11)||(id==15))//当ID为9、5时按下加、减键将退出调整
{ model++; //退出时间、日期设置
id=0;
}
else
Set(id,1);
}
while(TimerUp==0);
}
if (TimerDown==0) //减少
{
Delay5Ms();
if(TimerDown==0)
{a=0;msec=0;KeySound(); //蜂鸣声
if((id==9)||(id==5)||(id==11)||(id==15)) //当ID为9、5时按下加、减键将退出调整
{ model++; //退出时间、日期设置
id=0;
}
else
Set(id,0); //调用DS1302写入函数
}
while(TimerDown==0);
}
}

void timer_1(void) interrupt 1 //中断入口,闪烁
{
TH0=0x3c; //50ms定时
TL0=0xb0;
if(msec++==10) //500ms
{msec=0;a=~a; //闪烁标志反转
if(a==0) //1秒后背光时间减一秒。
LedTime--;
}
}

//根据选择调整相应项目并写入DS1302
void Set(uchar sel,uchar sel_1)
{
uchar address,item;
uchar max,min;
if(sel==1) {address=0x8c; max=99;min=0;} //年
if(sel==2) {address=0x88; max=12;min=1;} //月
if(sel==3) {address=0x86; max=31;min=1;} //日
if(sel==4) {address=0x8a; max=7; min=1;} //星期
if(sel==6) {address=0x84; max=23;min=0;} //小时
if(sel==7) {address=0x82; max=59;min=0;} //分钟
if(sel==8) {address=0x80; max=59;min=0;} //秒
if(sel==10) {address=0xc0; max=59;min=0;} //背光时间,最长1分钟
if(sel==12) {address=0xc2; max=1;min=0;} //闹铃开关寄存器
if(sel==13) {address=0xc4; max=23;min=0;} //闹铃时寄存器
if(sel==14) {address=0xc6; max=59;min=0;} //闹铃分寄存器

item=R1302(address+1)/16*10+R1302(address+1)%16;
if (sel_1==0) item++; else item--;
if(item>max) item=min;
if(item<min) item=max;

W1302(0x8e,0x00); //允许写操作
W1302(address,item/10*16+item%10); //写入DS1302 //转成BCD码
W1302(0x8e,0x80); //写保护,禁止写操作
}

//屏幕显示
void Out_LCM(void)
{ switch(model)
{
case 0: model0(); break;
case 1: model1(); break;
case 2: model2(); break; //在不同的条件下显示不同的字符
case 3: model3(); break;
case 4: model4(); break;
case 5: model5(); break;
case 6: model6(); break;
}
}

/***********************model为零时第一行显示时间,不为零时显示system setup******/
void model0()
{
DisplayListChar(0,0,TIMER); //显示固定字符串(Time)
OutputInformation(13,0,0x20); //不显示
OutputInformation(4,0,0x20); //不显示
OutputInformation(4,1,0x20); //不显示
OutputInformation(15,1,0x20); //不显示
OutputInformation(7,1,0x2f); //显示固定字符 "/"
OutputInformation(10,1,0x2f); //显示固定字符 "/"
OutputInformation(13,1,0x2f); //显示固定字符 "/"
DisplayListChar(0,1,DATE); //显示固定字符串Date(日期)
if(a==1) //冒号闪烁
{OutputInformation(7,0,0x3a); OutputInformation(10,0,0x3a);}
else
{OutputInformation(7,0,0x20); OutputInformation(10,0,0x20);}

/*******************model为零时第二行显示日期,不为零显示设置项目*******/

OutputInformation(5,1,R1302(0x8d)/16+0x30); //显示年
OutputInformation(6,1,R1302(0x8d)%16+0x30);

OutputInformation(8,1,R1302(0x89)/16+0x30); //显示月
OutputInformation(9,1,R1302(0x89)%16+0x30);

OutputInformation(11,1,R1302(0x87)/16+0x30); //显示日
OutputInformation(12,1,R1302(0x87)%16+0x30);

OutputInformation(14,1,R1302(0x8b)%16+0x30); //显示星期

OutputInformation(5,0,R1302(0x85)/16+0x30); //显示小时
OutputInformation(6,0,R1302(0x85)%16+0x30);

OutputInformation(8,0,R1302(0x83)/16+0x30); //显示分钟
OutputInformation(9,0,R1302(0x83)%16+0x30);

OutputInformation(11,0,R1302(0x81)/16+0x30); //显示秒
OutputInformation(12,0,R1302(0x81)%16+0x30);
}

/*************************model不为零时显示系统设置***********************************/

//model为1时time闪烁,按下模式键后进入时间调整
void model1()
/*************************************判断ID的值来显示项目***********************/
{ OutputInformation(0,0,0x20); //不显示
OutputInformation(1,0,0x20);
DisplayListChar(2,0,systemp); //第一行显示system setup
if(id==0) //为0时显示TIME date lalcak
{OutputInformation(9,1,0x20); //不显示
OutputInformation(4,1,0x20); //不显示
OutputInformation(15,1,0x20); //不显示
DisplayListChar(5,1,DATE); //显示date
DisplayListChar(10,1,alarmclock);//显示lalcak

if(a==1)
{OutputInformation(0,1,0x20); //不显示
OutputInformation(1,1,0x20); //不显示
OutputInformation(2,1,0x20); //不显示
OutputInformation(3,1,0x20); //不显示
}
else
DisplayListChar(0,1,TIMER); //显示time
}
else
{ //id不为零进入时间调整项目
OutputInformation(3,1,0x3a); //显示固定字符 ":"
OutputInformation(6,1,0x3a); //显示固定字符 ":"
OutputInformation(9,1,0x20); //不显示
OutputInformation(10,1,0x20); //不显示
OutputInformation(0,1,0x20); //不显示

热心网友 时间:2023-10-09 05:11

我有温度+时间的,只是没有闹铃,但是有温度报警。我想问你,你是哪个学校的?追问成都理工大学 panjixiang2007@126.com 带上电路图+完整程序 效果更佳

追答我上传在网上有http://www.pudn.com/

参考资料:http://www.pudn.com/

...芯片以及液晶显示的lcd1602电子万年历毕业设计,万分感谢。_百度知 ...

void ds1302_init() //1302芯片初始化子函数(2010-01-07,12:00:00,week4){RST=0;SCLK=0;write_1302(0x8e,0x00); //允许写,禁止写保护 write_1302(0x80,0x00); //向DS1302内写秒寄存器80H写入初始秒数据00write_1302(0x82,0x00);//向DS1302内写分寄存器82H写入初始分数据00write_1302(0x84,0x...

我用DS1302+LCD1602+单片机制作的的电子钟,可以显示,但是时间不会走

DS1302的数据显示存在16进制转换的问题,这个要特别注意。另外不要随便抄别人的程序,用之前一定要读懂,就是抄也要抄那种有正规注释的程序,这样查找问题比较容易。。建议你去杜洋的网站去下载一段标准的代码使用。。下面只是一部分。。/*** DS1302 ***/ //设置1302的初始时间 void Init_1302(void)...

...用DS1302和DS18B20的数字温度计和电子时钟的设计?

看DATASHEET,通过时序图来写.两个都不复杂,主要是处理好读写方法即可.网上此类程序很多,可能是使用的MCU不同,只需要根据MCU修改读写方法,并针对实际情况修改各类延时参数就可以改成你所要的程序.

我是新手,想学习单片机。请问哪款开发板性价比好呢?网友介绍济南博芯电 ...

7、板子上配套一个DS1302实时时钟芯片,可以用来做实时时钟实验,弄懂电子表的工作原理。8、板子上配一个24C02的EEPROM芯片,用来保存掉电后不准丢失的重要数据,用来学习IIC通信实验。9、板子上配有一个PCF8591,这个芯片集成了AD和DA,可以用来通过AD来进行电压采集实验,通过DA来产生方波、三角波、正弦...

电子时钟开题报告

课题名称 基于单片机的电子时钟设计 姓名xx 学号xx 班级 信息xx班 专业 电子信息工程 院系 信息工程学院 指导教师 xxx 一、选题依据 1 课题的目的 社会对信息交换不断提高的要求及高新技术的逐步发展,促使电子时钟发展并且投入市场得到广泛应用。 2 课题意义 二十一世纪是数字化技术高速发展的时代,而单片机在数字化高...

单片机lcd1602程序 80C51单片机LCD显示信息 51单片机液晶显示原理 单片机lcd显示程序 单片机lcd工作原理 单片机lcd显示原理 用一个单片机控制多个LCD 单片机LCD项目 单片机LCD显示
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
龚琳娜音乐作品 龚琳娜的歌(全部) ...她说做不了好朋友,还可以做朋友,是什么意思啊!以后还 ..._百度... ...Out )攻略_荒野行动卡在登陆界面怎么办 卡屏解决方法 “柳色和愁为重折”的出处是哪里 ...下身是蓝黑色的牛仔五分裤 配同样暖黄色的帆布鞋还是白色帆布鞋好看... 绝地求生全军出击G港怎么打 G港打法详解-高手进阶-安族网 下肢残疾人 不能动 需要有人照顾的人 她能学什么? ...共6角。如果三种 硬币的钱数相等,各有 多少枚? 什么品牌的睫毛膏值得推荐? 一直在备孕却没有消息,怎么才能快速怀孕方法? 怎样在晚上交易股票啊? 雷锋同志,我想要陈奕迅^王菲-因为爱情(演唱会)-国语-2927622.mpg种子下载,感谢哈 大乌龟吃什么? 晚上买入的股票第二天能自动买上吗? 长达两年的备孕都没有怀上,原因会有哪些?又该怎么办? 有没有哪位同志手里有诺基亚5230呀,本人求 中国最大的陆地宠物龟是什么龟?龟苗价格是? 备孕7个月也没有怀孕,是怎么回事?要怎样调理? “相对温度”,“绝对温度”分别是什么? 晚上12点可以委托买卖股票吗 “务”的繁体字怎么写? 如何知道某个文件夹的创建程序? 备孕一直没有怀上,应该如何做才能受孕成功呢? 繁体有法律规定不可以用吗? 刚看到有人问关于17K小说网的同人小说征文活动什么,那个,同人小说不是等同于同志小说等于*小说吗 白天上班没时间,晚上怎样买卖和操作股票 备孕很久没有怀孕,需要怎么提高受孕几率? 为什么气体在高温低压的条件下最接近理想气体 大陆写繁体字违法吗? 内地用繁体字会犯法吗? 雷锋同志,我想要下载肖申克的救赎BD国语配音中英字幕1280x720无水印版(在线高清)种子的网址感激不尽 户口本上的名字能不能有繁体字啊 ??? 备孕很久没有怀孕,需要如何提高受孕几率? 买股票有时间限制吗 ,晚上可以买卖吗 具体时间是怎么样了 晚上8点以后买股票第二天会成交吗 康熙字典里“务”的繁体字是几画? 备孕一个月没怀上?备孕不成功的原因? 为什么高温低压的气体更接近理想气体? 备孕半年一直没有成功,应该多注意什么? 急救!!! 公务员考试能用繁体字吗?? 备孕好久一直没有成功,该如何调理身体? 我家的大乌龟为什么不吃东西 备孕两年都没怀上可能是什么原因? 备孕半年了,还没有怀孕,正常吗?有点着急了 手机卡被锁住了,应该如何解决? 手机卡被锁住了,怎么解决? 我的手机卡被锁了,怎么办? 手机卡被锁了 手机卡被锁怎么办?