DS1302程序

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++)

相关文档
最新文档