单片机用于电子时钟的设计,实现闹钟、温度等等功能的程序
/*******************************************************************************
*标题: 可调的DS1302时钟在LCD1602上显示 *
* *
********************************************************************************
*接线:JP8接JP5、蜂鸣器短路帽的左端接到P2^1(用一根杜邦线) *
*用杜邦线把P2^0连到led灯上(任意一个) *
*说明:本实验是在普中科技单片机开发板HC6800EM3上实现的 *
********************************************************************************/
#include《reg52.h》
#include 《intrins.h》
#define uchar unsigned char
#define uint unsigned int
sbit SCK=P3^6; //时钟
sbit SDA=P3^4; //数据
sbit RST=P3^5; // DS1302复位
sbit lcdrs=P2^7;
sbit lcdrw=P2^6;
sbit lcden=P2^5;
sbit key1=P1^0; //开调时键
sbit key2=P1^1; //调时加键
sbit key3=P1^2; //调时减键
sbit key4=P1^3; //开设定闹铃键
sbit key5=P1^4; //返回正常显示键
sbit key6=P1^5; //闹铃开关键
sbit DQ=P3^7; //温度传感器数据通信位
sbit beep = P2^1; //蜂鸣器控制IO口
sbit led1 = P2^0; //led灯,闹铃响标志
bit ReadRTC_Flag,Display_Flag,Alarm_Flag,flag; //定义标志位
uchar miao,fen,shi,ri,yue,week,nian,T,C=0,k=0,m=0,n=0;
uchar set_miao,set_fen,set_shi,set_ri,set_yue,set_nian,TempBuffer[5],temp_value;
char l_tmpdate[7]={0x50,0x08,0x011,0x07,0x10,0x01,0x12};//设置初始时间,秒分时日月周年12-10-07 01:08:50
uchar code write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日月周年 最低位写位
uchar code read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; //秒分时日月周年 最低位读位
uchar code table1[]=“SUN”; //星期字表
uchar code table2[]=“MON”;
uchar code table3[]=“TUE”;
uchar code table4[]=“WED”;
uchar code table5[]=“THU”;
uchar code table6[]=“FRI”;
uchar code table7[]=“SAT”;
uchar code tab1[]=“20 - - ”;
uchar code tab2[]=“ : :”;
uchar code tab3[14]=“ Set Alarm! ”;
char tab4[]={0,0,12};
/******************************************************************/
/* 函数声明 */
/******************************************************************/
void Init_DS18B20(void);
unsigned char ReadOneChar(void);
void WriteOneChar(uchar dat);
void ReadTemp(void);
void temp_to_str(); //温度数据转换成液晶字符显示
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(void);
void delay(uchar a);
void delay1(uchar a);
void di();
void lcd_mang();
void write_lcd1602(uchar cmd,uchar i);
void ini_lcd1602();
void write_week(uchar xq);
void write_nyr(uchar add,uchar dat);
void write_sfm(uchar add,uchar dat);
void display();
void keyscan();
void alarm();
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部1条评论
快来发表一下你的评论吧 !