所有仿真详情导航:
PROTEUS专栏说明-CSDN博客
目录
一、主要功能
二、硬件资源
三、程序编程
四、实现现象
一、主要功能
基于51单片机,采用DS1302时钟模块,通过LCD1602显示实时时间,也可以储存时间在AT2DC02中,下次开机读取闹钟时间
然后通过串口传输实时时间给电脑端,这个表示WIFI
到达闹钟后,蜂鸣器报警,LED闪烁一秒
语音通过串口设置闹钟,发送格式为@22-20-20#
采用按键表示定位模块,一个表示定位正确,一个表示定位错误,用两个LED灯表示状态。
二、硬件资源
基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。
三、主程序编程
#include"reg51.h"
#include"ds1302.h"
#include "lcd1602.h"
#include<intrins.h>
#include<stdio.h>
#include"i2c.h"#define uchar unsigned char //数据类型换名字
#define uint unsigned int
/**************接口定义***************/
sbit button=P3^2;//按钮
sbit beep=P2^3;//蜂鸣器
sbit led=P1^0;//LED
sbit key1 = P1^1;
sbit key2 = P1^2;
sbit led1 = P1^3;
sbit led2 = P1^4;
/**************变量定义*****************/
uchar shi_time=0x17,fen_time=0x56,miao_time=0X30;//闹钟
uchar alarm[]={"ALARM12-40-30OFF"};//闹钟缓存
uchar clock[]={"CLOCK12-40-30 "};//时钟缓存
uchar ON_OFF=0;//ON.OFF标志
uint tim=0; //计时
uint tim1 = 0;
uchar start=0;//闹钟开启uchar recive=0;//接收标志
uchar start_shou=0;//接收开始
uchar buff[]={"12-40-30"};void delay(uint i)//延时
{while(i--);
}void UART_init()//串口初始化
{SCON=0X50; //设置为工作方式1TMOD = 0x21; //T1工作模式2 8位自动重装 T0模式1TH1 = 0xfd;TL1 = 0xfd; //比特率9600TH0=0x3c;//定时50msTL0=0xb0;ET0=1;//T0中断开启TR0=1;TR1 = 1; //启动T1定时器REN = 1; //串口允许接收EA = 1; //开总中断ES = 1; //串口中断打开TI=1;
}
//===================================================================
void main()//主函数
{ init_1602();delay(10000);write_string(1,0,clock);//显示write_string(2,0,alarm);Ds1302ReadTime();TIME[0]&=0x7f;Ds1302Init();shi_time=At24c02Read(0);//初始化闹钟//if((shi_time>0x23)||((shi_time>>4)>9)||((shi_time&0x0f)>9))// shi_time=0x06;fen_time=At24c02Read(1);//初始化闹钟//if(fen_time>0x59||((fen_time>>4)>9)||((fen_time&0x0f)>9))// fen_time=0x30;miao_time=At24c02Read(2);//初始化闹钟//if(miao_time>0x59||((miao_time>>4)>9)||((miao_time&0x0f)>9))// miao_time=0x30;At24c02Write(0,shi_time);//保存到24C02delay(10000);At24c02Write(1,fen_time);delay(10000);At24c02Write(2,miao_time);delay(10000);alarm[5]=(shi_time>>4)+0x30;alarm[6]=(shi_time & 0x0f)+0x30;alarm[8]=(fen_time>>4)+0x30;alarm[9]=(fen_time & 0x0f)+0x30;alarm[11]=(miao_time>>4)+0x30;alarm[12]=(miao_time & 0x0f)+0x30;write_string(2,0,alarm);//显示闹钟UART_init(); //串口初始化while(1)//主循环{if(!key1){led1 = 0;led2 = 1;while(!key1);}if(!key2){led1 = 1;led2 = 0;while(!key1);}if(!button)//检测按钮{
// delay(100);//延时消抖if(!button){if(start) //清除报警start=0;else //闹钟开关ON_OFF=!ON_OFF;if(!ON_OFF) //调整闹钟显示{alarm[14]='F';alarm[15]='F';write_string(2,0,alarm);}else{alarm[14]='N';alarm[15]=' ';write_string(2,0,alarm);}}while(!button);//等待按钮松开}}
//**************************}
//===================================================================
void UART() interrupt 4 //串口中断
{uchar num=0,i;if(RI){ num=SBUF;//保存数据RI=0;if(start_shou){TR0=0;buff[recive]=num;//保存数据recive++;if(recive==8)//接收数据处理{ recive=0;shi_time=(buff[0]-0x30)<<4; shi_time+=(buff[1]-0x30);fen_time=(buff[3]-0x30)<<4;fen_time+=(buff[4]-0x30);miao_time=(buff[6]-0x30)<<4;miao_time+=(buff[7]-0x30);for(i=0;i<8;i++) //保存到数组{alarm[i+5]=buff[i];}write_string(2,0,alarm);//显示闹钟At24c02Write(0,shi_time);//保存到24C02delay(10000);At24c02Write(1,fen_time);delay(10000);At24c02Write(2,miao_time);delay(10000);TR0=1;} }if(num=='@') //开始{start_shou=1;recive=0;}if(num=='#') //结束{start_shou=0;recive=0;}TR0=1;}
}void timer0() interrupt 1//T0中断
{ uchar i=0,j=0;if(start)//响铃beep=0;elsebeep=1;//关闭蜂鸣器//***************************if(tim<10)//0.5stim++;else{tim=0;if(start) //闪灯led=!led;elseled=1; //关灯Ds1302ReadTime();//读取时间clock[5]=(TIME[2]>>4)+0x30;//转换成ascallclock[6]=(TIME[2]&0x0f)+0x30;clock[8]=(TIME[1]>>4)+0x30;//转换成ascallclock[9]=(TIME[1]&0x0f)+0x30;clock[11]=(TIME[0]>>4)+0x30;//转换成ascallclock[12]=(TIME[0]&0x0f)+0x30;write_string(1,0,clock);//显示 //*************************i=0;if(miao_time==TIME[0])//闹钟检测{i++;}
if(ON_OFF==1)
{ if(shi_time==TIME[2]){i++;}if(fen_time==TIME[1]){i++;}if(i==3){ start=1;//开启闹铃i=0;}if(fen_time+1==TIME[1]){i++;}if(i==3){ start=0;//关闭闹铃i=0;}
}}if(tim1<20){tim1++;}else{tim1 = 0;printf("%s \r\n",clock); }TH0=0x3c;//定时50msTL0=0xb0;
}
四、实现现象
具体动态效果看B站演示视频:
基于单片机的WIFI、语音、储存、时钟、闹钟、定位系统_哔哩哔哩_bilibili
全部资料(源程序、仿真文件、安装包、原理图、演示视频):
链接: https://pan.baidu.com/s/1bmfVoItSzq9Hi06uQmVkXQ?pwd=8wq1 提取码: 8wq1
--来自百度网盘超级会员v4的分享