单片机复习程序例举005 -- DS1302时钟芯片
扫描二维码
随时随地手机看文章
用AT89S52单片机、DS1302时钟芯片、1602LCD做一个电子表 。各文件例举如下:1、main()函数所在文件部分:
/******************************************************************************
*说明:AT89S52芯片,12M晶振
*外设:HD44780控制的1602LCD和DS1302时钟芯片
*本程序:做一个电子时钟,显示日历,时间
*K1设置确认键,K2设置位选择键,K3设置参数减,K4设置参数加
******************************************************************************/
//#include
//#include
#include"DELAY_FUNCTION_FELL.h"
#include"HD44780_1602LCD.h"
#include"DS1302_SPIdriver.h"
#include"DIY_clock.h"
//用户要显示的字符串
unsignedcharcalendar[17]="Data:2000-00-00";//calendar[i]年:i=7,8月:i=10,11日:i=13,14
unsignedcharclock_time[17]="00:00:00";//clock_time[i]时:i=0,1分:i=3,4秒i=6,7
/******************************************************************************
===============================================================================
voidmain(void)函数部分
===============================================================================
*******************************************************************************/
voidmain(void)
{
//1、定义相关变量
//unsignedchari;
//2、初始化
HD44780_1602LCD_Init();
DS1302_Init();
//3、在HD44780控制的1602LCD上显示时钟信息
Clear_Screen();
while(1)
{
Get_Curren_Time();//获取当前时间
Dis_Str(0,1,calendar);
Dis_Str(1,5,clock_time);
User_Set_Time();//用户通过按键设置时间
}
}
/******************************************************************************
*名称:
*功能:
*参数:
*返回:
******************************************************************************/
//DIY_clock.c
#include"DIY_clock.h"
//定义字符数组显示数字
unsignedcharcodedigit[10]={"0123456789"};
//用户自定义的字符编码方式:在8*8的点阵中选“右上角”的“5列*7行”点阵存放数据
//unsignedcharcodeuser_str0[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};/*自定义字符℃*/
/******************************************************************************
*名称:Get_Curren_Time()
*功能:获取当前时间
*参数:无
*返回:无
******************************************************************************/
voidGet_Curren_Time(void)
{
inttemp;
temp=Read_DS1302_Year();
calendar[7]=digit[temp/10];
calendar[8]=digit[temp%10];
temp=Read_DS1302_Month();
calendar[10]=digit[temp/10];
calendar[11]=digit[temp%10];
temp=Read_DS1302_Day();
calendar[13]=digit[temp/10];
calendar[14]=digit[temp%10];
temp=Read_DS1302_Hour();
clock_time[0]=digit[temp/10];
clock_time[1]=digit[temp%10];
temp=Read_DS1302_Minute();
clock_time[3]=digit[temp/10];
clock_time[4]=digit[temp%10];
temp=Read_DS1302_Second();
clock_time[6]=digit[temp/10];
clock_time[7]=digit[temp%10];
}
/******************************************************************************
*名称:User_Set_Time_Second()
*功能:本地用户通过按键设置秒位
*参数:无
*返回:无
******************************************************************************/
voidUser_Set_Time_Second(void)
{
inttemp,switch_temp;
switch_temp=1;//程序停留在某一个设置为的开关
/*------按一次K1设置:时、分、秒-------------------*/
/*``````设置:second`````````````````````*/
temp=Read_DS1302_Second();
while(switch_temp)
{
if(K4==0)//增加秒
{
delay1ms(15);
if(K4==0)
{
while(K4==0){;}//等待按键释放
temp++;
if(temp==60)
{
temp=0;
}
}
}
if(K3==0)//减少秒
{
delay1ms(15);
if(K3==0)
{
while(K3==0){;}//等待按键释放
temp-- ;