單片機(jī)復(fù)習(xí)程序例舉005 -- DS1302時(shí)鐘芯片
用AT89S52單片機(jī)、DS1302時(shí)鐘芯片、1602LCD做一個(gè)電子表 。各文件例舉如下:1、main()函數(shù)所在文件部分:
/******************************************************************************
*說(shuō)明:AT89S52芯片,12M晶振
*外設(shè):HD44780控制的1602LCD和DS1302時(shí)鐘芯片
*本程序:做一個(gè)電子時(shí)鐘,顯示日歷,時(shí)間
*K1設(shè)置確認(rèn)鍵,K2設(shè)置位選擇鍵,K3設(shè)置參數(shù)減,K4設(shè)置參數(shù)加
******************************************************************************/
//#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]時(shí):i=0,1分:i=3,4秒i=6,7
/******************************************************************************
===============================================================================
voidmain(void)函數(shù)部分
===============================================================================
*******************************************************************************/
voidmain(void)
{
//1、定義相關(guān)變量
//unsignedchari;
//2、初始化
HD44780_1602LCD_Init();
DS1302_Init();
//3、在HD44780控制的1602LCD上顯示時(shí)鐘信息
Clear_Screen();
while(1)
{
Get_Curren_Time();//獲取當(dāng)前時(shí)間
Dis_Str(0,1,calendar);
Dis_Str(1,5,clock_time);
User_Set_Time();//用戶通過(guò)按鍵設(shè)置時(shí)間
}
}
/******************************************************************************
*名稱:
*功能:
*參數(shù):
*返回:
******************************************************************************/
//DIY_clock.c
#include"DIY_clock.h"
//定義字符數(shù)組顯示數(shù)字
unsignedcharcodedigit[10]={"0123456789"};
//用戶自定義的字符編碼方式:在8*8的點(diǎn)陣中選“右上角”的“5列*7行”點(diǎn)陣存放數(shù)據(jù)
//unsignedcharcodeuser_str0[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};/*自定義字符℃*/
/******************************************************************************
*名稱:Get_Curren_Time()
*功能:獲取當(dāng)前時(shí)間
*參數(shù):無(wú)
*返回:無(wú)
******************************************************************************/
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()
*功能:本地用戶通過(guò)按鍵設(shè)置秒位
*參數(shù):無(wú)
*返回:無(wú)
******************************************************************************/
voidUser_Set_Time_Second(void)
{
inttemp,switch_temp;
switch_temp=1;//程序停留在某一個(gè)設(shè)置為的開關(guān)
/*------按一次K1設(shè)置:時(shí)、分、秒-------------------*/
/*``````設(shè)置: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-- ;