DS1302程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar count_10ms; //定义10ms计数器
sbit K1 = P3^2; //定义K1键
sbit K2 = P3^3; //定义K2键
sbit K3 = P3^4; //定义K3键
sbit K4 = P3^5; //定义K4键
sbit BEEP=P3^7; //定义蜂鸣器
sbit reset = P1^2;
sbit sclk = P1^0;
sbit io = P1^1;
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1 ;
sbit LCD_EN=P2^2;
bit K1_FLAG=0; //定义按键标志位,当按下K1键时,该位置1,K1键未按下时,该位为0。
uchar code line1_data[] = {"---LCD Clcok---"}; //定义第1行显示的字符
uchar code line2_data[] = {"****"}; //定义第2行显示的字符
uchar disp_buf[8] ={0x00}; //定义显示缓冲区
uchar time_buf[7] ={0,0,0x12,0,0,0,0}; //DS1302时间缓冲区,存放秒、分、时、日、月、星期、年
uchar temp [2]={0}; //用来存放设置时的小时、分钟的中间值
/********以下是函数声明********/
void Delay_ms(uint xms) ;
bit lcd_busy();
void lcd_wcmd(uchar cmd);
void lcd_wdat(uchar dat) ;
void lcd_clr() ;
void lcd_init() ;
void write_byte(uchar inbyte); //写一字节数据函数声明
uchar read_byte(); //读一字节数据函数声明
void write_ds1302(uchar cmd,uchar indata); //写DS1302函数声明
uchar read_ds1302(uchar addr); //读DS1302函数声明
void set_ds1302(uchar addr,uchar *p,uchar n); //设置DS1302初始时间函数声明
void get_ds1302(uchar addr,uchar *p,uchar n); //读当前时间函数声明
void init_ds1302(); //DS1302初始化函数声明
/********以下是延时函数********/
void Delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒for(j=110;j>0;j--);
}
/********以下是LCD忙碌检查函数********/
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (bit)(P0&0x80);
LCD_EN = 0;
return result;
}
/********以下是写指令寄存器IR函数********/
void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN = 1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN = 0;
}
/********以下是写寄存器DR函数********/
void lcd_wdat(uchar dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN = 1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN = 0;
}
/********以下是LCD清屏函数********/
void lcd_clr()
{
lcd_wcmd(0x01); //清除LCD的显示内容
Delay_ms(5);
}
/********以下是LCD初始化函数********/
void lcd_init()
{
Delay_ms(15); //等待LCD电源稳定
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据Delay_ms(5);
lcd_wcmd(0x38);
Delay_ms(5);
lcd_wcmd(0x38);
Delay_ms(5);
lcd_wcmd(0x0c); //显示开,关光标
Delay_ms(5);
lcd_wcmd(0x06); //移动光标
Delay_ms(5);
lcd_wcmd(0x01); //清除LCD的显示内容
Delay_ms(5);
}
/********以下是写一字节数据函数********/
void write_byte(uchar inbyte)
{
uchar i;
for(i=0;i<8;i++)